SoloCodigo
Programación General => C/C++ => Mensaje iniciado por: Ramious en Lunes 14 de Enero de 2008, 19:41
-
Necesito que me ayuden, tengo el programa hecho, hace todo lo que le digo pero a la hora de dar el cambio como puedo hacer que me reste las monedas que doy en el cambio del contador de monedas actual?? Gracias por su ayuda.
Aqui va la parte del programa en cuestion:
gestionarPago(int importe)
{
int numeroMonedas=0;
int cantidadIntroducida = 0;
int monedasIntroducida[6];
int seguir = 0;
int i;
for (i=0; i<6; i++)
{
monedasIntroducida = 0;
}
do
{
printf("Introducir Monedas\n");
printf("------------------\n\n");
if (seguir == 0)
{
printf("Introduzca monedas de 50 cent: ");
scanf("%d", &numeroMonedas);
monedasIntroducidas[0] += numeroMonedas;
monedasActual[0] += numeroMonedas;
cantidadIntroducida += numeroMonedas * 50;
if (cantidadIntroducida >= importe)
seguir = 1;
}
if (seguir == 0)
{
printf("Introduzca monedas de 20 cent: ");
scanf("%d", &numeroMonedas);
monedasIntroducidas[1] += numeroMonedas;
monedasActual[1] += numeroMonedas;
cantidadIntroducida += numeroMonedas * 20;
if (cantidadIntroducida >= importe)
seguir = 1;
}
if (seguir == 0)
{
printf("Introduzca monedas de 10 cent: ");
scanf("%d", &numeroMonedas);
monedasIntroducidas[2] += numeroMonedas;
monedasActual[2] += numeroMonedas;
cantidadIntroducida += numeroMonedas * 10;
if (cantidadIntroducida >= importe)
seguir = 1;
}
if (seguir == 0)
{
printf("Introduzca monedas de 5 cent: ");
scanf("%d", &numeroMonedas);
monedasIntroducidas[3] += numeroMonedas;
monedasActual[3] += numeroMonedas;
cantidadIntroducida += numeroMonedas * 5;
if (cantidadIntroducida >= importe)
seguir = 1;
}
if (seguir == 0)
{
printf("Introduzca monedas de 2 cent: ");
scanf("%d", &numeroMonedas);
monedasIntroducidas[4] += numeroMonedas;
monedasActual[4] += numeroMonedas;
cantidadIntroducida += numeroMonedas * 2;
if (cantidadIntroducida >= importe)
seguir = 1;
}
if (seguir == 0)
{
printf("Introduzca monedas de 1 cent: ");
scanf("%d", &numeroMonedas);
monedasIntroducidas[5] += numeroMonedas;
monedasActual[5] += numeroMonedas;
cantidadIntroducida += numeroMonedas * 1;
if (cantidadIntroducida >= importe)
seguir = 1;
}
if (cantidadIntroducida < importe)
printf("Le faltan %d centimos. Siga introduciendo monedas\n\n", importe - cantidadIntroducida);
}while (cantidadIntroducida < importe);
printf("Cantidad entregada por el cliente: %d centimos\n",cantidadIntroducida);
printf("Su cambio es: %d centimos\n", cantidadIntroducida - importe);
printf("\nMonedas de 50:%d",(cantidadIntroducida - importe)/50);
printf("\nMonedas de 20:%d",(cantidadIntroducida - importe)%50/20);
printf("\nMonedas de 10:%d",(cantidadIntroducida - importe)%50%20/10);
printf("\nMonedas de 5:%d",(cantidadIntroducida - importe)%50%20%10/5);
printf("\nMonedas de 2:%d",(cantidadIntroducida - importe)%50%20%10%5/2);
printf("\nMonedas de 1:%d\t",(cantidadIntroducida - importe)%50%20%10%5%2/1);
if (((cantidadIntroducida - importe)/50) > monedasActual[0])
printf("\nNo hay cambio suficiente para la cantidad introducida");
//Aqui faltaria hacer la parte de darle el cambio al usuario del parking
//Si se le pueden dar las vueltas pues bien, vas poniendo las vueltas
//En caso de que no se pueda con las monedas disponibles, entonces
//tienes que borrar del array monedasActual las que hemos ido agregando
//cuando el usuario iba pagando
}
-
para sacar las monedas que le debes devolver lo que tienes que hacer es ir descontando monedas de mayor a menor hasta que el importe sea 0
o sea,
while (devolver > 50)
{
devolver-=50;
MonedasDe50++;
}
while (devolver > 20)
{
devolver-=20;
MonedasDe20++;
}
while (devolver > 10)
{
devolver-=10;
MonedasDe10++;
}
etc
eso hara los cambios mas aproximados y reunidos, otra cosa seria si tuvieras que usar las monedas que te han dado en la maquina, entonces tendrias que ir descontando los tipos tambien y si no quedan monedas de ese tipo romper el while y pasar al siguiente.
while (devolver > 50)
{
if (Monedas[0]==0) break;
Monedas[0]--;
devolver-=50;
MonedasDe50++;
}
while (devolver > 20)
{
if (Monedas[1]==0) break;
Monedas[1]--;
devolver-=20;
MonedasDe20++;
}
while (devolver > 10)
{
if (Monedas[2]==0) break;
Monedas[2]--;
devolver-=10;
MonedasDe10++;
}
etc...