O objetivo deste exercício é fazer a divisão em notas e moedas de um valor expresso em centavos de real, dando preferência para as notas ou moedas de maior valor. Utilizaremos notas de R$ 100,00, R$ 50,00, R$ 20,00, R$ 10,00, R$ 5,00 e R$ 2,00 e moedas de R$ 1,00, R$ 0.50, R$ 0.25, R$ 0.10 e R$ 0.05.
Como exemplo, o valor 12.830 centavos pode ser dividido em uma nota de R$ 100,00, uma nota de R$ 20,00, uma nota de R$ 5,00, uma nota de R$ 2,00, uma moeda de R$ 1,00, uma moeda de R$ 0.25 e uma moeda de R$ 0.05.
O seu programa deverá ler um número inteiro. Este nĂºmero deverá estar expresso apenas por dígitos, ou seja, sem pontos extras para separar grupos de três dígitos. Os valores serão mútiplos de 5. Observe o exemplo:
34185
Para cada tipo de nota ou moeda enumerados anteriormente, será emitida uma linha indicando o número de notas ou moedas necessárias daquele tipo. Note que alguns valores podem ser iguais a zero.
Para o exemplo de entrada acima, a saída será:
3 nota(s) de R$ 100,00.
0 nota(s) de R$ 50,00.
2 nota(s) de R$ 20,00.
0 nota(s) de R$ 10,00.
0 nota(s) de R$ 5,00.
0 nota(s) de R$ 2,00.
1 moeda(s) de R$ 1,00.
1 moeda(s) de R$ 0,50.
1 moeda(s) de R$ 0,25.
1 moeda(s) de R$ 0,10.
0 moeda(s) de R$ 0,05.
No SuSy, para cada tarefa, criamos um conjunto de testes com
arquivos de entrada arq<i>.in
e para cada um deles
temos uma saída esperada arq<i>.res
. Para esta
tarefa, os testes abertos serão os seguintes:
Entrada | Resultado | ||
---|---|---|---|
arq1.in | 40000 |
4 nota(s) de R$ 100,00. |
arq1.res |
arq2.in | 7000 |
0 nota(s) de R$ 100,00. |
arq2.res |
arq3.in | 1800 |
0 nota(s) de R$ 100,00. |
arq3.res |
arq4.in | 90 |
0 nota(s) de R$ 100,00. |
arq4.res |
arq5.in | 24630 |
2 nota(s) de R$ 100,00. |
arq5.res |
arq6.in | 6260 |
0 nota(s) de R$ 100,00. |
arq6.res |
arq7.in | 18890 |
1 nota(s) de R$ 100,00. |
arq7.res |
arq8.in | 51545 |
5 nota(s) de R$ 100,00. |
arq8.res |
Esta tarefa possui mais dois testes fechados, que são variações de alguns dos testes já apresentados.
Dado um dos arquivos arq<i>.in
, você pode utilizá-lo como entrada na linha de comando da seguinte forma:
$ python3 main.py < arq1.in
Você pode redirecionar a saída para um arquivo arq<i>.out
da seguinte maneira:
$ python3 main.py < arq1.in > arq1.out
O SuSy está configurado para comparar a saída do seu programa
com o arquivo arq<i>.res
utilizando o comando diff
:
$ diff arq1.out arq1.res
Uma saída vazia indicará que o programa executou corretamente no seu computador. Caso contrário, observe as diferenças apontadas e depure seu programa.
Estão disponíveis dois scripts Python para ajudar a fazer todos os testes abertos, sendo um para ambiente GNU/Linux e o outro para ambiente Windows. Os scripts supõem que o arquivo lab01.py
, os arquivos de entrada arq<i>.in
e os arquivos com resultado arq<i>.res
estão todos no mesmo diretório.
Para ler um valor e armazená-lo como inteiro na variável x
utilize os comandos input()
e int()
:
x = int(input())
Para obter o resultado da divisáo inteira de um número por outro utilize o operador //
:
res_int = x // 100
Para obter o resto da divisáo inteira de um número por outro utilize o operador %
:
res_int = x % 100
Observação: uma versão desta tarefa que
lesse um número com duas casas decimais e operasse
com floats
seria mais complexa e teria de lidar com as
limitações de armazenamento e aritmética de ponto
flutuante. Veja os exemplos abaixo:
>>> 48590 % 100
90
>>> 485.90 % 100
85.8999999999998
Para saber mais, veja a seção 15. Floating Point Arithmetic: Issues and Limitations da documentação de Python 3.
Veja aqui a página de submissão da tarefa. Lembre-se que o arquivo a ser submetido deve se chamar lab01.py
. No link Arquivos auxiliares há um arquivo aux-01.zip
que contém todos os arquivos de testes abertos e seus respectivos resultados compactados. Os arquivos executa-testes.py
e executa-testes-windows.py
também estão neste pacote.
O limite máximo de submissões é 20.
O peso desta tarefa é 2.
O prazo final para submissão é 26/08/2018.