Criar um simulador de caixa eletrônico
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");
}
}
}
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
Curtidas 0
Respostas
Emerson Nascimento
22/02/2020
Veja se o procedimento apresentado nesta questão de ajuda
https://www.devmedia.com.br/forum/fazer-o-programa-encontrar-valor-ideal/607920
https://www.devmedia.com.br/forum/fazer-o-programa-encontrar-valor-ideal/607920
GOSTEI 0
Tiago Almeida
22/02/2020
Veja se o procedimento apresentado nesta questão de ajuda
https://www.devmedia.com.br/forum/fazer-o-programa-encontrar-valor-ideal/607920
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
GOSTEI 0
Welton
22/02/2020
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");
}
}
}
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.
GOSTEI 0
Emerson Nascimento
22/02/2020
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.
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]);
};
};
};
};GOSTEI 0
Tiago Almeida
22/02/2020
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.
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
GOSTEI 0