Buscar

Exercícios de Programação I em Haskell

Prévia do material em texto

Curso: Engenharia de Computação
Disciplina: Programação I
Professor: Rodolfo da Silva Villaça
Primeira Lista de Exercícios
Exercício 1. Sejam C(x1,y1) o centro da circunferência de raio r e também do 
quadrado de lados paralelos aos eixos cartesianos e inscrito na circunferência. 
Escreva uma função que descreva a região de pertinência do ponto P na figura 
abaixo, dados C(x1,y1) , r e o ponto P (x,y):
Exercício 2. Seja A(x1,y1) o vértice superior esquerdo do quadrado ABCD, paralelo 
aos eixos cartesianos. Este quadrado, de lado 9a, é subdividido em regiões 
limitadas por retas horizontais e verticais, como mostra a figura abaixo. Escreva 
uma função em HUGS que, dado um ponto P(x,y), forneça o valor da área da 
região a qual o ponto P pertence, se esta região está dentro do quadrado ABCD, 
e caso contrário, forneça o número indicador da região na figura.
1
1
2 2
3
4 5
6
C
7
Exercício 3. Faça um programa para função f(x) a seguir:
 f(x) = −x ,sex<0
4x ,se0≤x<1
8−4x ,se1≤x<2
2x−4, sex≥2
Exercício 4. Faça uma função que calcula as duas raízes reais de uma equação do 
segundo grau ax²+bx+c = 0, dados os coeficientes a, b e c. Trate os possíveis 
erros. Utilize o conceito de tuplas.
Exercício 5. Estenda sua solução do exercício anterior para que retorne as duas 
raízes complexas. Não é necessário tratar erros, ou seja, ignore o caso em que a = 
0.
Exercício 6. Faça uma função que, dado o resultado do cálculo da função do 
exercício 1, retorna uma tupla na forma (a,b,c), sendo a, b e c coeficientes válidos 
para a equação ax²+bx+c=0 que gerou a resposta.
Exercício 7. Faça um programa semelhante ao do exercício anterior, considerando 
a solução do exercício 5.
Exercício 8. Suponha que você tenha uma matriz da seguinte forma: 
a11 a12
a21 a22
sendo representada por ((a11, a12), (a21, a22)) e uma função inv2x2 m que retorna 
a matriz inversa e o erro numa tupla da seguinte forma: (inversível, inversa), onde 
inversível é True se a matriz m é inversível e False caso contrário; e inversa é a 
inversa da matriz original, se esta era inversível, ou ((0,0), (0,0)), caso contrário.
Exercício 9. Faça uma função que, dada uma matriz m 2x2, verifique se o 
resultado da função inv2x2 está correta para m. 
OBS.: Como as operações de ponto flutuante possuem erros de 
aproximação, assuma algum valor razoável para o erro nas aproximações dos 
cálculos. Obviamente, não recalcule o resultado para verificar se está correto.
Exercício 11. Faça uma função que, dados a, b e c, verifica se a função do 
exercício 2 calculou corretamente as raízes da equação ax²+bx+c = 0.
Exercício 12. Em Haskell, a função /= retorna True se seus argumentos forem 
diferentes. Um programador especificou uma função para identificar se três 
números inteiros são todos diferentes entre si, da seguinte forma:
allDifferent :: Int -> Int -> Int -> Bool
allDifferent m n p = (m/=n) && (n/=p)
O que está errado nessa definição?
Exercício 13. Especifique corretamente uma função
allDifferent :: Int -> Int -> Int -> Bool
que identifique se três números inteiros são todos diferentes entre si.
Exercício 14. Escreva uma função
howManyEqual :: Int -> Int -> Int -> Int
que retorne quantos dos três números inteiros fornecidos como argumentos são 
iguais. A resposta poderá ser 3 (todos iguais), 2 (dois iguais e o terceiro diferente) 
ou 0 (todos diferentes).
Exercício 15. Usando tuplas, defina uma função chamada minimax que calcula o 
mínimo e o máximo de três números (ex: minimax 3 6 1 = (1,6)).
Exercício 16. Um ponto em R² é dado pelas suas duas coordenadas (x1, y1), 
enquanto que uma reta pode ser definida por dois pontos, diferentes.
a) Defina uma função que decide se uma linha é vertical;
b) A equação de uma reta representada por ((x1,y1),(x2,y2)) é dada pela equação
 y− y1  / x−x1 = y2− y1  /  x2−x1 
Defina uma função que receba um ponto e uma reta como parâmetros e decida se 
este ponto pertence à reta.

Continue navegando