{"id":673,"date":"2017-04-27T09:08:00","date_gmt":"2017-04-27T12:08:00","guid":{"rendered":"http:\/\/www.galirows.com.br\/meublog\/programacao\/?p=673"},"modified":"2024-09-04T13:35:23","modified_gmt":"2024-09-04T16:35:23","slug":"troco-do-caixa","status":"publish","type":"post","link":"http:\/\/www.galirows.com.br\/meublog\/programacao\/troco-do-caixa\/","title":{"rendered":"Troco do caixa"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Elabore um algoritmo para determinar as c\u00e9dulas do saque em um terminal de autoatendimento banc\u00e1rio. O algoritmo receber\u00e1 o valor de deve ser entregue, seguido dos tipos de c\u00e9dula. O terminal deve entregar o menor n\u00famero de c\u00e9dulas poss\u00edvel, mas com pelo menos uma c\u00e9dula de cada tipo solicitado. Considere que o sempre existir\u00e1 uma solu\u00e7\u00e3o poss\u00edvel.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por exemplo, se o valor for de R$ 100,00 e forem solicitadas c\u00e9dulas de R$ 20,00 e R$ 10,00, o caixa dever\u00e1 entregar 4 c\u00e9dulas de R$ 20,00 e 2 c\u00e9dulas de R$ 10,00. Nunca seriam solicitadas as c\u00e9dulas de R$ 50,00 e R$ 20,00 pois n\u00e3o existiria solu\u00e7\u00e3o poss\u00edvel com as restri\u00e7\u00f5es apresentadas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>C\u00f3digo em Python<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Uma primeira proposta de solu\u00e7\u00e3o \u00e9 mostrada no c\u00f3digo a seguir. Ele funciona para uma entrada como R$ 110,00 de saque com notas de R$ 50,00 e R$ 10,00, mas n\u00e3o funcionar\u00e1 para todos os casos.<\/p>\n\n\n\n<pre class=\"wp-block-code lang:python decode:true\"><code lang=\"python\" class=\"language-python\">total = int(input()) #total a ser sacada\nnota1 = int(input()) #primeiro tipo de nota\nnota2 = int(input()) #segundo tipo de nota\n\n#int() pega apenas a parte inteira da divis\u00e3o\nnotas1 = int(total \/ nota1)\n#desconta o que j\u00e1 foi dado em notas de 100\ntotal = total - (notas1 * nota1) \n#faz o mesmo para a outra nota\nnotas2 = int(total \/ nota2)\n\nprint \"Notas de \", nota1, \": \", notas1\nprint \"Notas de \", nota2, \": \", notas2<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Teste o c\u00f3digo:<\/strong> <a href=\"http:\/\/www.codeskulptor.org\/#user43_Zo0wEeOtyz_0.py\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/www.codeskulptor.org\/#user43_Zo0wEeOtyz_0.py<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Embora a solu\u00e7\u00e3o entregue o menor n\u00famero de c\u00e9dulas, ela n\u00e3o atende a considera\u00e7\u00e3o de que &#8220;pelo menos uma c\u00e9dula de cada tipo solicitado&#8221; deve ser entregue. Para isso, as linhas 13, 14 e 15 s\u00e3o necess\u00e1rias, for\u00e7ando o uso do segundo tipo de nota.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"python\" class=\"language-python line-numbers\">total = int(input()) #total a ser sacada\nnota1 = int(input()) #primeiro tipo de nota\nnota2 = int(input()) #segundo tipo de nota\n\n#int() pega apenas a parte inteira da divis\u00e3o\nnotas1 = int(total \/ nota1)\n#desconta o que j\u00e1 foi dado em notas de 100\ntotal = total - (notas1 * nota1) \n#faz o mesmo para a outra nota\nnotas2 = int(total \/ nota2)\n\nif notas2 == 0:\n    notas1 = notas1-1\n    notas2 = int(nota1 \/ nota2)\n\nprint \"Notas de \", nota1, \": \", notas1\nprint \"Notas de \", nota2, \": \", notas2<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Teste o c\u00f3digo:<\/strong> <a href=\"https:\/\/py2.codeskulptor.org\/#user51_Zo0wEeOtyz_2.py\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/py2.codeskulptor.org\/#user51_Zo0wEeOtyz_2.py<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A solu\u00e7\u00e3o foi melhorada, mas ainda n\u00e3o \u00e9 suficiente. Ela funciona se a ordem informada das notas for a maior e depois a menor. Se a entrada for 150 50 10 a sa\u00edda ser\u00e1 correta, mas caso a entrada seja 150 10 50, ela n\u00e3o ser\u00e1 adequada. Para isso, s\u00e3o adicionadas as linhas 5-8, garantindo as notas em ordem decrescente.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"python\" class=\"language-python line-numbers\">total = int(input()) #total a ser sacada\nnota1 = int(input()) #primeiro tipo de nota\nnota2 = int(input()) #segundo tipo de nota\n\nif nota2 > nota1:\n    aux = nota1\n    nota1 = nota2\n    nota2 = aux\n    \n#int() pega apenas a parte inteira da divis\u00e3o\nnotas1 = int(total \/ nota1)\n#desconta o que j\u00e1 foi dado em notas de 100\ntotal = total - (notas1 * nota1) \n#faz o mesmo para a outra nota\nnotas2 = int(total \/ nota2)\n\nif notas2 == 0:\n    notas1 = notas1-1\n    notas2 = int(nota1 \/ nota2)\n\nprint \"Notas de \", nota1, \": \", notas1\nprint \"Notas de \", nota2, \": \", notas2<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">As linhas 6-8 poderiam ser substitu\u00eddas pelas linhas do c\u00f3digo a seguir. O resultado \u00e9 o mesmo, a opera\u00e7\u00e3o \u00e9 mais confusa, mas \u00e9 evitada a utiliza\u00e7\u00e3o de uma vari\u00e1vel (economiza uma vari\u00e1vel).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"python\" class=\"language-python\">    nota1 = nota1+nota2\n    nota2 = nota1-nota2\n    nota1 = nota1-nota2<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>C\u00f3digo em C\/C++<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Assim como mostrado em Python, o c\u00f3digo a seguir \u00e9 uma primeira tentativa.<\/p>\n\n\n\n<pre class=\"wp-block-code lang:c decode:true\"><code lang=\"c\" class=\"language-c\">#include &lt;stdio.h&gt;\n\nint main(void) {\n\tint total, nota1, nota2, notas1, notas2;\n\tscanf(\"%i\", &amp;total); \/\/total a ser sacado\n\tscanf(\"%i %i\", &amp;nota1, &amp;nota2); \/\/ler os dois tipos de nota\n\t\n\t\/\/divis\u00e3o de inteiro por inteiro resulta apenas a parte inteira da divis\u00e3o\n\t\/\/eu garanti com o casting (int) que converte um valor para inteiro\n\tnotas1 = (int)total \/ nota1; \n\ttotal = total - (notas1 * nota1); \/\/desconta o que j\u00e1 foi dado em notas do primeiro tipo\n\tnotas2 = (int)total \/ nota2; \/\/faz o mesmo para a outra nota\n\t\n\tprintf(\"Notas de %i: %i \\n\", nota1, notas1);\n\tprintf(\"Notas de %i: %i\", nota2, notas2);\n\t\n\treturn 0;\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Teste o c\u00f3digo:<\/strong> <a href=\"http:\/\/ideone.com\/a3WZWh\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/ideone.com\/a3WZWh<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para a solu\u00e7\u00e3o completa, o c\u00f3digo abaixo \u00e9 proposto.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">#include &lt;stdio.h>\n\nint main() {\n    int total, nota1, nota2, notas1, notas2;\n\n    \/\/ Entrada dos valores\n    printf(\"Digite o valor total a ser sacado: \");\n    scanf(\"%d\", &amp;total);\n    printf(\"Digite o valor da primeira nota: \");\n    scanf(\"%d\", &amp;nota1);\n    printf(\"Digite o valor da segunda nota: \");\n    scanf(\"%d\", &amp;nota2);\n\n    \/\/ Troca os valores se nota2 for maior que nota1\n    if (nota2 > nota1) {\n        int aux = nota1;\n        nota1 = nota2;\n        nota2 = aux;\n    }\n\n    \/\/ Calcula a quantidade de notas de cada tipo\n    notas1 = total \/ nota1;\n    total = total - (notas1 * nota1);\n    notas2 = total \/ nota2;\n\n    \/\/ Ajusta a quantidade de notas se necess\u00e1rio\n    if (notas2 == 0) {\n        notas1 = notas1 - 1;\n        notas2 = nota1 \/ nota2;\n    }\n\n    \/\/ Imprime o resultado\n    printf(\"Notas de %d: %d\\n\", nota1, notas1);\n    printf(\"Notas de %d: %d\\n\", nota2, notas2);\n\n    return 0;\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Teste o c\u00f3digo: <a href=\"https:\/\/ideone.com\/dPf1EQ\">https:\/\/ideone.com\/dPf1EQ<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Elabore um algoritmo para determinar as c\u00e9dulas do saque em um terminal de autoatendimento banc\u00e1rio. O algoritmo receber\u00e1 o valor de deve ser entregue, seguido dos tipos de c\u00e9dula. O terminal deve entregar o menor n\u00famero de c\u00e9dulas poss\u00edvel, mas com pelo menos uma c\u00e9dula de cada tipo solicitado. Considere que o sempre existir\u00e1 uma [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[3,5],"tags":[],"class_list":["post-673","post","type-post","status-publish","format-standard","hentry","category-c","category-python"],"aioseo_notices":[],"amp_enabled":true,"_links":{"self":[{"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/posts\/673","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/comments?post=673"}],"version-history":[{"count":5,"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/posts\/673\/revisions"}],"predecessor-version":[{"id":1435,"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/posts\/673\/revisions\/1435"}],"wp:attachment":[{"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/media?parent=673"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/categories?post=673"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/tags?post=673"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}