Buscar

Exercicios_Haskell

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 3 páginas

Prévia do material em texto

- Copie as funções abaixo para um arquivo .hs 
-- Calcula o quadrado de um número quadrado x = x*x
-- Soma 3 numeros inteiros
addThreeInt :: Int -> Int -> Int -> Int 
addThreeInt x y z = x + y + z
-- Aumenta um numero se ele eh pequeno
superSizeMe x = if x < 100 then x^2 else x
- Teste as funções acima, observando alguns erros que podem ocorrer: 
quadrado 5
quadrado 5.0
quadrado 5.
quadrado -4
quadrado (-4)
addThreeInt 5 6 1
addThreeInt 5 6
addThreeInt 1 2.0 3
superSizeMe 10
Mostre as saídas do programa.
- // -
1. Defina uma função par :: Int -> Bool, para verificar se um número inteiro é par ou ímpar. Use 
a função mod, que retorna o resto de uma divisão inteira (ex.: mod 4 2 retorna 0). Para testar a 
igualdade, use o operador ==. 
2. Escreva uma função head2 :: [Int] -> Int que retorne o quadrado do primeiro elemento de uma lista. 
3. Escreva uma função conceito :: Float -> Char que receba uma nota como argumento e 
retorne o conceito correspondente, conforme as regras abaixo. Obs.: operador 'e' em Haskell se escreve 
'&&'. 
• Nota >= 9.0, conceito A 
• Nota >= 7.5 e < 9.0, conceito B 
• Nota >= 6.0 e < 7.5, conceito C 
• Nota >= 4.0 e < 6.0, conceito D 
• Nota < 4.0, conceito E 
4. Observe a função abaixo, que usa recursão para calcular o somatório dos elementos de uma lista. A 
função é definida para 2 casos: o primeiro é o caso base da recursão, que é a lista vazia; o segundo é o caso 
geral, onde o somatório se define como a soma do primeiro elemento com o somatório do restante dos 
elementos.
somatorio :: [Int] -> Int
somatorio [] = 0
somatorio lis = head lis + somatorio (tail lis)
5. Usando a lógica do exercício anterior, defina uma função tamanho :: [Int] -> Int para 
calcular o tamanho de uma lista de inteiros usando recursão. Essa função encontra-se parcialmente definida 
abaixo. Você deve completar a parte marcada com "...". 
tamanho :: [Int] -> Int
tamanho [] = ...
tamanho lis = ...
6. Defina uma função recursiva produtorio :: [Int] -> Int para calcular o produtório 
dos elementos de uma lista. 
7. Forneça uma temperatura em graus Fahrenheit a partir de uma temperatura em graus Celsius.
O grau Fahrenheit (símbolo: °F) é uma escala de temperatura proposta por Daniel
Gabriel Fahrenheit em 1724. Nesta escala o ponto de fusão da água é de 32 °F e o
ponto de ebulição de 212 °F. Uma diferença de 1,8 grau Fahrenheit equivale à de 1 °C.
8. Uma empresa decidiu dar a seus funcionários um abono de salario, baseando-se nos
pontos obtidos durante o mês, de acordo com a tabela:
9. Considere que o preço de uma passagem de avião em um trecho pode variar dependendo da idade 
do passageiro. Pessoas com 60 anos ou mais pagam apenas 60% do preço total. Crianças até 10 
anos pagam 50% e bebês (abaixo de 2 anos) pagam apenas 10%. Faça uma função que tenha como 
entrada o valor total da passagem e a idade do passageiro e produz o valor a ser pago.
10. Faça uma função que recebe um numero e retorna verdadeiro se o numero for par.
11. Faça uma função que recebe dois valores e retorna o menor.
12. Faça uma função que recebe três valores e retorna o menor.
7. Escreva uma função recursiva para calcular o fatorial de um numero natural.
13. Especifique as seguintes funções para a manipulação de listas:
a) nro-elementos: recebe uma lista qualquer e retorna o número de elementos na lista.
b) maior: recebe uma lista de números e retorna o maior .
c) conta-ocorrencias: recebe um elemento e uma lista qualquer e retorna o número de 
ocorrências do elemento na lista.
d) unica-ocorrencia: recebe um elemento e uma lista e verifica se existe uma única 
ocorrência do elemento na lista .
ex.:
unica-ocorrencia 2 [1,2,3,2] = False
unica-ocorrencia 2 [3,1] = False
unica-ocorrencia 2 [2] = True
e) maiores-que: recebe um número e uma lista de números e retorna uma lista com os 
números que são maiores do que o valor informado.
ex.:
maiores-que 10 [4 6 30 3 15 3 10 7] ==> [30 15]
f) concatena: recebe duas listas quaisquer e retorna uma terceira lista com os elementos da 
primeira no início e os elementos da segunda no fim.
ex.:
concatena [] [] ==> []
concatena [1 2] [3 4] ==> [1 2 3 4]
g) duplica: recebe uma lista e retorna uma nova lista contendo a duplicação dos elementos 
da lista original.
ex: duplica [1, 2, 3] ==> [1,1,2,2,3,3] 
14. Crie uma função que intercala os elementos de duas listas, de qualquer tamanho, contendo 
números inteiros, numa nova lista . Ex:
>intercala [1,2,3,4] [100,200]
[1, 100, 2, 200,3, 4]
15. Defina novos tipos para representar os dados contidos numa agenda telefônica pessoal. Em 
seguida, crie uma função para recuperar o nome de um contato, a partir de um número de telefone. 
Caso o número não seja encontrado, retornar a mensagem “Telefone desconhecido”.
16. Faça uma função para converter uma data, escrita no formato dd/mm/aaaa (calendário 
Gregoriano) na correspondente data (ddd/aaaa) do calendário Juliano.

Continue navegando