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…
É 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.
Bom eu comecei o código assim:[code]import javax.swing.JOptionPane;
public class Exe02 {
public static void main(String args[]){
String valor=JOptionPane.showInputDialog(null,“Insira um valor monetário”);
int valor01=Integer.parseInt(valor);
int resultado = 0;
if(valor01>=100){
resultado=valor01/100;
}
else if(valor01< 100 && valor01>= 50){
resultado=valor01/50;
}
else if(valor01<50&& valor01>=10){
resultado=valor01/10;
}
else if(valor01<10&&valor01>=5){
resultado=valor01/5;
}
else if(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);
}
}
[/code]
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]
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.
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; 
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?
tava morgando na hora do almoço, essa sai de lambuja… hehe
[code]import javax.swing.JOptionPane;
import javax.swing.JTextArea;
public class PJ01 {
public static void main( String[] args ) {
int[] notas = new int[] { 100, 50, 20, 10, 5, 2, 1 };
int[] countNotas = new int[ notas.length ];
int number = -1;
String input = 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 ( NumberFormatException e ) { }
if ( number != -1 ) {
contador : {
for ( int i = 0; i < notas.length; i++ ) {
while ( number >= notas[ i ] ) {
if ( number > 0 ) {
countNotas[ i ] = number / notas[ i ];
number = number % notas[ i ];
}
else {
break contador;
}
}
}
String output = "Valor : R$ " + input + "\n";
for ( int i = 0; i < notas.length; i++ ) {
if ( countNotas[ i ] > 0 ) {
output += "\n" + countNotas[ i ] + " notas de R$ " + notas[ i ];
}
}
JOptionPane.showMessageDialog( null, new JTextArea( output ), "Resultado", JOptionPane.INFORMATION_MESSAGE );
}
}
System.exit( 0 );
}
}
[/code]
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…
[quote=“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?[/quote]
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.
Entendeu???
qq coisa e so fala