Buscar

Lista 1 Haskell

Prévia do material em texto

Lista de exerćıcios 1
Atenção: escreva todas as suas funções em um só script.
1. Crie uma função dobro que recebe um valor numérico e retorna-o
dobrado.
2. Usando a função dobro, crie uma função quadruplo que calcula o
quádruplo de um número.
3. Crie uma função s1 que recebe um número e calcula o seu sucessor.
4. Usando a função sucessor, crie uma função s2 que calcula o sucessor
do sucessor de um número.
5. Média entre três números.
6. Faça uma função que calcule o delta de uma eq. do 2o grau, onde
∆ = b2 − 4ac
7. Usando a função do exerćıcio anterior, crie uma função para calcular a
raiz maior do 2o grau, dada por (−b +
√
∆)/2a
8. Raiz menor do 2o grau: (−b−
√
∆)/2a
9. Receba uma temperatura em graus Celsius e retorne a temperatura
correspondente em graus Fahrenheit. Use a fórmula f = 9c/5 + 32
10. Conversão de Fahrenheit para Celsius. Usando a fórmula dada no ex.
anterior, obtenha a fórmula para fazer a conversão oposta.
1
Funções com if-then-else
11. Conversão condicional de temperaturas: usando as funções de con-
versão separadas que você criou anteriormente, crie uma função que
receba três parâmetros, o primeiro e o segundo correspondendo a dois
chars indicando escalas de origem e de destino, respectivamente, e o
terceiro indicando a temperatura a ser convertida. Ex. de execução:
> conversao ’c’ ’f’ 28.0
82.4
12. Dado um ponto p na reta real, e um intervalo fechado [a, b], crie uma
função que verifique se este ponto se encontra dentro ou fora deste
intervalo.
13. Em uma competição de ginástica oĺımpica a nota é determinada por
um painel de seis júızes. Cada um dos júızes atribui uma nota entre
zero e dez para o desempenho do atleta. Para calcular a nota final,
a nota mais alta e a nota mais baixa são descartadas e é calculada a
média das quatro restantes. Escreva uma função que recebe 6 notas
entre zero e dez e retorna a média após o descarte da maior e da menor
nota.
14. Crie uma função ehAnoBissexto que receba um valor de ano e retorne
um valor booleano (True ou False) indicando se o ano é bissexto ou
não. Um ano é bissexto quando:
O ano for divisı́vel por 400, ou
O ano for divisı́vel por 4, mas n~ao por 100
Exs: 2000 é bissexto (pois é diviśıvel por 400), 2004 é bissexto (é di-
viśıvel por 4, mas não por 100), porém 2002 não é bissexto (não satisfaz
nenhuma das condições).
A função que retorna o resto da divisão inteira entre dois números a e
b é mod a b
15. Crie uma função ehDataValida que valide uma data, isto é, receba
um dia, mês e ano e retorne se corresponde a uma data posśıvel ou não.
Utilize a função ehAnoBissexto para auxiliar na validar a duração de
fevereiro, e os dados abaixo para os demais meses:
2
• Meses de janeiro, março, maio, julho, agosto, outubro e dezembro
possuem 31 dias
• Meses de abril, junho, setembro e novembro possuem 30 dias
• Fevereiro possui 29 dias quando o ano é bissexto, e 28 quando não
é bissexto
16. Função horoscopo: receba uma data (dia, mês e ano) e retorne uma
String correspondente ao signo. No corpo de sua função horoscopo,
primeiramente deverá ser feita validação da data utilizando para isto
a função do exer. anterior. Caso a data seja inválida, retorne uma
string informando que a data é inválida. Caso a data seja válida, você
procede para a análise dos signos.
3
Encontre erros
O objetivo principal dos exerćıcios abaixo é encontrar erros sintáticos e
erros de lógica de programação (quando a sintaxe está correta, porém
o programa está devolvendo valores incorretos).
17. Considere a função abaixo, cuja finalidade é somar os parâmetros caso
sejam iguais, ou obter o valor absoluto (módulo) da diferença entre eles,
caso contrário. Quais são erros presentes? Justifique.
f1 x y =
if (x = y) then "x+y" else (abs "x-y")
18. Encontre e explique os erros da função abaixo.
f2 op x y =
if (op == ’mul’) then x*y
else if (op = ’div’) then a/b
else "nao sei"
19. Quai(s) o(s) erro(s) nas funções abaixo?
imposto sal =
if (sal <= 1000) then 0
else 0.05*sal
salarioFinal salario =
salario - imposto sal
20. Faça o mesmo para as funções a seguir:
abono pts =
if (pts <= 0) then 0.0
else if (pts >= 1) && (pts <= 20) then 500.0
else if (pts >= 21) && (pts >= 40) then 700.0
else (pts > 40) 1000.0
salarioTotal sal pts =
sal + abono
4

Continue navegando