Advertisement
Guest User

Untitled

a guest
Apr 24th, 2018
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.38 KB | None | 0 0
  1. 1) Defina uma função que, dados dois números x e y, retorne como resultado o m.d.c. de x e y.
  2. > mdc 15 6
  3. 3
  4.  
  5. 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.
  6. > ehPrimo 20
  7. False
  8. > ehPrimo 13
  9. True
  10.  
  11.  
  12.  
  13. 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.
  14. > distancia (1.0,2.0,3.0) (2.0,3.0,4.0)
  15. 1.7320508075688772
  16. Usando compreensão de lista, defina uma expressão que calcule a soma 12+22+...+1002 dos quadrados dos cem primeiros inteiros positivos
  17.  
  18.  
  19. 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,
  20. > grid 1 2
  21.  
  22. [ (0,0) , (0,1), (0,2), (1,0), (1,1), (1,2)]
  23.  
  24.  
  25.  
  26. 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,
  27. > square 2
  28.  
  29. [(0,1), (0,2), (1,0), (1,2), (2,0), (2,1)]
  30.  
  31.  
  32.  
  33. 6) Defina a função recursiva merge :: Ord a => [a] -> [a] -> [a] que mescla duas listas ordenadas em uma única lista ordenada
  34. > merge [2,5,6] [1,3,4]
  35.  
  36. [1,2,3,4,5,6]
  37.  
  38.  
  39.  
  40. 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.
  41. 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.
  42.  
  43.  
  44. 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.
  45.  
  46. Exemplo:
  47. > aplicaFuncoes [(\x -> x + 2), (\x -> x - 2)] [2,3,4,5,0]
  48. [[4,5,6,7,2],[0,1,2,3,-2]]
  49.  
  50.  
  51. 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:
  52.  
  53.  
  54.  
  55. ordenaUteis :: [DiasSemana] -> [DiasSemana]
  56. --Dada uma lista de dias da semana retorna os dias úteis ordenados;
  57.  
  58. datasIguais :: [(DiasSemana,Int)] -> DiasSemana -> [Int]
  59. --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;
  60.  
  61. imprimeMes :: DiasSemana -> [(Int, DiasSemana)]
  62. --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.
  63.  
  64. Exemplo:
  65. > ordenaUteis [Segunda, Segunda, Terca, Domingo, Quarta]
  66. [Domingo, Segunda, Segunda, Terca, Quarta]
  67.  
  68. > datasIguais [(Sexta, 2),(Sabado, 3),(Quinta, 10),(Domingo, 25),(Quinta, 29)] Quinta
  69. [10, 29]
  70.  
  71. > imprimeMes Terca
  72. [(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