quarta-feira, 18 de novembro de 2015

Teste #2 - Turma TP1

Pergunta 1

a) Diga o que entende por um objecto ser homogéneo. Indique um tipo de objectos que tem esta característica.
Resposta: quando as componentes do objecto têm quer ser todas do mesmo tipo. Exemplo: cadeias de caracteres.

b) Considere a seguinte listagem. Diga, justificando, o que vai aparecer no lugar dos pontos de interrogação.
1.>>> x_1 = [(1,2,3),(4,5,6)]
2.>>> x_1[0] = (7,8,9)
3.>>> x_1
4.??? --> [(7,8,9),(4,5,6)]
5.>>> x_1[0][1] = 'b'
6.??? --> Dá erro de atribuição. Não  se pode alterar, por atribuição,  o valor de um tuplo
Pergunta 2
Implemente um programa que calcula o valor aproximado da função zeta(s) igual ao somatório quando n varia de 1 a infinito de 1/(n^s). Valorizava-se uma solução que controlasse o erro máximo da solução.

Sem considerar a precisão, a solução baseia-se em somar um certo número de termos:
1.def zeta(s,k):
2.    res = 0
3.    for n in range(1,k+1):
4.        res += 1/pow(n,s)
5.    return res
Considerando agora a precisão:
01.def zeta(s,prec):
02.    erro = 1
03.    res = 0
04.    n = 1
05.    while erro > prec:
06.        aux = res
07.        res += 1/pow(n,s)
08.        erro = abs(aux - res)
09.        n += 1
10.    return res
Pergunta 3
Dadas duas imagens a preto e branco, representadas por uma lista de listas de uns (preto) e zeros (branco), construa uma nova imagem, sem destruir as anteriores, que é preta (um) numa dada posição apenas quando as duas imagens de entrada são ambas pretas nessa posição. A solução mais básica:
01.def intersecta(img_1, img_2):
02.    nova_img = []
03.    for i in range(len(img_1)):
04.        nova_linha = []
05.        for j in range(len(img_1[0])):
06.            if img_1[i][j] == 1 and img_2[i][j] == 1:
07.                nova_linha.append(1)
08.            else:
09.                nova_linha.append(0)
10.        nova_img.append(nova_linha)
11.    return nova_img
Uma alternativa que evita o teste dentro dos ciclos:
1.def intersecta(img_1, img_2):
2.    nova_img = []
3.    for i in range(len(img_1)):
4.        nova_linha = []
5.        for j in range(len(img_1[0])):
6.                nova_linha.append(img_1[i][j] * img_2[i][j])
7.        nova_img.append(nova_linha)
8.    return nova_img
Em vez do produto também se podia usar um AND lógico. Ainda outra alternativa seria construir uma imagem só com zeros e colocar a um sempre que o produto das outras for igual a um,, ou a soma for igual a 2. Fica para exercício.

Sem comentários:

Enviar um comentário