• Sábado 14 de Diciembre de 2024, 19:28

Autor Tema:  Problemas Con Contador De Monedas  (Leído 978 veces)

Ramious

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Problemas Con Contador De Monedas
« en: Lunes 14 de Enero de 2008, 19:41 »
0
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

}

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Re: Problemas Con Contador De Monedas
« Respuesta #1 en: Martes 15 de Enero de 2008, 09:03 »
0
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...