Criar um simulador de caixa eletrônico

22/02/2020

0

Pessoal estou criando um sistema de caixa eletrônico, com as notas 100, 50, 20, 10, 5, 2. pois quando eu faço o calculo com números quebrados por exemplo 138, 246, 113, ele não consegui calcular corretamente. Ex: com o numero 113 a saída foi:

1 notas de R$ 100,00
1 notas de R$ 10,00
1 notas de R$ 2,00



sendo assim ele calculou 112 e não 113, preciso de ajuda.

embaixo postarei o código completo:



package exercicio;

import java.util.Scanner;

public class Exercicio4 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);

System.out.println("Digite o valor que você deseja sacar");
int valor_0067 = input.nextInt();

int nota100_0067 = 100;
int nota20_0067 = 20;
int nota50_0067 = 50;
int nota10_0067 = 10;
int nota5_0067 = 5;
int nota2_0067 = 2;

if(nota100_0067 >= nota100_0067) {
nota100_0067 = valor_0067 / 100;
valor_0067 = valor_0067 % 100;
if (nota100_0067 != 0)
System.out.println(nota100_0067 + " notas de R$ 100,00");
}

if(nota50_0067 >= nota50_0067) {
nota50_0067 = valor_0067 / 50;
valor_0067 = valor_0067 % 50;
if (nota50_0067 != 0)
System.out.println(nota50_0067 + " notas de R$ 50,00");
}

if(nota20_0067 >= nota20_0067) {
nota20_0067 = valor_0067 / 20;
valor_0067 = valor_0067 % 20;
if (nota20_0067 != 0)
System.out.println(nota20_0067 + " notas de R$ 20,00");
}

if(nota10_0067 >= nota10_0067) {
nota10_0067 = valor_0067 / 10;
valor_0067 = valor_0067 % 10;
if (nota10_0067 != 0)
System.out.println(nota10_0067 + " notas de R$ 10,00");
}

if(nota5_0067 >= nota5_0067) {
nota5_0067 = valor_0067 / 5;
valor_0067 = valor_0067 % 5;
if (nota5_0067 != 0)
System.out.println(nota5_0067 + " notas de R$ 5,00");
}

if(nota2_0067 >= nota2_0067) {
nota2_0067 = valor_0067 / 2;
valor_0067 = valor_0067 % 2;
if (nota2_0067 != 0)
System.out.println(nota2_0067 + " notas de R$ 2,00");
}
}
}
Tiago Almeida

Tiago Almeida

Responder

Posts

23/02/2020

Emerson Nascimento

Veja se o procedimento apresentado nesta questão de ajuda

https://www.devmedia.com.br/forum/fazer-o-programa-encontrar-valor-ideal/607920

Responder

23/02/2020

Tiago Almeida

Veja se o procedimento apresentado nesta questão de ajuda

https://www.devmedia.com.br/forum/fazer-o-programa-encontrar-valor-ideal/607920



Eu vi o exemplo do site, mas não entendi, pois é em Delphi e eu estou usando java
Responder

25/02/2020

Welton

Pessoal estou criando um sistema de caixa eletrônico, com as notas 100, 50, 20, 10, 5, 2. pois quando eu faço o calculo com números quebrados por exemplo 138, 246, 113, ele não consegui calcular corretamente. Ex: com o numero 113 a saída foi:

1 notas de R$ 100,00
1 notas de R$ 10,00
1 notas de R$ 2,00



sendo assim ele calculou 112 e não 113, preciso de ajuda.

embaixo postarei o código completo:



package exercicio;

import java.util.Scanner;

public class Exercicio4 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);

System.out.println("Digite o valor que você deseja sacar");
int valor_0067 = input.nextInt();

int nota100_0067 = 100;
int nota20_0067 = 20;
int nota50_0067 = 50;
int nota10_0067 = 10;
int nota5_0067 = 5;
int nota2_0067 = 2;

if(nota100_0067 >= nota100_0067) {
nota100_0067 = valor_0067 / 100;
valor_0067 = valor_0067 % 100;
if (nota100_0067 != 0)
System.out.println(nota100_0067 + " notas de R$ 100,00");
}

if(nota50_0067 >= nota50_0067) {
nota50_0067 = valor_0067 / 50;
valor_0067 = valor_0067 % 50;
if (nota50_0067 != 0)
System.out.println(nota50_0067 + " notas de R$ 50,00");
}

if(nota20_0067 >= nota20_0067) {
nota20_0067 = valor_0067 / 20;
valor_0067 = valor_0067 % 20;
if (nota20_0067 != 0)
System.out.println(nota20_0067 + " notas de R$ 20,00");
}

if(nota10_0067 >= nota10_0067) {
nota10_0067 = valor_0067 / 10;
valor_0067 = valor_0067 % 10;
if (nota10_0067 != 0)
System.out.println(nota10_0067 + " notas de R$ 10,00");
}

if(nota5_0067 >= nota5_0067) {
nota5_0067 = valor_0067 / 5;
valor_0067 = valor_0067 % 5;
if (nota5_0067 != 0)
System.out.println(nota5_0067 + " notas de R$ 5,00");
}

if(nota2_0067 >= nota2_0067) {
nota2_0067 = valor_0067 / 2;
valor_0067 = valor_0067 % 2;
if (nota2_0067 != 0)
System.out.println(nota2_0067 + " notas de R$ 2,00");
}
}
}



Boa noite Tiago tudo bem? espero que sim , sou novo no mundo da programação , mas em breve espero aprender varias linguagens , atualmente aprendo Python , desde ja falo que nao sei Java , mas no caso do seu código acredito que o erro está na lógica de programação que seu algoritimo foi criado , por Ex ele simplismente nao entrega o valor de 113 como vc gostaria porque nao tem a nota ( Ex de 1 real) , vc nao criou a variavel nota_1 , entao toda vez que seu código precisar retornar um valor que precise dá ( nota_1) ele recorrerá a menor nota que chegar mais próximo do valor requerido, acredito que o erro esteja ai se vc conseguir , me de um feedback , abraço.
Responder

26/02/2020

Emerson Nascimento

tente isto.
não programo em Java, mas fiz umas pesquisas e "traduzi" aquele código de Delphi para Java. também não sei se aquela é a melhor forma...
de qualquer modo, efetuei testes com 113, com 81, com 3.
agora você poderá implementar algumas avaliações como, por exemplo, ao solicitar 80, o que é melhor:
1) entregar 4 cédulas de 20, ou
2) 1 cédula de 50, 1 cédula de 20 e 1 cédula de 10?
o código abaixo entrega a segunda opção.
package exercicio;

import java.util.Scanner;

public class Exercicio4 {

	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);

		System.out.println("Digite o valor que você deseja sacar");
		int valor = input.nextInt();

		// cédulas e/ou moedas possíveis
		int[][] aResult = {
			{100, -1},
			{50, -1},
			{20, -1},
			{10, -1},
			{5, -1},
			{2, -1}
		};

		int valorcalc = valor;
		int ninit = 1; // cédula/moeda inicial
		int nfim = 5; // número total de cédulas/moedas
		float nMult = 0;
		float nResto = 0;

		while (valorcalc != 0) {

			while ( (valorcalc != 0) && (ninit <= nfim) ) {

				valorcalc = valor;

				for (int i = 0; i <= nfim; i++) {
					if (aResult[i][1] == -1)
					  aResult[i][1] = (valorcalc / aResult[i][0]);
				  
					valorcalc -= (aResult[i][1] * aResult[i][0]);
					
					if (valorcalc == 0)
						break;
				};
					
				// se não conseguiu o cálculo exato
				if (valorcalc != 0) {
					if (aResult[ninit][1] > 0)
					  aResult[ninit][1] = (aResult[ninit][1] - 1);

					for (int i = ninit+1; i <= nfim; i++)
						aResult[i][1] = -1;

					if (aResult[ninit][1] == 0)
						ninit++;
				};

			};

    		if (valorcalc != 0)
    		    break;

		}

		// se o valor não foi exato
		// avisa que o valor é inválido
		if (valorcalc != 0)
			System.out.println("O valor informado não pode ser sacado!");
		else {
    		// zero as quantidades que estiverem negativas
    		for (int i = 0; i <= nfim; i++)
    			if (aResult[i][1] < 0)
    				aResult[i][1] = 0;

    		// redistribui os valores, caso necessário
    		for (int i = nfim; i >= 1; i--) {
    			if (aResult[i][1] > 0)
    				for (int n = (i-1); n >= 0; n--) {
    					nMult = ((aResult[i][1] * aResult[i][0]) / aResult[n][0]);
    					nResto = ((aResult[i][1] * aResult[i][0]) - (nMult * aResult[n][0]));
    					if ( (nMult > 0) && ((nResto == 0) || ((nResto % aResult[i][0]) == 0)) ) {
    						aResult[i][1] = (aResult[i][1] - (int)((nMult * aResult[n][0]) / aResult[i][0]));
    						aResult[n][1] = (aResult[n][1] + (int)nMult);
    					}
                        else {
                            if ( (i < nfim) && (nMult > 0) && ( (nResto % aResult[i+1][0]) == 0 ) ) {
                                aResult[i+1][1] = aResult[i+1][1] + (int)(nResto / aResult[i+1][0]);
                                aResult[i][1] = 0;
                                aResult[n][1] = aResult[n][1] + (int)nMult;
                            };
                        };
    				};
    		}

    		// redistribui os resídios de valores, caso necessário
    		for (int i = nfim; i >= 1; i--) {
    			if (aResult[i][1] > 0)
    				for (int n = (i-1); n >= 0; n--) {
    					nMult = ((aResult[i][1] * aResult[i][0]) / aResult[n][0]);
    					nResto = ((aResult[i][1] * aResult[i][0]) - (nMult * aResult[n][0]));
    					if ( (nMult > 0) && ((nResto == 0) || ((nResto % aResult[i][0]) == 0)) ) {
    						aResult[i][1] = (aResult[i][1] - (int)((nMult * aResult[n][0]) / aResult[i][0]));
    						aResult[n][1] = (aResult[n][1] + (int)nMult);
                        };
    				};
    		}

    		// apresenta o resultado
    		for (int i = 0; i <= nfim; i++)
    			if (aResult[i][1] > 0) {
    			    String strnota = (aResult[i][1] > 1) ? " notas " : " nota ";
    				System.out.println(aResult[i][1] + strnota + "de R$ " + aResult[i][0]);
    			};
		};
	};
};



Responder

26/02/2020

Tiago Almeida

tente isto.
não programo em Java, mas fiz umas pesquisas e "traduzi" aquele código de Delphi para Java. também não sei se aquela é a melhor forma...
de qualquer modo, efetuei testes com 113, com 81, com 3.
agora você poderá implementar algumas avaliações como, por exemplo, ao solicitar 80, o que é melhor:
1) entregar 4 cédulas de 20, ou
2) 1 cédula de 50, 1 cédula de 20 e 1 cédula de 10?
o código abaixo entrega a segunda opção.
package exercicio;

import java.util.Scanner;

public class Exercicio4 {

	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);

		System.out.println("Digite o valor que você deseja sacar");
		int valor = input.nextInt();

		// cédulas e/ou moedas possíveis
		int[][] aResult = {
			{100, -1},
			{50, -1},
			{20, -1},
			{10, -1},
			{5, -1},
			{2, -1}
		};

		int valorcalc = valor;
		int ninit = 1; // cédula/moeda inicial
		int nfim = 5; // número total de cédulas/moedas
		float nMult = 0;
		float nResto = 0;

		while (valorcalc != 0) {

			while ( (valorcalc != 0) && (ninit <= nfim) ) {

				valorcalc = valor;

				for (int i = 0; i <= nfim; i++) {
					if (aResult[i][1] == -1)
					  aResult[i][1] = (valorcalc / aResult[i][0]);
				  
					valorcalc -= (aResult[i][1] * aResult[i][0]);
					
					if (valorcalc == 0)
						break;
				};
					
				// se não conseguiu o cálculo exato
				if (valorcalc != 0) {
					if (aResult[ninit][1] > 0)
					  aResult[ninit][1] = (aResult[ninit][1] - 1);

					for (int i = ninit+1; i <= nfim; i++)
						aResult[i][1] = -1;

					if (aResult[ninit][1] == 0)
						ninit++;
				};

			};

    		if (valorcalc != 0)
    		    break;

		}

		// se o valor não foi exato
		// avisa que o valor é inválido
		if (valorcalc != 0)
			System.out.println("O valor informado não pode ser sacado!");
		else {
    		// zero as quantidades que estiverem negativas
    		for (int i = 0; i <= nfim; i++)
    			if (aResult[i][1] < 0)
    				aResult[i][1] = 0;

    		// redistribui os valores, caso necessário
    		for (int i = nfim; i >= 1; i--) {
    			if (aResult[i][1] > 0)
    				for (int n = (i-1); n >= 0; n--) {
    					nMult = ((aResult[i][1] * aResult[i][0]) / aResult[n][0]);
    					nResto = ((aResult[i][1] * aResult[i][0]) - (nMult * aResult[n][0]));
    					if ( (nMult > 0) && ((nResto == 0) || ((nResto % aResult[i][0]) == 0)) ) {
    						aResult[i][1] = (aResult[i][1] - (int)((nMult * aResult[n][0]) / aResult[i][0]));
    						aResult[n][1] = (aResult[n][1] + (int)nMult);
    					}
                        else {
                            if ( (i < nfim) && (nMult > 0) && ( (nResto % aResult[i+1][0]) == 0 ) ) {
                                aResult[i+1][1] = aResult[i+1][1] + (int)(nResto / aResult[i+1][0]);
                                aResult[i][1] = 0;
                                aResult[n][1] = aResult[n][1] + (int)nMult;
                            };
                        };
    				};
    		}

    		// redistribui os resídios de valores, caso necessário
    		for (int i = nfim; i >= 1; i--) {
    			if (aResult[i][1] > 0)
    				for (int n = (i-1); n >= 0; n--) {
    					nMult = ((aResult[i][1] * aResult[i][0]) / aResult[n][0]);
    					nResto = ((aResult[i][1] * aResult[i][0]) - (nMult * aResult[n][0]));
    					if ( (nMult > 0) && ((nResto == 0) || ((nResto % aResult[i][0]) == 0)) ) {
    						aResult[i][1] = (aResult[i][1] - (int)((nMult * aResult[n][0]) / aResult[i][0]));
    						aResult[n][1] = (aResult[n][1] + (int)nMult);
                        };
    				};
    		}

    		// apresenta o resultado
    		for (int i = 0; i <= nfim; i++)
    			if (aResult[i][1] > 0) {
    			    String strnota = (aResult[i][1] > 1) ? " notas " : " nota ";
    				System.out.println(aResult[i][1] + strnota + "de R$ " + aResult[i][0]);
    			};
		};
	};
};





irei tentar Obrigado
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar