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