Baixe o app para aproveitar ainda mais
Prévia do material em texto
LISTA DE EXERCÍCIOS EM HASKELL 1. Elabore uma função chamada “consumo” para calcular o valor da conta de luz a ser paga para um equipamento, usando a seguinte fórmula: - consumo (Kwh) = ((potência do aparelho em Watts) x (horas de funcionamento por mês)) /1000 - Valor da conta em (R$) = consumo (Kwh) x valor da tarifa (ex: 0,722173) 2. Suponha que o computador não possua a operação de multiplicação. Construa a função “multiplica” para calcular o valor da multiplicação de dois números inteiros, m por n. 3. Elabore a função “fatorial” que recebe um número inteiro n e exibe o fatorial do número informado. 4. Elabore a função “ordena” que recebe 3 números inteiros e retorna os mesmos em ordem crescente. 5. Elabore a função “mdc” que recebe dois números inteiros X e Y e calcula o M.D .C desses números. 6. Elabore a função “mmc” que recebe dois números inteiros X e Y e calcula o mmc dos números. ( Você pode usar a função mdc, feita na questão anterior, para resolver este problema.) 7. Elabore a função “potencia” que recebe 2 números inteiros X e Y e calcula o resultado de X elevado a Y. 8. Elabore a função “primos” que recebe um número N e devolve uma lista com os fatores primos de N. 9. Elabore a função “maior” que recebe uma lista de números inteiros e re torna o maior número da lista. 10. Elabore a função “ultimo” que recebe uma lista de números inteiros e retorna o último elemento da lista. 11. Elabore a função “semonum” que recebe uma lista de números inteiros e um número inteiro e retorna uma lista sem as ocorrências do número informado. (Ex: 1 [1,2,6,5,1,6,5,4] = [2,6,5,6,5,4]) 12. Elabore a função “reverte” que recebe uma lista de números inteiros e inv erte a ordem dos elementos da lista. (Não usar a função “reverse”) 13. Elabore a função “maiormenor” que recebe uma lista de números inteiros e devolve como resposta o maior e o menor deles. (Ex: [24,12,3] = [24,3] 14. Defina a função “produto” que recebe uma lista com números inteiros e calcula o produto dos números da lista. 15. Elabore uma função chamada “unicorr” que rec ebe uma lista de números inteiros e um número inteiro e verifica se existe uma única ocorrência do número na lista. (Ex: 2 [2,1,5,3,2] = False) 16. Elabore uma função chamada “uniao” que recebe duas listas de números inteiros, as listas não devem conter elementos repetidos, e retorna uma lista com todos os elementos das duas list as originais (sem repetição). 17. Elabore uma função chamada “concatena” que rec ebe duas listas quaisquer e retorna uma lista com os elemtnos da primeiroa no início e os elementos da segunda no final. 18. Elabore uma função chamada “palindroma” que rec ebe uma cadeia de caracteres (palavra) e verifica se ela é palíndroma ou não. (Ex: “ana” = True) 19. Defina a função “parimpar” que recebe uma lista de números inteiros e devo lve duas novas listas, onde a primeira contém apenas números pares e a segunda os números impares. 20. Defina a função “repetido” que recebe uma lista de números inteiros e responde se na lista existe algum elemento repetido. RESPOSTAS: 1. consumo :: Float -> Float -> Float -> Float consumo p h v = ((p*h) / 1000)*v 2. multiplica :: Int -> Int -> Int multiplica m n | m == 0 || n == 0 = 0 | n > 0 = m + multiplica m(n-1) | n < 0 = -m + multiplica m(n+1) 3. fatorial :: Int -> Int fatorial n | n == 0 = 1 | otherwise = fatorial(n-1)*n 4. ordena :: Int -> Int -> Int -> (Int, Int, Int) ordena a b c |a <= b && b <= c = (a, b, c) |a <= c && c <= b = (a, c, b) |b <= a && a <= c = (b, a, c) |b <= c && c <= a = (b, c, a) |c <= c && a <= b = (c, a, b) |otherwise = (c, b, a) 5. mdc :: Int -> Int -> Int mdc x 0 = x mdc x y = mdc y (x `mod` y) 6. mdc :: Int -> Int -> Int mdc x 0 = x mdc x y = mdc y (x `mod` y) mmc :: Int -> Int -> Int mmc a b | a > b = (div a (mdc a b))*b | a < b = (div b (mdc a b))*a 7. potencia :: Int -> Int -> Int potencia m n | n == 0 = 1 | n == 1 = m | n > 0 = m * potencia m(n-1) 8. fatores :: Int -> [Int] fatores 0 = [] fatores n = [z | z <- [1..n], mod n z == 0] verprimo :: Int -> Bool verprimo 0 = False verprimo 1 = False verprimo i | fatores i == [1, i] = True | otherwise = False primos :: Int -> [Int] primos 0 = [] primos j = [k | k <- fatores j, verprimo k] 9. maior :: [Int] -> Int maior [x] = x maior (x:xs) | x > maior xs = x | otherwise = maior xs 10. ultimo :: [Int] -> Int ultimo [] = 0 ultimo [x] = x ultimo (x:xs) = ultimo xs 11. semonum :: Int -> [Int] -> [Int] semonum n [] = [] semonum n (x:xs) | n == x = semonum n xs | otherwise = x:semonum n xs 12. reverte :: [Int] -> [Int] reverte [] = [] reverte (x:xs) = (reverte xs)++[x]
Compartilhar