O objetivo desta aula é experimentar a definição de funções que invocam outras funções, bem como a definição de funções recursivas. Esta aula tem também dois objetivos adicionais: experimentar a definição de procedimentos e o desenvolvimento de código com input e output com o utilizador. Após a realização da prática, deverá ter sido adquirida uma noção básica dos seguintes conceitos:
Desenvolva um módulo com funções que permitam:
Esta função deverá iterar sobre os números naturais até n, contando os números que são divisores de n. Exemplo:
number_of_divisors(8) → 4 (1, 2, 4, 8)
Note que o conjunto dos divisores próprios exclui o próprio número.
Esta função deverá iterar sobre os números naturais até n (exclusive), acumulando os números que são divisores de n.
Exemplo:
sum_of_divisors(6) → 6 (1 + 2 + 3)
Exemplo:
is_prime(6) → false
Nota: nesta função é útil invocar a função do exercício 1 do trabalho prévio, que calcula quantos divisores tem um número. A função pode ser invocada da seguinte forma:
n = number_of_divisors(8)
Após a instrução executar, a variável n tomará o valor devolvido pela invocação da função number_of_divisors().
Exemplo:
sum_of_primes_smaller_than(8) → 17 (2 + 3 + 5 + 7)
Exemplo:
number_of_primes_up_to(11) → 5 (2, 3, 5, 7, 11)
Desenvolva um módulo com funções e procedimentos que permitam:
Esta função deverá pedir ao utilizador para introduzir um número inteiro entre os limites dados. Caso o utilizador introduza um número inteiro fora desse intervalo, a função voltar a pedir ao utilizador para introduzir um número inteiro dentros dos limites dados. Exemplo:
value_between(1, 6) → 2 (o utilizador introduziu o valor 2)
Este procedimento deverá escrever no ecrã por ordem crescente todos os números inteiros entre os limites dados na invocação do procedimento. Exemplo:
print_ascending_between(1, 5)
1
2
3
4
5
print_tens_in_roman(6)
LX
Exemplo:
print_in_roman(66)
LXVI
Exemplo:
print_ascending_between_in_h(6, 18, 3)
6
9
12
15
Um número perfeito é tal que a soma dos seus divisores próprios é igual ao próprio número. Por exemplo, 6 é um número perfeito, dado que os seus divisores próprios são {3, 2, 1} e 3 + 2 + 1 = 6.
Exemplo:
number_of_perfect_numbers_up_to(30) → 2 (6, 28)
Exemplo:
exists_prime_between(5, 9) → true (7 está no intervalo ]5, 9[)
Exemplo:
larger_difference_between_primes(13) → 4 (a diferença entre 7 e 11)