MC102 - Algoritmos e Programação de Computadores
MC102 Oferecimento anterior

Tarefa de laboratório 01

Moeda de um real 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.

Entrada

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

Saída

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.

Testes com o SuSy

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.
0 nota(s) de R$ 50,00.
0 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.
0 moeda(s) de R$ 1,00.
0 moeda(s) de R$ 0,50.
0 moeda(s) de R$ 0,25.
0 moeda(s) de R$ 0,10.
0 moeda(s) de R$ 0,05.
arq1.res
arq2.in 7000 0 nota(s) de R$ 100,00.
1 nota(s) de R$ 50,00.
1 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.
0 moeda(s) de R$ 1,00.
0 moeda(s) de R$ 0,50.
0 moeda(s) de R$ 0,25.
0 moeda(s) de R$ 0,10.
0 moeda(s) de R$ 0,05.
arq2.res
arq3.in 1800 0 nota(s) de R$ 100,00.
0 nota(s) de R$ 50,00.
0 nota(s) de R$ 20,00.
1 nota(s) de R$ 10,00.
1 nota(s) de R$ 5,00.
1 nota(s) de R$ 2,00.
1 moeda(s) de R$ 1,00.
0 moeda(s) de R$ 0,50.
0 moeda(s) de R$ 0,25.
0 moeda(s) de R$ 0,10.
0 moeda(s) de R$ 0,05.
arq3.res
arq4.in 90 0 nota(s) de R$ 100,00.
0 nota(s) de R$ 50,00.
0 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.
0 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.
1 moeda(s) de R$ 0,05.
arq4.res
arq5.in 24630 2 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.
1 nota(s) de R$ 5,00.
0 nota(s) de R$ 2,00.
1 moeda(s) de R$ 1,00.
0 moeda(s) de R$ 0,50.
1 moeda(s) de R$ 0,25.
0 moeda(s) de R$ 0,10.
1 moeda(s) de R$ 0,05.
arq5.res
arq6.in 6260 0 nota(s) de R$ 100,00.
1 nota(s) de R$ 50,00.
0 nota(s) de R$ 20,00.
1 nota(s) de R$ 10,00.
0 nota(s) de R$ 5,00.
1 nota(s) de R$ 2,00.
0 moeda(s) de R$ 1,00.
1 moeda(s) de R$ 0,50.
0 moeda(s) de R$ 0,25.
1 moeda(s) de R$ 0,10.
0 moeda(s) de R$ 0,05.
arq6.res
arq7.in 18890 1 nota(s) de R$ 100,00.
1 nota(s) de R$ 50,00.
1 nota(s) de R$ 20,00.
1 nota(s) de R$ 10,00.
1 nota(s) de R$ 5,00.
1 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.
1 moeda(s) de R$ 0,05.
arq7.res
arq8.in 51545 5 nota(s) de R$ 100,00.
0 nota(s) de R$ 50,00.
0 nota(s) de R$ 20,00.
1 nota(s) de R$ 10,00.
1 nota(s) de R$ 5,00.
0 nota(s) de R$ 2,00.
0 moeda(s) de R$ 1,00.
0 moeda(s) de R$ 0,50.
1 moeda(s) de R$ 0,25.
2 moeda(s) de R$ 0,10.
0 moeda(s) de R$ 0,05.
arq8.res

Esta tarefa possui mais dois testes fechados, que são variações de alguns dos testes já apresentados.

Como utilizar os testes no seu computador

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.

Dicas de Python 3 para esta tarefa:

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.

Orientações para submissão

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.