Buenas, pessoal!
Resolvi aqui o problema "Salário" (Salary). Esse foi bem fácil, só tem que tomar cuidados com espaços, quebras de linha e delimitação de casas decimais para não deixar de receber o "accepted". Vamos conferir como eu fiz este código?
Plataforma: Beecrowd (antiga URI)
In english:
Write a program that reads an employee's number, his/her worked hours number in a month and the amount he received per hour. Print the employee's number and salary that he/she will receive at end of the month, with two decimal places.
Don’t forget to print the line's end after the result, otherwise you will receive “Presentation Error”.
Don’t forget the space before and after the equal signal and after the U$.
Linguagem: Haskell
Solução:
Basta ler os três valores conforme dito no enunciado e depois formatar a saída como o solicitado. Eu fiz dois comandos de escrita, um putStrLn para a primeira linha, que é NUMBER = numero-do-empregado, e um printf para imprimir SALARY = U$ valor, com delimitação de duas casas decimais.
Um ponto importante neste exercício é que o enunciado menciona a necessidade de ler dois valores inteiros e um de ponto flutuante. No entanto, se você utilizar IO Int para "workedHours", verá que ocorrerá um erro. Isto acontece porque o Haskell tem um sistema de tipos fortemente tipado e não permite a operação entre Int e Double
Meu código acabou ficando assim:
import Text.Printf (printf)
main :: IO ()
main = do
employeeNumber <- readLn :: IO Int
workedHours <- readLn :: IO Double
amountPerHour <- readLn :: IO Double
putStrLn ("NUMBER = " ++ show(employeeNumber))
printf "SALARY = U$ %.2f\n" (workedHours*amountPerHour)
Assim como em outras soluções que postei aqui, você pode usar let aqui e já calcular o salário antes do printf. Eu preferi fazer já no mesmo comando.
Mais uma fez peço que ajude este blog! O PIX para doações é 6d8bc7a8-5d74-493a-ab7a-3515baf35956
Valeu!