Pesquisar este blog

Livros Recomendados

quinta-feira, 8 de junho de 2023

URI (BEECROWD) - 1015 - Distância Entre Dois Pontos (Distance Between Two Points) - Iniciante (Beginner) - Haskell

Olá,

Hoje vamos dar continuidade aos posts resolvendo problemas do Beecrowd (antigo URI)

Plataforma: BEECROWD
Problema1015

Enunciado (em inglês):
Read the four values corresponding to the x and y axes of two points in the plane, p1 (x1, y1) and p2 (x2, y2) and calculate the distance between them, showing four decimal places after the comma, according to the formula:

Distance = ²√((x2 -x1)² + (y2 - y1)²)

Em português:
Leia os quatro valores correspondentes aos eixos x e y de dois pontos quaisquer no plano, p1(x1,y1) e p2(x2,y2) e calcule a distância entre eles, mostrando 4 casas decimais após a vírgula, segundo a fórmula: 

Distancia = ²√((x2 -x1)² + (y2 - y1)²)

Linguagem: Haskell

Solução:

Observando o enunciado, tudo que precisamos fazer é ler essas coordenadas e usar a fórmula acima.
Como as respostas utilizam sempre quatro casas decimais, decidi por usar o printf para melhor formatar esta saída, por isso faço import Text.Printf (printf).

Leio as coordenadas, que são informadas linha a linha, como valores String, portanto, utilizo getLine para ler a linha inteira. Depois, para cada linha, converto ela em uma lista de coordenadas. Como a entrada será composta por dois valores, já chamo a lista da primeira linha convertida de [x1, y1] e a da segunda linha de [x2, y2]. Para ambas utilizei o tipo de ponto flutuante de dupla precisão (Double).

Feita a conversão, basta utilizar o printf para imprimir o valor com quatro casas decimais e sem esquecer de quebrar a linha ao final (formatação "%.4f\n"). O valor que será formatado é exatamente o da fórmula da distância, ou seja, (sqrt((x2-x1)**2 + (y2-y1)**2)).

import Text.Printf (printf)
main :: IO ()
main = do 
   line1 <- getLine
   line2 <- getLine
   let [x1, y1] = map read (words line1) :: [Double]
   let [x2, y2] = map read (words line2) :: [Double]
   printf "%.4f\n" (sqrt((x2-x1)**2 + (y2-y1)**2))

Ajude o blog! O nosso PIX para doações é a chave aleatória 6d8bc7a8-5d74-493a-ab7a-3515baf35956

Nenhum comentário:

Postar um comentário

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