Criar um simulador de caixa eletrônico
22/02/2020
0
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
Posts
23/02/2020
Emerson Nascimento
https://www.devmedia.com.br/forum/fazer-o-programa-encontrar-valor-ideal/607920
23/02/2020
Tiago Almeida
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
25/02/2020
Welton
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.
26/02/2020
Emerson Nascimento
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]); }; }; }; };
26/02/2020
Tiago Almeida
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
Clique aqui para fazer login e interagir na Comunidade :)