Vous êtes sur la page 1sur 2

Universidade Federal de Uberlandia

- UFU
- FACOM
Faculdade de Computacao
Funcional
Lista de exerccios de Programacao

parte I
Recursao,
Dica: Resolva todos os exerccios no papel e, somente quando estiverem prontos,
implemente-os no computador.
1. Considere o operador nand, que devolve True se ao menos um dos argumentos e False.
nand :: Bool -> Bool -> Bool
nand utilizando if then else;
(a) Defina a funcao
nand utilizando guardas;
(b) Defina a funcao
nand utilizando correspondencia

(c) Defina a funcao


de padroes;
da funcao
e_logico usando condicionais (if then else) em
2. Redefina a seguinte versao

vez de padroes:
e_logico :: Bool -> Bool -> Bool
e_logico True True = True
e_logico _
_
= False

3. Faca o mesmo para a seguinte versao:


e_logico :: Bool -> Bool -> Bool
e_logico True b = b
e_logico False _ = False

4. Implemente o calculo
do mnimo multiplo
comum (MMC) de dois numeros:

Main > mmc (2 , 3)


6
mdc vista em aula. Sabe-se que:
Utilize, para isso, a funcao
mmc(a, b) =

ab
mdc(a, b)

numeros.
5. Pesquise e implemente um metodo
recursivo para calcular o MDC de tres

mdc vista em aula. Sabe-se que:


Utilize a funcao
mdc(a, b, c) = mdc(mdc(a, b), c)
recursiva soma n ::
6. Implemente uma funcao
numeros
de 1 a n.

Int -> Int que computa a soma dos

recursiva para calcular a soma entre dois numeros


7. Implemente uma funcao
n1 e n2 in
para excluir os limites.
cluindo os limites. Reimplemente essa funcao
recursiva que, dados dois numeros
8. Implemente uma funcao
n1 e n2 , encontra os multiplos

de um terceiro numero
n3 que se encontram nesse intervalo.

recursiva que calcule o numero


9. Implemente uma funcao
de grupos distintos com k pes

soas que podem ser formados a partir de um conjunto de n pessoas (ou seja, a combinacao
abaixo da funcao
Comb(n, k) define as rede n pessoas em grupos de k). A definicao
gras:

se k = 1
n,
Comb(n, k) = 1,
se k = n

Comb(n 1, k 1) + Comb(n 1, k), se 1 < k < n


ex definida pela seguinte serie

10. Seja a funcao


de Taylor:
ex = 1 +

x1 x2 x3
xn
+
+
+ ... +
1!
2!
3!
n!

Implemente o calculo
recursivo da soma da serie
para n = 10 termos e teste para varios
exp x do
valores de x. Compare os resultados obtidos com o valor dado pela funcao

preludio-padr
ao.

recursiva conta_digitos que recebe um numero


11. Escreva uma funcao
inteiro n e retorna

sua quantidade de dgitos. Exemplo: se n = 132, conta_digitos n retorna 3.


recursiva soma_digitos que recebe um numero
12. Escreva uma funcao
inteiro n e retorna

a soma de seus dgitos. Exemplo: se n = 132, soma_digitos n retorna 6.


recursiva potencia (b, e) ::
13. Implemente a funcao
base b ao expoente e.

(Int, Int) -> Int que eleva a

de Ackermann, a qual e definida por:


14. Implemente a funcao

if m = 0
n + 1
A(m, n) = A(m 1, 1)
if m > 0 and n = 0

A(m 1, A(m, n 1)) if m > 0 and n > 0.


com valores pequenos (em torno de 0 a 3).
Teste essa funcao
Observacao:
sqrt na linguagem Haskell. Uma forma de se
15. Desconsidere o conhecimento da funcao
de busca binaria:

obter a raiz quadrada de um numero


qualquer x seria atraves

Assuma que a raiz quadrada de x esta entre 1 (incio) e x (fim), se x 1;


Assuma que a raiz quadrada de x esta entre x (incio) e 1 (fim), se x < 1;
Se o numero
for negativo, retorne 0.

Para sabermos se um palpite y = (inicio+f im)/2 e a raiz quadrada de x, basta testar se

y y e proximo
o suficiente de x ou, em outras palavras, se o modulo
da diferenca entre

x e y y esta dentro de uma tolerancia


definida. Caso contrario,
podemos restringir a
que implemente este algoritmo,
busca entre inicio e y ou entre y e f im. Escreva a funcao

considerando 106 como tolerancia


para o calculo
do resultado.

Vous aimerez peut-être aussi