Problemas con el vuelto en monedas

Iniciado por adripillo14, 5 Noviembre 2012, 17:15 PM

0 Miembros y 1 Visitante están viendo este tema.

xiruko

te dejo otra manera de hacerlo por si te sirve de ayuda:

#include <stdio.h>

#define M1 0.25
#define M2 0.10
#define M3 0.05
#define M4 0.01

int main() {

int m1, m2, m3, m4;
float cantidad;

printf("Introduce la cantidad: ");
scanf("%f", &cantidad);

m1=(int)(cantidad/M1);
cantidad-=m1*M1;

m2=(int)(cantidad/M2);
cantidad-=m2*M2;

m3=(int)(cantidad/M3);
cantidad-=m3*M3;

m4=(int)(cantidad/M4);
cantidad-=m4*M4;

printf("Monedas de 0.25:\t%d\nMonedas de 0.10:\t%d\nMonedas de 0.05:\t%d\n"
  "Monedas de 0.01:\t%d\n", m1, m2, m3, m4);

return 0;
}


y la salida:

xiruko:~$ gcc monedas.c -o monedas
xiruko:~$ ./monedas
Introduce la cantidad: 2.43
Monedas de 0.25: 9
Monedas de 0.10: 1
Monedas de 0.05: 1
Monedas de 0.01: 3
xiruko:~$


un saludo!

modifico: no vi que ya habias resuelto tu duda. igualmente lo dejo por si te sirve.

leosansan

#11

....... y la salida:


Introduce la cantidad: 1.4
Monedas de 0.25: 5
Monedas de 0.10: 1
Monedas de 0.05: 0 <==aqui deberia ser 1
Monedas de 0.01: 4 <==aqui deberia ser 0

CitarSalida que se obtiene con la ligera modiicación de los valores M, como comenté por los redondeos:
Código (cpp) [Seleccionar]

#include <stdio.h>

#define M1 0.2499
#define M2 0.099
#define M3 0.049
#define M4 0.0099

int main() {

int m1, m2, m3, m4;
float cantidad;

printf("Introduce la cantidad: ");
scanf("%f", &cantidad);

m1=(int)(cantidad/M1);
cantidad-=m1*M1;

m2=(int)(cantidad/M2);
cantidad-=m2*M2;

m3=(int)(cantidad/M3);
cantidad-=m3*M3;

m4=(int)(cantidad/M4);
cantidad-=m4*M4;

printf("Monedas de 0.25:\t%d\nMonedas de 0.10:\t%d\nMonedas de 0.05:\t%d\n"
   "Monedas de 0.01:\t%d\n", m1, m2, m3, m4);

return 0;
}

Muy aguda la solución !!!.
Saludos!.


adripillo14


xiruko

gracias leosansan por la correccion, probe el codigo un par de veces y funcionaba bien asi que supuse que no habria ningun problema.

lo que pasa es que no entiendo porque pasa esto. si pruebo con 0.40 la solucion es correcta, pero con 1.40 no. ademas, teniendo en cuenta que la conversion a entero de un real se hace mediante truncamiento, no entiendo por que pasa esto. alguien sabe la respuesta?

gracias!