Pesquisar este blog

Livros Recomendados

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

quinta-feira, 23 de fevereiro de 2023

URI (BEECROWD) - 1009 - Salary with Bonus (Salário com Bônus) - Iniciante - Haskell

Boa tarde!

Aproveitando esta leva de postagens sobre Haskell, agora vamos apresentar a solução do problema Salary with Bonus (salário com bônus). Esse problema segue a mesma linha do anterior, sendo bom para trabalhar a lógica e encontrar a fórmula necessária para realizar o cálculo correto. Veja na sequência deste post como eu fiz para resolvê-lo, e fique à vontade para expor sua solução nos comentários!

Plataforma: Beecrowd (antiga URI)

Problema1009

Enunciado:

In english:
Make a program that reads a seller's name, his/her fixed salary and the sale's total made by himself/herself in the month (in money). Considering that this seller receives 15% over all products sold, write the final salary (total) of this seller at the 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 blank spaces.


Linguagem: Haskell

Solução:

Resolvi este exercício primeiramente importando a função printf, pois ela facilita a exibição dos resultados com a delimitação de casas decimais, como é o caso do valor que precisamos. Nossa resposta é um valor monetário, então precisamos que os valores estejam formatados com duas casas decimais.

Após importar o printf, definimos nossa função main e lemos os três valores necessários. O primeiro (sellerName) é uma string, então se lê a linha inteira com getLine. O segundo e o terceiro são valores monetários, então lemos como número de ponto flutuante de dupla precisão (Double). Depois, para calcular o salário total do funcionário, basta fazer o cálculo do salário fixo acrescido da comissão pelas vendas. Esta comissão é de 15% sobre o total de vendas, portanto, total * 0.15 nos dará esse valor. Basta somar isso ao salário fixo e temos a resposta, que precisa ser formatada como o exercício pede, incluindo a quebra de linha (\n) no fim.

E aí, achou fácil?

import Text.Printf (printf)
main :: IO ()
main = do 
   sellerName <- getLine
   fixedSalary <- readLn :: IO Double
   totalSales <- readLn :: IO Double
   printf "TOTAL = R$ %.2f\n" (fixedSalary+(0.15*totalSales))

Em outras soluções aqui do blog você pode verificar outras formas de formatar a saída ou de realizar os cálculos. Dessa vez eu resolvi dessa forma, já colocando diretamente a expressão necessária para obter a resposta dentro do printf. Fique à vontade para fazer do seu jeito!

Ajude este blog! O PIX para doações é 6d8bc7a8-5d74-493a-ab7a-3515baf35956.

quarta-feira, 22 de fevereiro de 2023

URI (BEECROWD) - 1008 - Salary (Salário) - Iniciante - Haskell

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)

Problema1008

Enunciado:

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!

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