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.
1.
def
somatorio(n):
2.
3.
soma
=
0
4.
for
i
in
range(
1
,n
+
1
):
5.
soma
+
=
i
6.
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:
1.
def
harmonico(n):
2.
3.
soma
=
0
4.
for
i
in
range(
1
,n
+
1
):
5.
soma
+
=
1
/
i
6.
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!
1.
import
math
2.
3.
def
expo(n):
4.
soma
=
0
5.
for
i
in
range(
0
,n
+
1
):
6.
soma
+
=
1
/
math.factorial(i)
7.
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.
1.
def
factorial(n):
2.
3.
fact
=
1
4.
for
i
in
range(
1
,n
+
1
):
5.
fact
*
=
i
6.
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.
1.
import
math
2.
3.
def
seno(x,n):
4.
soma
=
0
5.
for
i
in
range(
0
,n
+
1
):
6.
soma
+
=
(((
-
1
)
*
*
i)
*
x
*
*
(
2
*
i
+
1
))
/
math.factorial(
2
*
i
+
1
)
7.
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