Você está na página 1de 1

(d) defina o tri

angulo de Pascal completo como uma lista infinita pascal2 ::


[[Int]] das linhas do tri
angulo. Note que que pascal2 !! n !! k =
binom n k, para quaisquer n e k tais que n 0 e 0 k n.
Exemplos:
pascal2 !! 6 == [1,6,15,20,15,6,1]
pascal2 !! 6 !! 3 == 20

o Funcional
Programaca
Lista de Exerccios 03

o pascal3 :: [[Int]] que evite o c


(e) Escreva outra definica
alculo de
factoriais usando as seguintes propriedades de coeficientes binomiais:

Prof. Wladimir Ara


ujo Tavares

 n
n
=1
=
n
0

= [z, f z x1, f (f z x1) x2, ...]

Por exemplo:

P (z) = c0+c1 z +. . .+cn zn = c0 +z (c1 +z (. . .+z (cn1 +z cn ) . . .))


(5)

scanl (+) 0 [1, 2, 3] = [0, 0 + 1, 0 + 1 + 2, 0 + 1 + 2 + 3] = [0,


1, 3, 6]

Note que usando a express


ao n
ao necessitamos de calcular potencias: para calcular
es e n produtos.
o valor dum polin
omio de grau n usamos apenas n adico

o scanl para definir a funca


o fatAcc n que retorna uma lista de
(a) Use a funca
com [1!, 2!, . . . , n!]
fatAcc 10 == [1,2,6,24,120,720,5040,40320,362880,3628800]

o recursiva tal que horner cs z calcula o valor do


Complete a seguinte definica
polin
omio com lista de coeficientes cs no ponto z usando a forma de Horner.
horner : : [ Double ] > Double > Double
horner [ ] z = 0
horner ( c : c s ) z =

o fatAcc para definir a funca


o fatorial.
(b) Use a funca
o dotprod :: [Float] -> [Float] -> Float para calcular o
2. Escreva uma funca
produto interno de dois vetores (representados como listas):
Pn
dotprod[x1 , . . . , xn ][y1 , . . . , yn ] = x1 y1 + . . . + xn yn =
i=1 xi yi

o da funca
o de ordem
A forma de Horner tambem pode ser expressa como aplicaca
o seguinte de forma a que a igualdade seja
superior foldr . Complete a definica
correta.

o zipWith e sum.
Usando a funca
3. Um trio (x, y, z) de inteiros positivos diz-se pitag
orico se x2 + y 2 = z 2 . Defina a
o pitagoricos :: Int -> [(Int, Int, Int)] que calcule todos os trios
funca
pitag
oricos cujas componentes n
ao ultrapassem o argumento.

horner cs z = foldr
cs
8. A lista infinita de n
umeros naturais [1,2,3,4,..] pode ser definida de v
arias maneiras
em Haskell:

Por exemplo: pitagoricos 10 = [(3, 4, 5), (4, 3, 5), (6, 8, 10), (8,
6, 10)].

number1 = [1..]
number2 = 1 :

Use compreens
ao de listas [(x,y,z) | x <- [],y<-[],z<-[],predicado]
4. Considere a seguinte serie (i.e. somas infinitas) que convergem para :
4
4
4
4
= + + ...
1
3
5
7

number4 = 1 :

length xs = length 0 xs
where length n [ ] = n
length n ( x : xs ) = length ( n+1) xs

o zipWith.
(c) Combine as duas listas usando a funca
o calcPi1 n que calcula o valor de pi somando n parcelas da
(d) Defina a funca
serie. Calcule o valor o somat
orio para 10, 100 e 1000 parcelas.

o usa a funca
o auxiliar length, que possui um par
Essa funca
ametro adicional para
o length e definida usando recurs
acumular o resultado. A funca
ao de cauda,
uma vez que a chamada recursiva length (n+1) xs, usada no lado direito da
o, n
o. Use essa
definica
ao ocorre dentro de nenhum argumento de outra funca
es:
tecnica de recurs
ao de cauda para definir as seguintes funco

(e) Qual e o valor de pi considerando como criterio de parada erro absoluto


0.01?
(f) Qual e o valor de pi considerando como criterio de parada erro relativo 0.01?
5. Considere a seguinte serie (i.e. somas infinitas) que convergem para :

(a) fac ::
(2)

[a] -> [a], que inverte uma lista.

o de funca
o em Haskell:
10. Considere a seguinte definica
until p f x = if p x then x else until p f (f x)
o until?
(a) Qual e o tipo da funca

o binom com dois argumentos que calcule o coeficiente


(a) Escreva uma funca

o da express
(b) Qual e o resultado da avaliaca
ao until (10) square 2?
o until para definir uma funca
o que, dado um string s, retorne o
(c) Use a funca
string obtido removendo-se todos os caracteres iguais a branco que ocorrem
no incio de s.

(3)

Sugest
ao: pode exprimir n! como product [1..n]

11. INPUT: N
umero n inteiro positivo
OUTPUT: Lista de tuplas (f, p) que representam os fatores primos de n onde f
denota o fator propriamente dito e p seu respectivo expoente. (Todo n
umero x,
tal que x N, pode ser reescrito como o produto de potencias de bases primas e
expoentes naturais. Por exemplo, o n
umero 3361743 pode ser reescrito na forma,

(b) Para todas as listas de n


umeros xs e ys, temos que product (xs++ys)
= product xs ++ product ys. Use esta propriedade para re-escrever a
o de forma mais eficiente, eliminando factores comuns entre o
definica
numerador e denominador.
o binom que calcula o coeficiente binomal, escreva uma
(c) Usando uma funca
o da funca
o pascal :: Int -> [[Int]] que calcula as primeiras
definica
linhas tri
angulo de Pascal.

3361743 = 3 7 11

(6)

Os n
umeros 3, 7 e 11 s
ao denominados fatores primos de 3361743 e 4, 3 e 2 seus
respectivas expoentes.)

0
0

PROT:
factors ::

2
0

Int -> Int, que computa o fatorial de um n


umero natural

(b) reverse ::

o calcPi2 n que calcula o valor de pi somando n parcelas da


(a) Defina a funca
serie. Calcule o valor o somat
orio para 10, 100 e 1000 parcelas.

1
0

take 10 triangular == [0,1,3,6,10,15,21,28,36,45]


o length, que computa o n
9. A funca
umero de elementos de uma lista, pode ser
definida do seguinte modo:

(b) Construa uma lista infinita com os denominadores das parcelas.

n
n!
=
k
k!(n k)!

[ x+y | (x,y) <- zip number4 [1,1..]

Os n
umeros triangulares s
ao os n
umeros da seguinte forma Tn = Tn1 +n e T0 =
0. Defina uma lista infinita dos n
umeros triangulares triangular :: [[Int]].

(a) Construa uma lista infinita com os numerados das parcelas.


[4, 4, . . . , 4(1)n ]

6.

zipWith (+) number2 [1,1..]

number3 = scanl (+) 1 [1,1..]

(1)

4
4
4

+
...
=3+
234
456
678

(4)

o table i j que consulta a lista infinita pascal3.


Dica: defina uma funca
7. Considere um polin
omio P (X) = c0 + c1 z + . . . + cn z n representado pela lista
dos seus coeficientes [c0, c1, . . . ; cn ]. Podemos calcular o valor do polin
omio num
ponto de forma eficiente usando a forma de Horner :

o do prel
1. A funca
udio scanl e uma variante do foldl que produz a lista com os valores
acumulados:
scanl f z [x1, x2, ...]

n 1 n 1
n
(0 < k < n)
+
=
k
k1
k

1
1

2
1

(Integral a) => a -> [(a,a)]

EX(S):
factors 3361743 => [(3,4),(7,3),(11,2)]
es a seguir, usando foldr e foldl:
12. Defina cada uma das funco

2
2

(a) elem :: a -> [a] -> Bool, que determina se um valor e uma elemento
de uma lista.
3
0

3
1

3
2

3
3

(b) remdups :: Eq a => [a] -> [a]


duplicados adjacentes.

pascal 4 == [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]

que

remove

da

lista

elementos

Você também pode gostar