Pesquisar este blog

Livros Recomendados

Mostrando postagens com marcador calcular. Mostrar todas as postagens
Mostrando postagens com marcador calcular. Mostrar todas as postagens

segunda-feira, 10 de abril de 2023

URI (BEECROWD) - 1012 - Area (Área) - Iniciante - Haskell

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)

Problema1012

Enunciado:

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!

sexta-feira, 24 de março de 2023

URI (BEECROWD) - 1010 - Simple Calculate (Cálculo Simples) - Iniciante - Haskell

Olá!

Hoje vamos voltar a resolver um probleminha em Haskell (Simple Calculate / Cálculo Simples).

Esse exercício é bem fácil e pode ser resolvido com poucas linhas de código. Confira na sequência desse post!

Plataforma: Beecrowd (antiga URI)

Problema1010

Enunciado:

In english:
In this problem, the task is to read a code of a product 1, the number of units of product 1, the price for one unit of product 1, the code of a product 2, the number of units of product 2 and the price for one unit of product 2. After this, calculate and show the amount to be paid.


Linguagem: Haskell

Solução:

Precisamos obter os valores digitados em duas linhas. Isso pode ser obtido com getLine, mas o conteúdo da linha estará como String. Assim, para cada linha podemos criar uma lista de valores Double, sendo, em ordem, o código, a quantidade de unidades e o preço. A função read pode fazer essa conversão de String -> Double, mas precisamos que a função read seja passada como parâmetro para a função map, assim ela aplicará a conversão para todas as palavras da linha (por isso o parâmetro deve ser words product1 para a primeira linha e words product2 para a segunda), resultado em uma lista de Double, ou seja, um [Double].

Feito isto, basta calcular o valor total a ser pago, o que é feito obtendo o valor total da primeira linha (quantidade x preço do primeiro produto) e somando este valor ao total da segunda linha (também quantidade x preço, mas do segundo produto).

O resultado deve ser exibido no formato solicitado pelo exercício. Por estarmos trabalhando com valores monetários, o exercício exige a formatação do resultado em duas casas decimais. Para fazer essa formatação basta utilizar o printf e formatar o valor total com %.2f, isso delimita o resultado a duas casas decimais. Não esqueça de importar a função printf!

import Text.Printf (printf)
main :: IO ()
main = do   
   product1 <- getLine
   product2 <- getLine
   let [cod1, units1, price1] = map read (words product1) :: [Double]
   let [cod2, units2, price2] = map read (words product2) :: [Double]
   let total = units1 * price1 + units2 * price2
   printf "VALOR A PAGAR: R$ %.2f\n" (total)

Veja também aqui no blog a solução para o problema 1010 em outras linguagens!

Ah, só mais uma coisa: ajude mais uma vez o blog para que eu continue postando respostas em diversas linguagens! Segue novamente o PIX para doações é 6d8bc7a8-5d74-493a-ab7a-3515baf35956. Sua ajuda será muito útil. 

Um abraço e até a próxima!

Postagem em destaque

URI (BEECROWD) - 2158 - Helping Uncle Cláudio (Ajudando o Tio Cláudio) - Matemática - C, C++ e Haskell

Buenas! Estou aqui mais uma vez para resolver um problema de Matemática! Agora tenho resolvido alguns dessa categoria, pra que vocês possam ...

Postagens mais visitadas