elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Ingresar Registrarse
05 Septiembre 2008, 13:33  



+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderador: ®®)
| | |-+  programacion c++ CAMBIO DE MONEDAS
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Imprimir
Autor Tema: programacion c++ CAMBIO DE MONEDAS  (Leído 388 veces)
rickrick

Desconectado Desconectado

Mensajes: 6


Ver Perfil
programacion c++ CAMBIO DE MONEDAS
« en: 09 Junio 2008, 18:16 »

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 Desconectado

Mensajes: 4.262



Ver Perfil
Re: programacion c++ CAMBIO DE MONEDAS
« Respuesta #1 en: 09 Junio 2008, 18:35 »

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

Se busca gato.
ҒrεακΠιи∂

Desconectado Desconectado

Mensajes: 105



Ver Perfil
Re: programacion c++ CAMBIO DE MONEDAS
« Respuesta #2 en: 09 Junio 2008, 22:41 »

Buenas

Código
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 Desconectado

Mensajes: 317



Ver Perfil
Re: programacion c++ CAMBIO DE MONEDAS
« Respuesta #3 en: 10 Junio 2008, 01:51 »

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.
Código
#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 Desconectado

Mensajes: 6


Ver Perfil
Re: programacion c++ CAMBIO DE MONEDAS
« Respuesta #4 en: 10 Junio 2008, 20:02 »

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 Desconectado

Mensajes: 317



Ver Perfil
Re: programacion c++ CAMBIO DE MONEDAS
« Respuesta #5 en: 10 Junio 2008, 20:58 »

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.
Código
#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 Desconectado

Mensajes: 6


Ver Perfil
Re: programacion c++ CAMBIO DE MONEDAS
« Respuesta #6 en: 11 Junio 2008, 06:26 »

muchas gracias amigo por tus consejos la neta me sirven mucho
En línea
newtonton

Desconectado Desconectado

Mensajes: 19


Ver Perfil
Re: programacion c++ CAMBIO DE MONEDAS
« Respuesta #7 en: 13 Junio 2008, 15:42 »

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] Ir Arriba Imprimir 
Ir a:  







Consolas     La Web de Goku     MilW0rm     MundoDivx

Hispabyte     Truzone     TodoReviews     ZonaPhotoshop

hard-h2o modding    Foros de ayuda    Yashira.org    Videojuegos    indetectables.net   

Noticias Informatica    Seguridad Informática    ADSL    Foros en español    eNYe Sec

Todas las webs afiliadas están libres de publicidad engañosa.

Powered by SMF 1.1.5 | SMF © 2006-2008, Simple Machines LLC