sábado, 7 de novembro de 2009

Mini Teste # 1 - Versão C

Mais uma solução ( a última!).

1. O que queremos dizer quando afirmamos que um operador, +, por exemplo, está sobrecarregado?

Resposta

Um operador diz-se sobrecarregado quando efectua diferentes operações em função do tipo dos objectos. No caso de + temos, por exemplo a operação de adição de números ou a de concatenação de cadeia de caracteres.

1.>>> 5 + 3
2.8
3.>>> ‘ab’ + +cd’
4.‘abcd’


2. Considere a seguinte sessão interactiva no interpretador de Python.

1.>>> import math
2.>>> x = sin(5)
3.Traceback (most recent call last):
4.  File "<string>", line 1, in <fragment>
5.NameError: name 'sin' is not defined
6.>>>


Explique de modo sintético mas rigoroso o que aconteceu.

Resposta

Ao importar o módulo matemático com import math, apenas o nome math fica guardado no espaço de nomes. Assim a operação sin é desconhecida do sistema a menos que se diga que faz parte do módulo matemático. Para tal temos que prefixar o nome da operação com o nome do módulo, com mostra a listagem. Não o fazendo dá-se um NameError.

1.>>> import math
2.>>> x = math.sin(5)
3.>>>


3. O programa da listagem abaixo pretende resolver o problema de duplicar os elementos numa lista. Por exemplo o que se pretende é:

01.>>> duplica([1,2,3])
02.[1,1,2,2,3,3]
03.>>>
04. 
05.def duplica(lista):
06.    copia = lista[:]
07.    for indice in range(len(lista)):
08.        copia.insert(indice + 1,lista[indice])
09.    return copia



No entanto não funciona. Identifique o tipo do erro que ocorre explicando a sua razão. Como podia corrigir o erro, embora usando a mesma ideia?

Resposta

O erro ocorre porque o programador não teve em linha de conta que a lista vai crescendo à medida que se inserem elementos. Funciona bem só para o primeiro elemento. A solução passa por ter esse aspecto em consideração como se indica na listagem.

1.def duplica_bem(lista):
2.    copia = lista[:]
3.    for indice in range(len(lista)):
4.        copia.insert(2*indice + 1,lista[indice])
5.    return copia


4. Desenvolva um programa que, dados um elemento numérico e uma lista de números, determina quantos elementos da lista são menores do que o número. A listagem abaixo ilustra o que se pretende.

1.>>> # ---> Aqui o seu programa de nome conta_menores.
2.>>> conta_menores(5,[2,8,6,5,3,2])
3.3
4.>>>


Resposta


Solução mais simples. Padrão acumulador (nome conta) a funcionar como contador. Percorre a lista pelo conteúdo. Para cada elemento da lista faz o teste e, caso se verifique a condição de ser menor, actualiza o contador.

1.def conta_menores(elem, lista):
2.    conta = 0
3.    for val in lista:
4.        if val < elem:
5.            conta = conta + 1
6.    return conta

Sem comentários:

Enviar um comentário