sábado, 7 de novembro de 2009

Problema 5.16

Este problema é mais difícil do que o anterior. Não sabemos quantos termos temos que somar, pelo que não faz sentido o ciclo for. Termos que recorrer a um ciclo while. Por outro lado, para sabermos o erro, temos que comparar duas somas, uma delas com mais um termo que a anterior. De tudo isto resulta a solução seguinte.


def harmonica_erro(erro):
soma = 0
denominador = 1.0
while True:
nova_soma = soma + 1.0/denominador
if nova_soma - soma > erro:
return nova_soma
soma = nova_soma
denominador = denominador + 1


Veja-se que o ciclo é controlado por uma condição sempre verdadeira. Mas termina, pois o erro vai sendo cada vez menor e por isso haverá um momento em que o comando return será executado. Agora temos que fabricar explicitamente o denominador para cada etapa do ciclo.

Sem comentários:

Enviar um comentário