Páginas: [1]
|
 |
|
Autor
|
Tema: programacion c++ CAMBIO DE MONEDAS (Leído 373 veces)
|
rickrick
Desconectado
Mensajes: 6
|
hola de nuevo amigos me atoré con este problema aqui les va realizar un programa que calcule los numeros de monedas y que denominacion para dar cambio (CON FUNCIONES) ejm:
introduces 30;
y tiene que imprimir $20=1 moneda(s) $10=1 moneda(s) $5=0 moneda(s) $2=0 moneda(s) $1=0 moneda(s)
espero que me lo puedan resolver GRACIAS
|
|
|
|
|
En línea
|
|
|
|
Cab Calloway
Colaborador
Desconectado
Mensajes: 4.235
|
Mientras que el número de monedas que cojas sea menor que el que tienes que coger:
Si al coger una de 20 no te pasas, la coges (y sumas 1 al contador de monedas de 20). Si te pasas, pasas al siguiente renglón.
Si al coger una de 10 no te pasas la coges (y sumas 1 al contador de monedas de 10). Si te pasas, vas al siguiente renglón.
Etc.
|
|
|
|
|
En línea
|
Le dije monta que te llevo al Sol, me dijo "qué tontería, arderás", le dije que no pensaba ir de día y se reía...
|
|
|
ҒrεακΠιи∂
Desconectado
Mensajes: 104
|
Buenas void cambio(int monto, int moneda) { int count = 0; if(monto <= 0) return; for(; moneda <= monto; ++count, monto -= moneda); printf("%d monedas de %d\n", count, moneda); cambio(monto, moneda/2); return; } La primera es gratis... la segunda ya no. Trata de ponerte a pensar que esto no es dificil Saludos, FreakMind
|
|
|
|
« Última modificación: 10 Junio 2008, 03:34 por ҒrεακΠιи∂ »
|
En línea
|
Connoisseurs of C semantics find C++ inferior to ++C 
|
|
|
Flakito81
Desconectado
Mensajes: 312
|
Estas hablando del típico problema de devolución de cambio. Hay mucha documentacion sobre el y lo puedes resolver de diferentes maneras. Te pongo la resolución del problema hecho con un algoritmo voraz, lo que quiere decir que no da la solucion optima para todos los sistemas monetarios. #include <stdio.h> #include <stdlib.h> #define MONEDAS 8 int monedas[] = {200,100,50,20,10,5,2,1}; int solucion[MONEDAS]; int main () { int i, devolucion; printf("devolucion: "); scanf ("%d",&devolucion); //inicializacion de vector solucion for (i = 0; i < MONEDAS; i++) solucion[i] =0; //-- //-- bucle voraz for (i = 0; i < MONEDAS; i++) while (devolucion >= monedas[i]) { solucion[i]++; devolucion-= monedas[i]; } //-- fin del bucle voraz if (devolucion) // !0 printf ("No hay monedas para devolver\n"); else //mostramos la solucion for (i = 0; i < MONEDAS; i++) if (solucion[i]) printf ("%d modenas de %d\n", solucion[i], monedas[i]); system ("pause"); return 0; } NOTA: Te recomiendo que leas en cualquier pagina de algoritmos la idea para resolver el problema. Si lo entiendes podrás resolver otros muchos del mismo estilo
|
|
|
|
|
En línea
|
|
|
|
rickrick
Desconectado
Mensajes: 6
|
muchas gracias amigo pero mi programa es algo asi: #include<conio.h> #include<stdio.h> int v,d,cinco,dos,uno; int cambio_moneda(int cantidad) { v=cantidad/20; cantidad=cantidad%20; d=cantidad/10; cantidad=cantidad%10; cinco=cantidad/5; cantidad=cantidad%5; dos=cantidad/2; cantidad=cantidad%2; uno=cantidad/1; cantidad=cantidad%1; }//int main(){ int v,d,cinco,dos,uno,cantidad,cambio; printf("Introduzca cantidad: \n"); scanf("%d",&cantidad); {//en esta parte me falta invocar la funcion } printf("\nsu cambio\n20:%d\n10:%d\n5:%d\n2:%d\n1:%d",v,d,cinco,dos,uno); getch(); }//main espero y me puedan ayudar a resolver esa parte
|
|
|
|
|
En línea
|
|
|
|
Flakito81
Desconectado
Mensajes: 312
|
El problema que tienes que usas unas variables globales para almacenar la informacion de las monedas y luego tienes declaradas otras variables con el mismo nombre para mostrarlas. #include<stdlib.h> #include<stdio.h> int v,d,cinco,dos,uno; int cambio_moneda(int cantidad) { v=cantidad/20; cantidad=cantidad%20; d=cantidad/10; cantidad=cantidad%10; cinco=cantidad/5; cantidad=cantidad%5; dos=cantidad/2; cantidad=cantidad%2; uno=cantidad/1; cantidad=cantidad%1; }//int main() { int cantidad; printf("Introduzca cantidad: \n"); scanf("%d",&cantidad); cambio_moneda(cantidad); printf("\nsu cambio\n20:%d\n10:%d\n5:%d\n2:%d\n1:%d",v,d,cinco,dos,uno); system("pause>nul"); }//main
|
|
|
|
|
En línea
|
|
|
|
rickrick
Desconectado
Mensajes: 6
|
muchas gracias amigo por tus consejos la neta me sirven mucho
|
|
|
|
|
En línea
|
|
|
|
newtonton
Desconectado
Mensajes: 19
|
Como dice Flakito81 existe mucha documentacion sobre este problema por Internet. El problema, tal y como esta planteado para todos los sistemas monetarios del mundo se resuelve muy fácil usando ese algoritmo voraz que Flakito81 escribía.
Es decir, si tienes un sistema monetario como el nuestro (El € es el mío, particularmente): es decir, hay monedas 2,1,0.50,0.20,0.10,0.05,0.02,0.01 € y quieres devolver 13:
6 monedas de 2 € 1 moneda de 1€
En cambio, si el sistema monetario fuese otro no te garantiza que te vaya a devolver el mínimo número de monedas el ir cogiendo siempre la mayor (te lo demostraría con un ejemplo, pero ahora mismo no se me ocurre ninguno).
La mejor solución a este problema estaría planteada con un algoritmo de vuelta atrás o incluso programación dinámica.
Saludos.
|
|
|
|
|
En línea
|
|
|
|
|
Páginas: [1]
|
|
|
|