Preview only show first 10 pages with watermark. For full document please download

Programação Funcional - Exercícios Resolvidos - T1

Coleção completa de exercícios resolvidos em haskell

   EMBED


Share

Transcript

Universidade Federal de Santa Maria Centro de Tecnologia Departamento de Eletrônica e Computação ELC117 - Paradigmas de Programação Profa Andrea Schwertner Charão Exercícios de Programação Funcional em Haskell Entrega: 29/08/2011 1. Crie uma função comDesconto :: Float ­> Float que, dado o valor de uma mercadoria, calcule o valor com desconto segundo as regras abaixo: Valor Valor Valor Valor < 50.0, desconto de 0% >=50.0 e < 100.0 , desconto de 5% >= 100.0 e < 300.0 , desconto de 10% >= 300.0, desconto de 15% Exemplo de uso da função: > comDesconto 70.0 66.5 2. Crie uma função insereNum :: [String] ­> [String] que, dada uma lista de strings, gere outra lista contendo cada string numerada a partir de 1, conforme o exemplo abaixo: > insereNum ["include", "for", "while"] ["1 include", "2 for", "3 while"] Dicas: - Para converter um número em uma String, use a função show - Você pode definir funções auxiliares para resolver este exercício 3. Crie uma função crescente :: [Int] ­> Bool  que retorne True se a lista passada como argumento estiver em ordem crescente, ou False em caso contrário. Exemplo de uso da função: > crescente [1,6,8,30] True > crescente [8,6,1,30] False 4. Crie uma função cedulas :: Int ­> [Int] ­> [Int] que receba um valor e uma lista de cédulas de Reais (R$), em ordem decrescente. A função deverá decompor o valor informado em 0 ou mais cédulas de cada tipo. Exemplo de uso: > cedulas 423 [100,50,20,10,5,2,1] [4,0,1,0,0,1,1] Isso significa: 4 cédulas de 100, 0 de 50, 1 de 20, e assim por diante 5. Crie uma função recursiva prodVet :: [Int] ­> [Int] ­> [Int] que calcule o produto vetorial de 2 vetores representados por listas de inteiros. Caso você não se lembre, para 2 vetores a = [a1, a2, a3] e b = [b1, b2, b3], o produto vetorial a x b será igual a [a1*b1, a2*b2, a3*b3]. Exemplo de uso: > prodVet [2,2,2,2,2] [1,3,5,7,9] [2,6,10,14,18] 6. Consulte no Google alguma referência sobre a função de alta ordem zipWith em Haskell. Resolva o exercício anterior usando esta função. Coloque um comentário na função indicando a(s) referência(s) consultada(s). 7. Crie uma função não-recursiva bin2dec :: [Int] ­> Int que receba uma lista de bits representando um número binário e retorne esse número em decimal. Exemplo de uso: > bin2dec [1,0,1,0,0] 20 Dicas: - Lembre-se da notação ".." para geração de listas - Pesquise sobre a função reverse, que pode ser útil neste exercício 8. Crie uma função intercala :: Char ­> String ­> String que retorne a string recebida intercalada com um caracter. Exemplos de uso: > intercala '­' "Hello"  "H­e­l­l­o"  > intercala '­' "H"  "H" 9. Usando as funções de alta ordem map, zipWith e foldr1, crie uma função serie :: [Double] ­> Double que receba uma lista x = [x1, x2, x3, .., xn] e calcule a seguinte expressão: x 21 x 22 x 23 x 2n + + +...+ 1 2 3 n Dica: lembre-se das listas infinitas e da lazy evaluation! 10.Crie uma função isElem :: Int ­> [Int] ­> Bool que verifique se um elemento pertence ou não a uma dada lista, conforme os exemplos abaixo: > isElem 6 [1,2,3,4,5] False > isElem 1 [2,3,1,4,5] True > isElem 6 [] False