A resolução dessa lista (Exercício 1 e Exercício 2)

Propaganda
2ª Lista de exercícios de Programação I
2017/1
Atenção: A resolução dessa lista (Exercício 1 e Exercício 2) deve ser publicada na sua página
no pbworks até o dia 08/05/2017. Publique uma resposta, fazendo como se pede:
a) resolva o exercício 1 da Lista 2 e publique suas respostas em um arquivo texto de nome
exercicio1-Lista2.txt
b) escreva um script em Haskell de nome exercicio2-Lista2.hs, com as soluções do exercício 2
dessa lista.
Observação: a publicação dos arquivos acima deve seguir o padrão sugerido para a sua
página (para isso ver a página da disciplina).
Exercício 1: Para cada uma das expressões abaixo, faça o que se pede:
i) Reescreva a expressão no HUGS e observe o resultado;
ii) Indique a sequência da avaliação das operações e funções contidas na expressão para obter
o resultado (indique a ordem de precedência seguida para a avaliação da expressão)
iii) se a avaliação de alguma expressão gerar um erro, explique porque o erro foi gerado e
modifique a expressão de forma que ela possa ser executada
a) 3>5 || 4+1 < 8
b) not(3>1) && not(4-2>6)
c) not(3>1 || 4-2 > 6)
d) -5 < 7 && 2 >=2 && 10+4>8
e) 8>8 || True
f) False && 7 == 7
g) not (7=7)
h) False && 7 = 7
i) (-5>-3 || 2-1<0) && (3>1)
j) -5 > -3 || 2 -1 < 0 && 3>1
k) 5 == 0 || not 5 == 0
Exercício 2: Escreva um script com as definições das funções a seguir, de maneira que:
i) identifique e utilize, quando necessário, a modularização
ii) sejam definições genéricas
iii) use definição local apenas quando necessário (promovendo a legibilidade do programa)
iv) comente seu código sempre que possível
a) Dado um número inteiro, verifique se ele pertence ao intervalo (0,100) e é divisível por 3 e por 5.
b) O operador || (OU inclusivo), mapeia dois valores booleanos a e b em True quando pelo menos
um deles é True e em False caso contrário. Escreva uma função que denominaremos de oux (OU
exclusivo) que se assemelha ao OU inclusivo mas que mapeia em False quando ambos valores são
True.
c) Dados a data inicial e final de um projeto, informe o número total de dias para a sua execução.
d) Dados três comprimentos de lados l1, l2 e l3, verifique se podem formar um triângulo.
e) Calcule o maior de três números.
f) Dados três números inteiros distintos, calcule o quadrado do sucessor do maior número.
Obs: Use a primitiva succ para calcular o sucessor de um número.
g) A empresa Lucro Certo decidiu dar a seus funcionários um abono de natal. A gratificação será
baseada em dois critérios: o número de horas extras trabalhadas e o número de horas que o
empregado faltou ao trabalho. O critério estabelecido para calcular o prêmio é: subtrair dois terços
das horas que o empregado faltou de suas horas extras, obtendo um valor que determina o número
de pontos do funcionário. Faça uma função para calcular o abono de natal para cada funcionário. A
distribuição do prêmio é feita de acordo com a tabela abaixo:
Pontos obtidos
1 a 10
11 a 20
21 a 30
31 a 40
A partir de 41
Prêmio em R$
100,00
200,00
300,00
400,00
500,00
h) 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.
i) Refaça o exemplo de cálculo de equações de 2º grau, calculando apenas as raízes reais da equação
e emitindo uma mensagem de texto, caso contrário.
j) Dada a idade de uma pessoa em segundos e um planeta do sistema solar, calcule qual seria a
idade relativa dessa pessoa no planeta informado, sabendo que o Período Orbital é o intervalo de
tempo que o planeta leva para executar uma órbita em torno do Sol (o que é denominado de ano,
que na Terra tem aproximadamente 365,25 dias). Considere então as informações abaixo para
outros planetas do sistema solar:
 Terra -> período orbital: 365.25 dias na Terra, ou 31557600 segundos
 Mercúrio -> período orbital: 0.2408467 anos na Terra
 Vênus -> período orbital: 0.61519726 anos na Terra
 Marte -> período orbital: 1.8808158 anos na Terra
 Júpiter -> período orbital: 11.862615 anos na Terra
 Saturno -> período orbital: 29.447498 anos na Terra
 Urano -> período orbital: 84.016846 anos na Terra
 Netuno -> período orbital: 164.79132 anos na Terra
Download