Questão 49: areaTotal
Voltar
Considere os seguintes tipos para representar pontos e retângulos, respectivamente. Assuma que os retângulos têm os lados paralelos aos eixos e são representados apenas por dois dos pontos mais afastados.
type Ponto = (Float,Float) data Rectangulo = Rect Ponto Ponto
Defina a função areaTotal :: [Rectangulo] -> Float
que, dada uma lista com retângulos, determina a área total que eles ocupam.
Exemplo
> areaTotal [Rect (0,0) (2,2), Rect (1,3) (7,4), Rect (5,2) (8,5), Rect (1,2) (2,4)]
21.0
Resolução
type Ponto = (Float,Float)
data Rectangulo = Rect Ponto Ponto
areaTotal :: [Rectangulo] -> Float
areaTotal [] = 0
areaTotal ((Rect (x1,y1) (x2,y2)):t) = abs (x2 - x1) * abs (y2 - y1) + areaTotal t