domingo, 31 de outubro de 2010

Problema 4.11

O desafio é calcular o valor aproximado da série harmónica, valor esse controlado pelo erro máximo admissível. A solução é semelhante à do problema 4.10, mas agora vamos ter que usar como critério o erro. É-nos dito que esse erro é calculado pela diferença entre dois valores consecutivos da soma. De tudo isso decorre uma solução simples.
01.def harmonica_erro(erro):
02.    """ Calcula valor da série harmónica com erro inferior ao dado."""
03.    soma = 0
04.    denominador = 1.0
05.    while True:
06.        nova_soma = soma + 1.0/denominador
07.        if nova_soma - soma < erro:
08.            return nova_soma
09.        soma = nova_soma
10.        denominador = denominador + 1

A solução apresentada tem por base um ciclo que vai sendo executado até se atingir o objectivo do erro máximo. Na realidade criámos um aparente ciclo infinito (a condição de saída nunca é falsa). Aparente porque o comado return permite sair do ciclo. Mais ainda: permite sair do programa! Notar também que sendo o numerador fixo (vale sempre 1) optou-se por gerar apenas o denominador. Por se tratar de uma divisão, tivemos que ter o cuidado de usar um float (1.0). Finalmente deve-se analisar o modo como temos sempre dois calores consecutivos associados às variáveis soma e nova_soma.

Sem comentários:

Enviar um comentário