Problemas com um programa

7 respostas
T

Fala galera blz, um amigo meu tem uma lojinha lah, uma mercearia e ele falo pra eu fazer um programinha simples pra ele lah, ia fazer em Delphi, fica bacana e talz, so que to começando a aprender java e kero fazer no java, so q to penando legal viu...o negocio eh o seguinte:

O programinha recebe de entrada o valor devido e o valor pago, e fornece de saída o valor total a ser dado de troco e a
quantidade de cada moeda utilizada.
O troco sera formado pelas maiores moedas possiveis...podendo usar as de 1 real, 50, 25, 10, 5 e 1 centavos.

Por exemplo, se o valor devido for R$ 3,46 e o cliente pagar com uma nota de R$ 5,00, o troco deve ser R$ 1,54: 1 moeda de um real, 1 de cinqüenta centavos e 4 de um centavo (e não 154 moedas de um centavo!).

Foi mal o tamanho do texto mas me ajuda aii galera..tipo comecei aii vo postar o codigo so q tah foda viu rsrs.....

import javax.swing.*;

class TrocoMoedas {
	
	static Double preco, valorPago, troco, moeda1, moedatotal;
	static Double moeda100, moeda50, moeda25, moeda10, moeda5;
	
	
	static void receberDados()
	  {
	    preco = Integer.parseInt(JOptionPane.showInputDialog("Informe o valor da compra: "));
	    valorPago = Integer.parseInt(JOptionPane.showInputDialog("Informe o valor recebido: "));
	  }
	
	static void calcularTroco()
	  {
	    troco = valorPago - preco;   // Calculando troco
	    JOptionPane.showMessageDialog(null, "O troco a ser recebido pelo cliente é: " + troco);
	  }
	
	static void calcularMoedas()
	  {
	    moeda1 = troco * 100;   // Multiplico por 100 para usar somente os centavos.
	    
	    if ((moeda1 > 0) && (moeda1 <= 9))
	      {
	        moedatotal = moeda1 / 5;
	        JOptionPane.showMessageDialog(null,"O numero de moedatotal");
	      }
	    
	    if ((moeda1 > 9) && (moeda1 <= 99))
	      {
	        moedatota50 = moeda1 / 50;
	        moedatota25 = moedatota50 / 25;
	        moedatota10 = moedatota25 / 10;
	        moedatota5 = moedatota10 / 5;
	      }
	      
	    if ((moeda1 > 99) && (moeda1 <= 999))
	      {
	        moedatotal00 = moeda1 / 100;
	        moedatota50= moedatotal100 / 50;
	        moedatota25 = moedatota50 / 25;
	        moedatota10 = moedatota25 / 10;
	        moedatota5 = moedatotal0 / 5;
	        
	      }
	    
	    if ((moeda1 > 999) && (moeda1 <= 9999))
	      {
	        moedatotal = moeda1 / 5;
	      }
	    	
	  }
	  
	public static void main(String[] args) {
		TrocoMoedas.receberDados();
		TrocoMoedas.calcularTroco();
		TrocoMoedas.calcularMoedas();
	}	
}

7 Respostas

T

acho q nao falei meu problema neh, a duvida mesmo, tipo nao sei como faço pra achar essa separaçao das moedas, qts de cada um e talz…kebra esse galho aii galera…vlw hem :thumbup:

erickcellani

hauahauhauauhuaha

puts cara… desculpa… mas para ele naum basta saber o troco??? ele tem que saber quais moedas ele precisa dar para o cliente… é isso mesmo que eu entendi ???

T

isso mesmo cara…tipo ele vai saber o troco … aii a partir do troco
o programa calcular qts moedas de cada uma ele tem q devolver…

tipo assim ::

valor da compra: 3,65
o cliente da uma nota de 5
o troco eh: 1,35

ai ele fica sabeno q o troco eh 1,35 aii depois o programa exibe na tela pra ele…

1,35 = 1 moeda de R$ 1,00 + 1 de R$ 0,25 + 1 de R$ 0,10

sempre pegando os maiores valores de moeda possivel entendeu??
eu nao posso usar por exemplo 135 moedas de 1 centavo,

P

E ai blz!! Bom primeiro vc deve saber quais são os valores do dinheiro por ex: 0.01, 0.05, … , 10.0, 20.0, 50.0, 100.0.

Sabendo disso:

1- Subtrai o troco pelo maior valor nao utilizado.
2 - Se o valor for negativo passe para o maior valor não utilizado e volte ao 1º passo.
3 - se o valor for positivo, some 1 ao contador que se refere ao valor que esta sendo subtraido.
4 - se o valor for igual a 0 saia, se não volte ao 1º passo.

ex:

troco: 1.15 reais

1.15 - 100 = valor negativo //trocar pelo maior valor não utilizado

1.15 - 1.0 = 0.15
0.15 - 1.0 = valor negativo // trocar pelo maior valor não utilizado
0.15 - 0.5 = valor negativo // trocar pelo maior valor não utilizado
0.15 - 0.25 = valor negativo //// trocar pelo maior valor não utilizado
0.15 - 0.10 = 0.05
0.05 - 0.10 = valor negatico // trocar pelo maior valor não utilizado
0.05 - 0.05 = 0

Depois contar quantas vezes cada valor foi utilizado.
Não testei o algorítmo, mas basicamente é assim.

T

aii galera fiz aki ± como vc disse olha o metodo aii:

static void receberDados()
	  {
	    preco = Double.parseDouble(JOptionPane.showInputDialog("Informe o valor da compra: "));
	    valorPago = Double.parseDouble(JOptionPane.showInputDialog("Informe o valor recebido: "));
	  }
	
	static void calcularTroco()
	  {
	    troco = valorPago - preco;   // Calculando troco
	    JOptionPane.showMessageDialog(null, "O troco a ser recebido pelo cliente é: " + troco);
	  }
	
	static void calcularMoedas()
	  {
	    if ((troco - 1.0) > 0)
	    	moeda1 = moeda1 + 1;
	    else if ((troco - 0.5) > 0)
	    	moeda5 = moeda5 + 1;
	    else if ((troco - 0.25) > 0)
	    	moeda25 = moeda25 + 1;
	    else if ((troco - 0.1) > 0)
	    	moeda10 = moeda10 + 1;
	    else if ((troco - 0.05) > 0)
	    	moeda05 = moeda05 + 1;
	    else if ((troco - 0.01) > 0)
	    	moeda01 = moeda01 + 1;
        
        JOptionPane.showMessageDialog(null,"O número de moedas de R$ 1,00 é: " + moeda1);
        JOptionPane.showMessageDialog(null,"\nO número de moedas de R$ 0,50 é: " + moeda5);
        JOptionPane.showMessageDialog(null,"\nO número de moedas de R$ 0,25 é: " + moeda25);
        JOptionPane.showMessageDialog(null,"\nO número de moedas de R$ 0,10 é: " + moeda10);
        JOptionPane.showMessageDialog(null,"\nO número de moedas de R$ 0,05 é: " + moeda05);
        JOptionPane.showMessageDialog(null,"\nO número de moedas de R$ 0,01 é: " + moeda01);
       
	  }

mas so q ele executa os 2 primeiros metodos, pede pra digitar e calcula e imprime o troco, so q no 3 metodo ele nao faz nd, sai do programa e nao faz nd, da uma olhada se ta certo as contas, se assim eu consigo achar os valores das moedas, a quantidade, da um HELP aii blz…vlww

T

Ajuda aii galera to garradao, se puderem fico agradecido d++

:!:

P

E ai blz!!! Eu fiz essa classe para resolver seu problema, mas ele não leva em consideração a quantidade de notas que tem no caixa!!!

package brandao.util;

public class JDividirTroco {
    
    public static double[] valores = new double[]{ 0.01, 0.05, 0.1, 0.25, 0.5, 1.0, 2.0, 5.0, 10.0, 20.0, 50.0, 100.0 };
    
    /** Creates a new instance of JDividirTroco */
    public JDividirTroco() {

    }
    
   
    /*public void setValores( double ... valor ){
        this.valores = valor;
    }*/
    
    public static int[] getQuantidade( double valor ){
        double r = valor;
        int[] result = new int[ valores.length ];
        int i = valores.length - 1;
        while ( r > 0 ){
            if( r - valores[i] >= 0 ){
                r -= valores[i];
                result[i]++;
            }
            else
                i--;
        }
        return result;
    }
    
    public static void main( String[] args ) {
        int[] r = JDividirTroco.getQuantidade( 130.0 );
        for( int i=0; i<r.length; i++){
            if( r[i] != 0 )
                System.out.println( "Devolver: " + r[i] + " de " + JDividirTroco.valores[i] );
        }
    }
}

A saida desse exemplo foi:

Criado 19 de abril de 2007
Ultima resposta 19 de abr. de 2007
Respostas 7
Participantes 3