Vous êtes sur la page 1sur 3

PONTIFCIA UNIVERSIDADE CATLICA DE MINAS GERAIS

So Gabriel Disciplina

Paradig. Ling. de Programao


Aluno:

Curso

Eng. de Computao/Sist. Informao

Turno

Manh/Noite

Perodo

3 e 4

Lista de Exerccios 3
1. Dena e cite as vantagens dos seguintes conceitos centrais do paradigma de programao funcional: (a) Denio de funes via pattern matching (b) Funes de Ordem Superior (c) Avaliao Lazy 2. Escreva a funo fatorial (apresentada em sala) em Haskell com e sem a utilizao de pattern matching. 3. Considere o programa Haskell mostrado em sala de aula para clculo de razes quadradas pelo Mtodo de Newton-Raphson: Funo que retorna prxima aproximao
prox :: Float -> Float -> Float prox n x = ( x + n / x) / 2

Gerao da lista innita (lista lazy): [a0, f a0, f (f a0), f (f (f a0)), ...]
gen:: (Float -> Float) -> Float -> [Float] gen f a0 = a0 : gen f (f a0)

Teste
sel :: Float -> [Float] -> Float sel tol (a : b : resto) | abs (a-b) <= tol = b -- Antes era apenas abs (a-b) <= tol | otherwise = sel tol (b : resto)

Como teramos que alterar o algoritmo de forma que a condio de parada do algoritmo passe a ser a seguinte:
|a(i) a(i + 1)| tol a(i + 1)

a. Qual parte do programa foi reutilizada na implementao da modicao sugerida acima ? b. Como podemos utilizar o conceito de funes de ordem superior para implementar uma funo sel que aceite qualquer condio como parmetro? Mostre como caria a funo sel e crie uma funo de teste como exemplo. Dica: utilize o conceito de propriedade para implementar a funo sel. 4. Considere o cdigo Haskell a seguir:
testfun :: t -> t -> [t] testfun s e | s > e = [] | otherwise = s : range (s + 1) e

a. O que signica o tipo t na declarao t -> t -> [t]? b. Qual o tipo de polimorsmo implementado na declarao t -> t -> [t]? c. Faa duas chamadas diferentes funo testfun que demonstre o polimorsmo.

d. possvel implementarmos a funo acima utilizando pattern matching (casamento de padres)? e. Qual ser o resultado da chamada testfun 3 7? f. Qual ser o resultado da chamada testfun 5 1? g. Qual ser o resultado da chamada testfun "Test" "Function"? 5. Considere o cdigo Haskell abaixo:
qsort [] = [] qsort (h:t) = qsort menores_que_h ++ [h] ++ qsort maiores_que_h where menores_que_h = [x | x <- t, x < h] maiores_que_h = [x | x <- t, x >= h]

Uma forma mais compacta desse mesmo algoritmo seria:


quicksort [] = [] quicksort (s:xs) = quicksort [x|x <- xs,x < s] ++ [s] ++ quicksort [x|x <- xs,x >= s]

a. Descreva como o cdigo funciona? b. O que signica a clusula where e qual a diferena entre as duas verses do programa? c. Escreva a rvore de execuo do comando quicksort [3, 2, 4 ,1]. 6. Qual ser o resultado ose seguintes comandos HASKELL: Here are some examples:
COMMAND> "WAS" == reverse "SAW" COMMAND> "charlie horse" == "Charlie horse" COMMAND> "watch for spaces " == "watch for spaces" COMMAND> take 3 "hey ho, lests go" == drop 14 "everybody say hey" COMMAND> [(n,par) | n <- [1..10] , par <- [0,1] , ((mod n 2==0 && par==1) || (odd n && par==0))]

7. Quais das funes abaixo possuem transparncia referencial? a. Funo getInput() que l dados digitados pelo usurio no teclado b. Funo sin(x) que calcula o seno da varivel x c. Funo x++ que incrementa um inteiro x na linguagem C, Java ou C# d. Funo int plusone(int x) {return x+1;} que retorna o incremento de um inteiro x 8. Veja o cdigo em Haskell a seguir:
contaImpares :: [Int] -> Int contaImpares [] = 0 contaImpares (x:xs) = (1 + contaImpares xs)

Como podemos escrever o cdigo acima utilizando recursividade de cauda? 8. Qual a denio da classe Component em Java? Por que um Container deve obrigatoriamente extender a classe Component? 9. Mostre a hierarquia com as principais subclasses de Container presentes no pacote AWT.

10. Qual a funo do mtodo repaint()? 11. Suponha que um programador deseja tratar o evento void focusLost(FocusEvent e), presente na interface FocusListener. Considerando que a interface FocusListener responde a mais de um evento, como dever sem implementada a classe ouvinte do evento focusLost do programador? 12. Implemente a janela abaixo usando o pacote AWT:

13. Desenhe a janela resultante da execuo do cdigo Java abaixo:


import java.awt.*; import java.awt.event.*; public class Test extends Canvas { public Test() { setPreferredSize(new Dimension(400,300)); } public void paint(Graphics g) { g.drawLine(0,0,400,300); } public static void main(String[] args) { Frame f = new Frame(); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent we) { System.exit(0); } }); Test t = new Test(); f.add(t,BorderLayout.CENTER); f.pack(); f.setVisible(true); }

Vous aimerez peut-être aussi