Escolar Documentos
Profissional Documentos
Cultura Documentos
Programaca
Revis
ao
Num sistema mais complexo, um objeto pode ser substitudo por um sub-mobile, tal
como mostrado na figura a seguir. Neste caso, n
ao e t
ao simples para verificar se um
mobile est
a em equilbrio por isso precisamos de voce para escrever um programa
que, recebe um mobile como entrada, verifica se o m
ovel est
a em equilbrio ou n
ao.
m1
m2
m3
m4
m5
g e t l i n e = getChar >>=
(\ c > i f c == \ n then return
e l s e g e t l i n e >>= \ l > return ( c : l ) )
=
=
=
=
=
Haste
Haste
Haste
Haste
Haste
( O b j e t o 1) 6 ( O b j e t o 3) 2
( O b j e t o 2) 4 ( O b j e t o 4) 2
( O b j e t o 1) 1 ( O b j e t o 1) 1
(m3) 3 (m2) 1
(m4) 2 (m1) 6
o peso::
(a) Escreva uma funca
o peso sustentado por ele.
es);
Cada n
o contem um valor e a sua multiplicidade (i.e. o n
umero de repetico
rvore deve estar ordenada pelos valores. Por exemplo:
para facilitar a pesquisa, a a
No A 2 Vazio (No B 1 Vazio Vazio) representa o multi-conjunto {A, A, B}
com dois caracteres A e um B.
o recursiva da funca
o ocorre :: Ord a => a ->
(a) Escreva uma definica
MConj a -> Int que procura o n
umero de ocorrencias de um valor num
multi-conjunto; o resultado deve ser 0 se o valor n
ao pertencer ao multiconjunto.
o recursiva da funca
o inserir :: Ord a => a ->
(b) Escreva uma definica
MConj a -> MConj a que insere um valor num multiconjunto mantendo a
rvore de pesquisa ordenada.
a
Tipos de Dados
o de pontos no plano pelo par das suas coordenadas
1. Considere uma representaca
cartesianas: type Ponto = (Float, Float)
o da funca
opque calcula a dist
(a) Escreva uma definica
ancia euclidiana entre
dois pontos (x1 , y1 ) e (x2 , y2 ): (x1 x2 )2 + (y1 y2 )2 .
dist :: Ponto -> Ponto -> Float
data Ponto = P t F l o a t F l o a t
type Regiao = Ponto > Bool
Se r representa uma regi
ao do plano, ent
ao um ponto p est
a nessa regi
ao do plano
se r p e igual a True.
(b) Considere agora um percurso dado como uma lista de pontos consecutivos.
o comprimento :: [Ponto] -> Float que calcule o
Escreva uma funca
comprimento total dum percurso (isto e, a soma das dist
ancias entre pontos
consecutivos). Pode usar recurs
ao ou listas em compreens
ao e deve usar
o dist da alnea anterior para calcular as dist
o
a funca
ancias. Tenha atenca
de tratar corretamente os percursos degenerados (vazios ou com apenas um
ponto).
es
(a) Defina
funco
retang::Ponto->Ponto->Regiao
e
circ::Ponto->Raio->Regiao tais que:
retang p q retorne (a regi
ao que representa) o ret
angulo tal que p e o ponto
` esquerda e mais baixo, e q o ponto mais a
` direta e mais alto.
mais a
circ p r retorne o crculo de raio r e centro p.
es.
Lembre-se: regi
oes s
ao representadas por funco
es l
2. Considere um tipo de dados em Haskell para representar proposico
ogicas.
data Prop = Var Char
| Neg Prop
| Conj Prop Prop
| D i s j Prop Prop
es
(b) Defina
funco
uniao::Regiao->Regiao->Regiao,
interseccao::Regiao->Regiao->Regiao
e
complemento::Regiao->Regiao tais que p est
a em uniao r r se e
somente se p est
a na uniao das regi
oes r e r, e analogamente para
o e complemento.
intersecca
Exemplo:
type V e r t = I n t
type Grafo = ( [ V e r t ] , [ ( V e r t , V e r t ) ] )
contar (Conj (Var a) (Disj (Var b) (Var a)) = [(a, 2); (b,
1)] (a ordem dos pares no resultado n
ao e importante).
3. Um mobile e uma estrutura constituda por uma haste, a partir da qual objetos
ponderados ou outras hastes s
ao penduradas.
Exemplos:
G = ([1 ,2 ,3] , [(1 , 2) , (2 , 1) , (2 , 3)])
caminho G [ 1 , 2 , 1 , 2 , 3] = True
caminho G [ 1 , 2 , 1 , 3] = F a l s e