Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 1) Defina uma função que, dados dois números x e y, retorne como resultado o m.d.c. de x e y.
- > mdc 15 6
- 3
- 2) Defina uma função que, dado um número inteiro positivo x, verifique se x é primo ou não. Lembre-se de utilizar o crivo de Eratóstenes por razões de otimização.
- > ehPrimo 20
- False
- > ehPrimo 13
- True
- 3) Dados dois pontos num espaço tridimensional, defina uma função distancia e um tipo Ponto de tal forma que a função calcule a distância entre dois pontos passados como parâmetros. A função tem tipo Ponto -> Ponto -> Double.
- > distancia (1.0,2.0,3.0) (2.0,3.0,4.0)
- 1.7320508075688772
- Usando compreensão de lista, defina uma expressão que calcule a soma 12+22+...+1002 dos quadrados dos cem primeiros inteiros positivos
- 4) Suponha que uma grade de coordenadas de tamanho m x n is dada por uma lista de todos os pares (x,y) tal que 0⩽x⩽m e 0⩽y⩽n. Usando compreensão de lista, defina a função grid:: Int -> Int -> [(Int, Int)] que retorna uma grade de um dado tamanho. Por exemplo,
- > grid 1 2
- [ (0,0) , (0,1), (0,2), (1,0), (1,1), (1,2)]
- 5) Usando compreensão de lista e a função grid definida acima, defina a função square :: Int -> [(Int, Int)] que retorna as coordenadas do quadrado de tamanho n, excluindo a diagonal de (0,0) a (n,n). Por exemplo,
- > square 2
- [(0,1), (0,2), (1,0), (1,2), (2,0), (2,1)]
- 6) Defina a função recursiva merge :: Ord a => [a] -> [a] -> [a] que mescla duas listas ordenadas em uma única lista ordenada
- > merge [2,5,6] [1,3,4]
- [1,2,3,4,5,6]
- 7) Usando a função merge, defina a função msort :: Ord a => [a] -> [a] que implementa merge sort, no qual uma lista vazia e uma lista com um único elemento estão ordenadas; qualquer outra lista é ordenada por mesclar as duas listas que resultam de ordenar as duas metades da lista separadamente.
- Dica: primeiro defina a função halve :: [a] -> ([a],[a]) que divide uma lista em duas metades com tamanhos que podem diferir apenas de um, no máximo.
- 8) Defina e implemente a função aplicaFuncoes :: [Int->Int] -> [Int] -> [[Int]] que recebe uma lista de funções unárias e uma lista de valores e retorna uma lista de listas na qual cada lista contém a lista de valores recebidos na entrada aplicada a uma das funções.
- Exemplo:
- > aplicaFuncoes [(\x -> x + 2), (\x -> x - 2)] [2,3,4,5,0]
- [[4,5,6,7,2],[0,1,2,3,-2]]
- 9) Implemente um tipo algébrico DiasSemana, começando do Domingo e indo até Sábado, instancie ele para Enum, Show, Ord e Eq e crie 3 funções:
- ordenaUteis :: [DiasSemana] -> [DiasSemana]
- --Dada uma lista de dias da semana retorna os dias úteis ordenados;
- datasIguais :: [(DiasSemana,Int)] -> DiasSemana -> [Int]
- --Dada uma lista de tuplas (Dia da semana, data) e um dia da semana, retorna uma lista com somente as datas que sejam do mesmo dia da semana;
- imprimeMes :: DiasSemana -> [(Int, DiasSemana)]
- --Recebe um dia da semana (referente ao primerio dia do mes) e retorna uma lista de tuplas com todos os dias do mês. Considere o mês como tendo 30 dias.
- Exemplo:
- > ordenaUteis [Segunda, Segunda, Terca, Domingo, Quarta]
- [Domingo, Segunda, Segunda, Terca, Quarta]
- > datasIguais [(Sexta, 2),(Sabado, 3),(Quinta, 10),(Domingo, 25),(Quinta, 29)] Quinta
- [10, 29]
- > imprimeMes Terca
- [(1, Terca), (2, Quarta), (3, Quinta), (4, Sexta), (5, Sabado), (6, Domingo), (7, Segunda), (8, Terca), (9, Quarta) etc...]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement