Java - Ayuda con ejercicio de monedas

 
Vista:

Ayuda con ejercicio de monedas

Publicado por Sito00 (2 intervenciones) el 02/10/2014 10:10:56
Hola a todos,
estoy haciendo un programa en java que debe de mostrar una cantidad de billetes y monedas(EN EUROS) a devolver como cambio en función al importe, por ejemplo: si establecemos que el importe es de 150 y el cliente paga con 200, el programa muestra que hay que devolver un billete de 50.

Hasta ahi si que consigo hacerlo porque son numeros enteros, pero el problema viene cuando quiero hacerlo con monedas de centimo, que al tener decimales no se como hacerlo....

Aqui pongo mi codigo con lo que esta mal en NEGRITA para ver si me pueden ayudar.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
import cs1.Keyboard;
public class opcional2
{
 
	public static void main(String[] args)
    {
 
		int B500=0, B200=0, B100=0, B50=0, B20=0, B10=0, B5=0, M2=0, M1=0;
        double M50=0, M20=0, M10=0, M05=0, M02=0, M01=0;
        double importe, pago, DineroCliente;
 
        System.out.println("Cual es el importe a pagar?");
        importe=Keyboard.readInt();
 
		System.out.println("Con cuanto dinero paga el cliente?");
        pago=Keyboard.readInt();
 
         DineroCliente= pago-importe;
 
		if(DineroCliente >= 500) {
			B500=(int) DineroCliente / 500;
			DineroCliente= DineroCliente % 500;
 
		}
 
		if(DineroCliente >= 200) {
			B200=(int) DineroCliente / 200;
			DineroCliente= DineroCliente % 200;
 
		}
 
		if(DineroCliente >= 100) {
			B100=(int) DineroCliente / 100;
			DineroCliente= DineroCliente % 100;
 
		}
 
		if(DineroCliente >= 50) {
			B50=(int) DineroCliente / 50;
			DineroCliente= DineroCliente % 50;
 
		}
 
         if(DineroCliente >= 20) {
				B20=(int) DineroCliente / 20;
				DineroCliente= DineroCliente % 20;
 
			}
 
         if(DineroCliente >= 10) {
				B10=(int) DineroCliente / 10;
				DineroCliente= DineroCliente % 10;
 
			}
 
         if(DineroCliente >= 5) {
				B5=(int) DineroCliente / 5;
				DineroCliente= DineroCliente % 5;
 
			}
 
         if(DineroCliente >= 2) {
				M2=(int) DineroCliente / 2;
				DineroCliente= DineroCliente % 2;
 
			}
 
         if(DineroCliente >= 1) {
				M1=(int) DineroCliente / 1;
				DineroCliente= DineroCliente % 1;
 
			}
 
          if(DineroCliente >= 0.50) {
				M50=(double) DineroCliente / 0.50;
				DineroCliente= DineroCliente % 0.50;
 
			}
 
          if(DineroCliente >= 0.20) {
				M20=(double) DineroCliente / 0.20;
				DineroCliente= DineroCliente % 0.20;
 
			}
 
          if(DineroCliente >= 0.10) {
				M10=(double) DineroCliente / 0.10;
				DineroCliente= DineroCliente % 0.10;
 
			}
 
          if(DineroCliente >= 0.05) {
				M05=(double) DineroCliente / 0.05;
				DineroCliente= DineroCliente % 0.05;
 
			}
 
          if(DineroCliente >= 0.02) {
				M02=(double) DineroCliente / 0.02;
				DineroCliente= DineroCliente % 0.02;
 
			}
 
          if(DineroCliente >= 0.01) {
				M01=(double) DineroCliente / 0.01;
				DineroCliente= DineroCliente % 0.01;
 
			}
 
 
        System.out.println("Billetes de 500€= "+B500);
        System.out.println("Billetes de 200€= "+B200);
        System.out.println("Billetes de 100€= "+B100);
        System.out.println("Billetes de 50€= "+B50);
        System.out.println("Billetes de 20€= "+B20);
        System.out.println("Billetes de 10€= "+B10);
        System.out.println("Billetes de 5€= "+B5);
        System.out.println("Monedas de 2€= "+M2);
        System.out.println("Monedas de 1€= "+M1);
        System.out.println("Monedas de 50cnt= "+M50);
        System.out.println("Monedas de 20cnt= "+M20);
        System.out.println("Monedas de 10cnt= "+M10);
        System.out.println("Monedas de 5cnt= "+M05);
        System.out.println("Monedas de 1cnt= "+M01);
    }
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Ayuda con ejercicio de monedas

Publicado por Tom (1831 intervenciones) el 02/10/2014 12:24:39
Tienes varias alternativas. Una de ellas es hacer un algoritmo más genérico. Otra es usar las cantidades multiplicadas x 100 (1@ = 100 cts) y así manejar siempre enteros.

Esta simplificación te puede valer:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class Cambio {
	static int valores[] = {500 * 100, 100 * 100, 50 * 100, 20 * 100, 10 * 100, 5 * 100, 2 * 100, 1 * 100, 50, 20, 5, 1};
	/* */
	public static int[] cambio(float importe) {
		int c[] = new int[valores.length];
		int tmp = (int)(importe * 100);
 
		for(int i = 0; i < valores.length; i++) {
			c[i] = tmp / valores[i];
			tmp = tmp % valores[i];
		}
		return c;
	}
	/* */
	public static void main(String args[]) {
		float resto = 125.18f;
		int cambio[] = Cambio.cambio(resto);
		for(int i = 0; i < valores.length; i++) {
			if(cambio[i] > 0) {
				System.out.printf("%d de %f\n", cambio[i], valores[i] / 100.0);
			}
		}
	}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda con ejercicio de monedas

Publicado por Sito00 (2 intervenciones) el 02/10/2014 12:29:01
por favor, podrias ponerme un ejemplo? esque aun no entiendo muchas palabras tecnicas

lo de multiplicar x 100 no se muy bien a lo que te refieres y creo que entender bien eso es lo que me falta para completar mi codigo!!

mil gracias amigo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar