Estou lendo um livro que tem o seguinte exercício:
-Escrever um aplicativo que le um valor monetário(apenas valores inteiros) e calcula qual o menor número possível de notas de 100,50,10,5,1 em que o valor lido pode ser decomposto.
Escrever o valor lido e a relação de notas necessárias.
Só gostaria de saber se alguém sabe explicar-me a lógica que eu tenho que usar. Porque não estou entendendo como posso fazer.
OBS: não estou pedindo o exercício pronto.
Obrigado…
Cara, pensando aqui rapidamente, o que vc pode fazer é o seguinte…
Pegue o valor que vc pretende dividir em notas edivide por 100, guarda apenas a parte inteira, divide o restante por 50, guarda apenas a parte inteira, divide por 10 e assim sucesivamente.
Ex… R$ 266,00… Serão 2 notas de 100, 1 de 50, 1 de 10, 1 de 5 e 1 de 1…
OBS: Não sei se é a maneira mais correta mas acho que da certo…
J
jaireltonPJ
É como o jason_voorhees falou aí, comece a dividir o valor total pelo valor das notas, começando pelo maior valor, use o % para saber o resto da divisão e vá quardando o quociente das divisões que você vai saber quantas notas precisam, até que o valor chegue a 0.
P
pgtpgtPJ
Bom eu comecei o código assim:
importjavax.swing.JOptionPane;publicclassExe02{publicstaticvoidmain(Stringargs[]){Stringvalor=JOptionPane.showInputDialog(null,"Insira um valor monetário");intvalor01=Integer.parseInt(valor);intresultado=0;if(valor01>=100){resultado=valor01/100;}elseif(valor01<100&&valor01>=50){resultado=valor01/50;}elseif(valor01<50&&valor01>=10){resultado=valor01/10;}elseif(valor01<10&&valor01>=5){resultado=valor01/5;}elseif(valor01<5&&valor01>=1){resultado=valor01/1;}else{JOptionPane.showMessageDialog(null,"valor inválido");}JOptionPane.showMessageDialog(null,"Notas Necessárias:"+resultado+"Valor Dado"+valor01);System.exit(0);}}
Não está completo é claro, mas eu não entendi como é que eu posso utilizar o operador %???
E como eu posso fazer para ele exibir quantas vezes ele multiplicou por 50 por exemplo???
Obrigado...
[/list]
M
marcosbrandaoPJ
O operador % você usa assim:
ex:
se voce tem 126 e quer saber o resto da divisao por 100:
int resto = 126%100;
isso vai resultar em 26
O inteiro vc pode pegar com Math.abs(126/100);
Isso vai te retornar 1;
agora vc tem o inteiro da divisao e o resto, os dois valores que vc precisa pra fazer esse exercicio.
M
MurdocPJ
Só uma uqestão de desenpenhou.
pq q fazer isso:
if(valor01>=100){
resultado=valor01/100;
}
else if(valor01< 100 && valor01>= 50){
resultado=valor01/50;
}
Vc já esta verificando no 1º if se o valor maior ou = a 100 não há necessidade de uma nova verificação no 2ª e demais ifs pq e passou pelo de cima o valor mais ser menos q 100 seria um ganho desempenho se isso nao fosse ferificado;
P
pgtpgtPJ
Bom, eu fiz isso porque se eu não colocar valor01< 100 no 50(segundo if) ele irá testar com valores acima de 100, e acima de 100 eu quero que somente seja feita a divisão com 100. Entendeu?
É isso ou estou realmente errado?
P
pregospanPJ
tava morgando na hora do almoço, essa sai de lambuja.... hehe
importjavax.swing.JOptionPane;importjavax.swing.JTextArea;publicclassPJ01{publicstaticvoidmain(String[]args){int[]notas=newint[]{100,50,20,10,5,2,1};int[]countNotas=newint[notas.length];intnumber=-1;Stringinput=JOptionPane.showInputDialog(null,"Entre com o número ou -1 para sair.","Em quantas notas se divide?",JOptionPane.QUESTION_MESSAGE);try{number=Integer.parseInt(input);}catch(NumberFormatExceptione){}if(number!=-1){contador:{for(inti=0;i<notas.length;i++){while(number>=notas[i]){if(number>0){countNotas[i]=number/notas[i];number=number%notas[i];}else{breakcontador;}}}Stringoutput="Valor : R$ "+input+"\n";for(inti=0;i<notas.length;i++){if(countNotas[i]>0){output+="\n"+countNotas[i]+" notas de R$ "+notas[i];}}JOptionPane.showMessageDialog(null,newJTextArea(output),"Resultado",JOptionPane.INFORMATION_MESSAGE);}}System.exit(0);}}
P
pgtpgtPJ
Valeu pregospan!
Devo admitir que sou novo em Java e não compreendi muito bem o seu código mas vou estudá-lo.
Obrigado a todos…
M
MurdocPJ
“pgtpgt”:
Bom, eu fiz isso porque se eu não colocar valor01< 100 no 50(segundo if) ele irá testar com valores acima de 100, e acima de 100 eu quero que somente seja feita a divisão com 100. Entendeu?
É isso ou estou realmente errado?
No segundo if ele so vai tratar valores entre 50 e 99 pq o programa so vai passar para o o segundo if se nao for executado o 1º.
Supunhetemos que o valor digitado seja 110 certo.
o 1º if e executado e a aplicação finalizada.
Agora supunhetemos e seja 78, o 1º if nao e executado (78<100) mas o segundo if é executado pq 78 < 50.