Algoritmo de caixa eletrônico em Portugol, Javascript e Java.

Olá Leitores,

No post de hoje vou ensinar como fazer um algoritmo de caixa eletrônico.

Basicamente o enunciado pede:

“Fazer um programa que solicite ao usuário um valor inteiro para saque, como em um caixa eletrônico e retornar ao usuário a quantidade de cédulas de 100, 50, 20, 10, 5, 2 e 1 que o mesmo receberia, dando a ele a menor quantidade possível de notas.”

 

Antes de ver meu raciocínio tente pensar em como resolver isso, rabisque um papel com um possível código.

 

 

 

 

 

Para resolvermos essa lógica precisamos pensar da forma mais básica possível, imagine que o valor que pessoa pediu fosse dado a ela aos poucos, nota por nota, começando da nota de 100, porém a cada nota dada, contariamos a parte para somar o total de notas no final.

 

 

Parece ser um algoritmo do tipo guloso, veja a definição:

“É a técnica de projeto de algoritmos que tenta resolver o problema fazendo a escolha localmente ótima em cada fase com a esperança de encontrar um ótimo global.”

 

Portugol

programa
{
funcao inicio ()
{

inteiro ValorSacado
escreva (“Digite um número inteiro:”)
leia (ValorSacado)

inteiro Nota100Contador = 0
inteiro Nota50Contador = 0
inteiro Nota20Contador = 0
inteiro Nota10Contador = 0
inteiro Nota5Contador = 0
inteiro Nota2Contador = 0
inteiro Nota1Contador = 0

inteiro Total

enquanto (ValorSacado >= 100)
{
ValorSacado = ValorSacado – 100
Nota100Contador++
}
enquanto (ValorSacado >= 50)
{
ValorSacado = ValorSacado – 50
Nota50Contador++
}
enquanto (ValorSacado >= 20)
{
ValorSacado = ValorSacado – 20
Nota20Contador++
}
enquanto (ValorSacado >= 10)
{
ValorSacado = ValorSacado – 10
Nota10Contador++
}
enquanto (ValorSacado >= 5)
{
ValorSacado = ValorSacado – 5
Nota5Contador++
}
enquanto (ValorSacado >= 2)
{
ValorSacado = ValorSacado – 2
Nota2Contador++
}
enquanto (ValorSacado == 1)
{
ValorSacado = ValorSacado – 1
Nota1Contador++
}

escreva(“Notas de 100 sacadas: “, Nota100Contador, “\n”)
escreva(“Notas de 50 sacadas: “, Nota50Contador, “\n”)
escreva(“Notas de 20 sacadas: “, Nota20Contador, “\n”)
escreva(“Notas de 10 sacadas: “, Nota10Contador, “\n”)
escreva(“Notas de 5 sacadas: “, Nota5Contador, “\n”)
escreva(“Notas de 2 sacadas: “, Nota2Contador, “\n”)
escreva(“Notas de 1 sacadas: “, Nota1Contador, “\n”)
Total = Nota100Contador+
Nota50Contador+
Nota20Contador+
Nota10Contador+
Nota5Contador+
Nota2Contador+
Nota1Contador
escreva(“Total de Notas: “,Total)
}
}

Javascript

<html>

<head>
<title>Teste</title>
</head>

<body>
<script>

var valorSaque;

var Nota100Count = 0;
var Nota50Count = 0;
var Nota20Count = 0;
var Nota10Count = 0;
var Nota5Count = 0;
var Nota2Count = 0;
var Nota1Count = 0;

valorSaque = prompt(“Digite o valor que deseja sacar:”);
valorSaque = parseInt(valorSaque);

if (valorSaque < 1) {
alert(“Valor inválido”);
} else {
while (valorSaque >= 100) {
valorSaque = valorSaque – 100;
Nota100Count++;
}
while (valorSaque >= 50) {
valorSaque = valorSaque – 50;
Nota50Count++;
}
while (valorSaque >= 20) {
valorSaque = valorSaque – 20;
Nota20Count++;
}
while (valorSaque >= 10) {
valorSaque = valorSaque – 10;
Nota10Count++;
}
while (valorSaque >= 5) {
valorSaque = valorSaque – 5;
Nota5Count++;
}
while (valorSaque >= 2) {
valorSaque = valorSaque – 2;
Nota2Count++;
}
while (valorSaque == 1) {
valorSaque = valorSaque – 1;
Nota1Count++;
}

alert(“Notas de R$100 sacadas: ” + Nota100Count);
alert(“Notas de R$50 sacadas: ” + Nota50Count);
alert(“Notas de R$20 sacadas: ” + Nota20Count);
alert(“Notas de R$10 sacadas: ” + Nota10Count);
alert(“Notas de R$5 sacadas: ” + Nota5Count);
alert(“Notas de R$2 sacadas: ” + Nota2Count);
alert(“Notas de R$1 sacadas: ” + Nota1Count);
alert(“Total de notas:” + (Nota100Count + Nota50Count + Nota20Count + Nota10Count + Nota5Count + Nota2Count + Nota1Count))
}
</script>
</body>

</html>

Java

import java.util.Scanner;
public class Saque {

public static void main(String[] args) {

Scanner s = new Scanner(System.in);
String str = s.nextLine();

int Nota100Contador = 0;
int Nota50Contador = 0;
int Nota20Contador = 0;
int Nota10Contador = 0;
int Nota5Contador = 0;
int Nota2Contador = 0;
int Nota1Contador = 0;

int Total = 0;

int ValorSacado = Integer.parseInt(str);

while (ValorSacado >= 100)
{
ValorSacado = ValorSacado – 100;
Nota100Contador++;
}
while (ValorSacado >= 50)
{
ValorSacado = ValorSacado – 50;
Nota50Contador++;
}
while (ValorSacado >= 20)
{
ValorSacado = ValorSacado – 20;
Nota20Contador++;
}
while (ValorSacado >= 10)
{
ValorSacado = ValorSacado – 10;
Nota10Contador++;
}
while (ValorSacado >= 5)
{
ValorSacado = ValorSacado – 5;
Nota5Contador++;
}
while (ValorSacado >= 2)
{
ValorSacado = ValorSacado – 2;
Nota2Contador++;
}
while (ValorSacado == 1)
{
ValorSacado = ValorSacado – 1;
Nota1Contador++;
}

System.out.println(“Notas de 100 sacadas: ” + Nota100Contador + “.”);
System.out.println(“Notas de 50 sacadas: ” + Nota50Contador + “.”);
System.out.println(“Notas de 20 sacadas: ” + Nota20Contador + “.”);
System.out.println(“Notas de 10 sacadas: ” + Nota10Contador + “.”);
System.out.println(“Notas de 5 sacadas: ” + Nota5Contador + “.”);
System.out.println(“Notas de 2 sacadas: ” + Nota2Contador + “.”);
System.out.println(“Notas de 1 sacadas: ” + Nota1Contador + “.”);
Total = Nota100Contador+
Nota50Contador+
Nota20Contador+
Nota10Contador+
Nota5Contador+
Nota2Contador+
Nota1Contador;
System.out.println(“Total de Notas: “+Total);
}
}

Fontes disponíveis em: https://github.com/enegociosandre/saque