Folha 2
Procedimentos e Recursividade
2.1 (Analisar Procedimento)
Considere a seguinte definição
(define mais-abs
(lambda (a b)
((if (> b 0) + -) a b)))
Explique o funcionamento do procedimento indicado e teste-o.
2.2 (Ano Bissexto)
O ano bissexto ocorre de 4 em 4 anos, com excepção dos anos de século
que são bissextos só de 4 em 4 séculos, ou seja cada 400 anos.
Escreva um procedimento bissexto? com argumento um número inteiro
(ano) e que retorne um valor lógico (#t ou #f)
indicando se o ano é bissexto.
2.3 (Dias entre datas)
Escreva um procedimento que tenha como argumentos 2 datas (3 inteiros
para cada uma, indicando o ano, o mês, o dia) e calcule o número de
dias entre as datas.
2.4 (Algoritmo de Euclides do Máximo Divisor Comum)
O máximo divisor comum de 2 inteiros a e b é por definição o maior
inteiro que divide a e b com resto 0. O algoritmo de Euclides para o
máximo divisor comum baseia-se no facto de que, quando efectuamos a
divisão com resto de 2 inteiros a e b (a >= b) 2 casos podem
ocorrer:
- o resto é 0, m.d.c.(a,b) = b
- o resto r não é 0, mdc(a,b) = mdc(b,r).
Escreva um procedimento em Scheme para calcular o máximo divisor comum
usando o algoritmo de Euclides.
2.5 (Raiz quadrada)
A raiz quadrada de um número pode ser obtida de forma iterativa usando
o método de Newton. A partir de uma aproximação inicial y da raiz de
um número x, uma melhor aproximação pode ser obtida fazendo a média de
y e x/y.
2.5.a Defina o procedimento media que calcula a média
dos valores dos seus argumentos.
(media 2 5) -> 3.5
2.5.b Defina o procedimento melhora-aprox que tem como
argumentos o número e a aproximação da raiz e efectua uma iteração do
método.
(melhora-aprox 2 1) -> 1.5
2.5.c Defina o predicado ja-chega? com 3 argumentos: o
número, o valor aproximado da raiz e um valor de erro; o predicado
deve retornar #t quando o quadrado da aproximação e o número
diferirem de menos do que o valor do erro dado e #f no caso
contrário.
2.5.d Use os procedimentos anteriores para construir
raiz, um procedimento que tem como argumentos um número, uma
aproximação inicial e uma precisão e calcula a raiz quadrada do número
iterativamente na precisão indicada.