Buscar

Lista 1 Haskell

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

Lista 1 Haskell.hsfuncaodobro a = a*2
funcaoquadruplo a = funcaodobro a*2
s1 a = a+1
s2 a = s1 a+1
media a b c = (a+b+c)/3
delta a b c = (b^2)-4*a*c
raizmaior a b c = -b+sqrt (delta a b c)/2*a
raizmenor a b c = -b-sqrt (delta a b c)/2*a
temperaturac c = 9*c/5 + 32
temperaturaf f = (f-32)*5/9
conversao 'c' 'f' c =
	if (c/= temperaturac c) then 9*c/5+32
	else 0
	
ponto a b p =
	if (p>=a) && (p<=b) then "dentro"
	else "fora"
	
nota a b c d e f = 
	if not(((a>=0) && (a<=10) && (b>=0) && (b<=10) && (c>=0) && (c<=10) && (d>=0) && (d<=10) && (e>=0) && (e<=10) && (f>=0) && (f<=10))) 
	then error "Nota Invalida"
	else ((a+b+c+d+e+f) - menor - maior)/4
	where 
		menor = min a(min b(min c(min d(min e f))))
		maior = max a(max b(max c(max d(max e f))))
ehAnoBissexto a = 
	if (mod a 400==0) || (mod a 4==0) && (not(mod a 100==0)) then True
	else False
	
ehDataValida d m a =
	if ((m==1) || (m==3) || (m==5) || (m==7) || (m==8) || (m==10) || (m==12)) && ((d>=1) && (d<=31)) then True
	else if ((m==4) || (m==6) || (m==9) || (m==11)) && ((d>=1) && (d<=30)) then True
	else if (m==2) && (ehAnoBissexto a) && (d>=1) && (d<=29) then True
	else if (m==2) && (d>=1) && (d<=28) then True
	else False
	
horoscopo d m a =
	if (not(ehDataValida d m a)) then "Por favor, insira uma data valida!"
	else if (m==3) && (d>=21) && (d<=31) then "Aries"
	else if (m==4) && (d>=1) && (d<=20) then "Aries"
	else if (m==4) && (d>=21) && (d<=30) then "Touro"
	else if (m==5) && (d>=1) && (d<=20) then "Touro"
	else if (m==5) && (d>=21) && (d<=31) then "Gemeos"
	else if (m==6) && (d>=1) && (d<=21) then "Gemeos"
	else if (m==6) && (d>=22) && (d<=30) then "Cancer"
	else if (m==7) && (d>=1) && (d<=21) then "Cancer"
	else if (m==7) && (d>=22) && (d<=31) then "Leao"
	else if (m==8) && (d>=1) && (d<=22) then "Leao"
	else if (m==8) && (d>=23) && (d<=31) then "Virgem"
	else if (m==9) && (d>=1) && (d<=22) then "Virgem"
	else if (m==9) && (d>=23) && (d<=30) then "Libra"
	else if (m==10) && (d>=1) && (d<=22) then "Libra"
	else if (m==10) && (d>=23) && (d<=31) then "Escorpiao"
	else if (m==11) && (d>=1) && (d<=21) then "Escorpiao"
	else if (m==11) && (d>=22) && (d<=30) then "Sagitario"
	else if (m==12) && (d>=1) && (d<=21) then "Sagitario"
	else if (m==12) && (d>=22) && (d<=31) then "Capricornio"
	else if (m==1) && (d>=1) && (d<=20) then "Capricornio"
	else if (m==1) && (d>=21) && (d<=31) then "Aquario"
	else if (m==2) && (d>=1) && (d<=19) then "Aquario"
	else "Peixes"
	
Lista 1 Haskell.pdf
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

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando