Olá,
Hoje vamos dar continuidade aos posts resolvendo problemas do Beecrowd (antigo URI)
Plataforma: BEECROWD
Problema: 1015
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)²)
Problema: 1015
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:
Distancia = ²√((x2 -x1)² + (y2 - y1)²)
Linguagem: Haskell
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))
Nenhum comentário:
Postar um comentário