Programamos muito por adaptação de código já feito, por nós ou por outrem. Mais uma razão para que os programas sejam legíveis e modulares. Programamos pois por
analogia. Vejamos um exemplo simples. Seja o programa para o cálculo dos inteiros positivos entre 1 e
n.
def somatorio(n):
""" Calcula a soma dos inteiros positivos de 1 até n."""
soma = 0
for i in range(1,n+1):
soma += i
return soma
Admitamos que nos pedem agora para um programa para o cálculo do
número harmónico de ordem n, definido por:

Que semelhança com o problema anterior? Não consegue ver? E se der a definição do primeiro caso:

Parece agora evidente que são semelhantes. A única diferença está no termo a somar:
i no primeiro caso,
1/i no segundo. Logo:
def harmonico(n):
""" Calcula o número harmónico dde ordem n."""
soma = 0
for i in range(1,n+1):
soma += 1/i
return soma
Já está. E se for para calcular o
número de Euler, base do logaritmo natural:

As diferenças estão nos limites do somatório e no termo a somar de cada vez. Mas não é substancialmente diferente, pois não? Na solução é evidente que temos que limitar o ... infinito!
import math
def expo(n):
soma = 0
for i in range(0,n+1):
soma += 1/math.factorial(i)
return soma
Estamos a usar a
função factorial do módulo math. Mas também não é difícil escrever um programa para o cálculo do factorial. Por definição:

com o factorial de 0 igual a 1. Podemos usar a
analogia com o caso do somatório, sendo que a única diferença é termos um produto em vez de uma soma.
def factorial(n):
""" Calcula o factorial de um número."""
fact = 1
for i in range(1,n+1):
fact *= i
return fact
Notar como o caso de zero foi tratado à parte. Regressemos aos exemplos anteriores e pensemos no caso da aproximação do valor do seno (em radianos):

Como adaptar as soluções anteriores (em particular a do número de Euler? Trivial. Só o termo a somar é que é um pouco mais complexo.
import math
def seno(x,n):
soma = 0
for i in range(0,n+1):
soma += (((-1)**i) * x**(2*i+1))/math.factorial(2*i+1)
return soma
Aqui o que há a reter é que não se trata de uma constante mas sim de uma função de uma variável.
That's it!
Sem comentários:
Enviar um comentário