Boa tarde!
Continuando nossa sequência de soluções em Haskell, agora vamos para o problema número 1012 (Área). Um problema parecido com os demais, em que basta ler valores, aplicar uma fórmula e formatar a saída. Novamente, um bom problema para aprender sobre programação, paradigma declarativo e comandos básicos de uma linguagem. Bora ver como se resolve?
Plataforma: Beecrowd (antiga URI)
In english:
Make a program that reads three floating point values: A, B and C. Then, calculate and show:
a) the area of the rectangled triangle that has base A and height C.
b) the area of the radius's circle C. (pi = 3.14159)
c) the area of the trapezium which has A and B by base, and C by height.
d) the area of the square that has side B.
e) the area of the rectangle that has sides A and B.
Linguagem: Haskell
Solução:
Os valores foram lidos como String com getLine, então foram convertidos um a um para Double e armazenados em uma lista de Double. Cada item se chama a, b, c, respectivamente. Para fazer esta conversão entre a linha lida (String) e gerar uma lista de Double ([Double]), basta separar cada "palavra" (conjunto de caracteres delimitados por espaço em branco) da linha lida com a função words. Isso resulta em uma lista de Strings contendo os valores, mas precisamos deles em formato numérico (Double). Assim, aplicamos o mapeamento de read em cada valor da lista de String, dizendo que queremos que o resultado seja do tipo [Double]. Assim, declarando [a, b, c] obtendo o valor de map read (words line) :: [Double] teremos os três valores informados em formato Double, essencial para poder realizar os cálculos que o exercício propõe.
Feito isto, basta aplicar as fórmulas do triângulo, do círculo, do trapézio, do quadrado e do retângulo com os valores informados e exibir na tela com delimitação de três casas decimais.
Como já foi feito em outras soluções aqui no blog, o printf foi utilizado para formatar a saída com %.3f, assim atendendo ao que solicita o enunciado deste problema. Não esqueça que para usar o printf você precisa importá-lo (import Text.Printf).
import Text.Printf (printf)
main :: IO ()
main = do
line <- getLine
let [a, b, c] = map read (words line) :: [Double]
printf "TRIANGULO: %.3f\n" (a * c / 2)
printf "CIRCULO: %.3f\n" (3.14159 * c * c)
printf "TRAPEZIO: %.3f\n" ((a + b) * c / 2)
printf "QUADRADO: %.3f\n" (b * b)
printf "RETANGULO: %.3f\n" (a * b)
Aqui no blog esse exercício também foi resolvido em outras linguagens. Você pode procurar pelo marcador "1012" e irá encontrar.
PIX para doações: 6d8bc7a8-5d74-493a-ab7a-3515baf35956
Ajude-nos para que as postagens sigam acontecendo!