Autor
|
Tema: Cambio en billetes y monedas en C++ (Leído 14,876 veces)
|
AxelP
Desconectado
Mensajes: 9
|
Hola, espero puedan ayudarme, tengo que devolver el cambio en billetes de 200, 100, 50, 20 y monedas de 10, 5, 2, 1 es basándome en este código (la parte importante es la subrayada), funciona bien con los billetes, pero en las monedas me da de más o de menos: int main() { int continuar, chimichanga; continuar = 0; while (continuar == 0) { printf("\nMenu: \n 1.-Paque-te pongas feliz. \n 2.-Paque-te llenes. \n 3.-Paque-te enojes"); printf("\nSelecciona tu paquete: "); scanf("%d",&chimichanga); int precio; int billetesA, sobra, billetesB, sobraB, billetesC, sobraC, billetesD, sobraD, monedaA, monedaB, sobraE, monedaC, sobraF, monedaD, sobraG; switch(chimichanga) { case 1: precio=100; printf("Elegiste el paquete %d, su precio es de %d este incluye: ",chimichanga, precio); printf("\n Chocolate caliente. \n 3 churros. \n 5 tacos."); break; case 2: precio=80; printf("Elegiste el paquete %d, su precio es de %d este incluye: ",chimichanga, precio); printf("\n Cafe \n Concha \n Torta"); break; case 3: precio=40; printf("Elegiste el paquete %d, su precio es de %d este incluye: ",chimichanga, precio); printf("\n Agua. \n Bolillo. \n Chayote."); break; default: printf("Escoge un paquete valido."); }; int pago, cambio; printf("\n indica con cuanto vas a pagar: "); scanf("%d", &pago); [u] if (pago>=precio) { cambio=pago-precio; printf("\n su cambio es de: %d", cambio); billetesA=cambio/200; printf("\n %d billetes de 200", billetesA); sobra=cambio%200; billetesB=sobra/100; printf("\n %d billetes de 100", billetesB); sobraB=cambio%100; billetesC=sobraB/50; printf("\n %d billetes de 50", billetesC); sobraC=cambio%50; billetesD=sobraC/20; printf("\n %d billetes de 20", billetesD); sobraD=cambio%20; monedaA=sobraD/10; printf("\n %d monedas de 10", monedaA); sobraE=cambio%10; monedaB=sobraE/5; printf("\n %d monedas de 5", monedaB); sobraF=cambio%5; monedaC=sobraF/2; printf("\n %d monedas de 2", monedaC); sobraG=cambio%1; monedaD=sobraG/1; printf("\n %d monedad de 1", monedaD); [/u] } else { printf("\n pague lo que se indica."); }; printf("\nQuieres escoger algun otro paquete? Presiona 0 si tu respuesta es si y 1 si es no: "); scanf("%d", &continuar); system("cls"); }; getch(); }
|
|
|
En línea
|
|
|
|
Caster
|
Antes de nada, el código que posteas es C, no C++. No puedo compilar tu código ahora mismo y no estoy acostumbrado a depurarlo así a ojo, pero si por ejemplo elijo el paquete 2, el cual cuesta 80 y pago 100 ppr ejemplo, el cambio seria 20, hasta ahí bien, pero cuando calculas los billetes de 200 no tiene sentido porque no llega a 200 lo que tienes que devolver, la operación es 20/200 lo cual da como resultado 0.1, que es un decimal y las variables con las que trabaja el programa son de tipo entero, así que si no me equivoque hasta ahora, ahí debería de dar error.
Un saludo
|
|
|
En línea
|
|
|
|
eferion
Desconectado
Mensajes: 1.248
|
No tiene sentido que uses tantas variables... las variables se pueden reutilizar, sobretodo si los resultados que almacenan son temporales y si no cambia el concepto del dato que estás almacenando en dicha variable. No te hace falta tener sobraA, sobraB, sobraC, .... puedes reutilizar "sobra". sobraG=cambio%1; monedaD=sobraG/1;
Cualquier número módulo 1 da como resultado 0... la razón es que cualquier número es divisible entre 1 y la división es exacta, por lo que el módulo SIEMPRE es cero. Además, siguiendo la secuencia de tu algoritmo, ese %1 debería ser un %2, ya que el módulo se supone que lo estás calculando sobre el valor de la moneda o billtete anterior, que en este caso es 2, no 1. Además X / 1 = X SIEMPRE también, por lo que puedes ahorrarte también la división. la operación es 20/200 lo cual da como resultado 0.1, que es un decimal y las variables con las que trabaja el programa son de tipo entero, así que si no me equivoque hasta ahora, ahí debería de dar error. Eso no da error. Si tu haces int resultado = 20/200;
resultado acaba almacenando el valor 0, la parte decimal se ignora al tratarse de números enteros.
|
|
« Última modificación: 2 Octubre 2014, 00:08 am por eferion »
|
En línea
|
|
|
|
AxelP
Desconectado
Mensajes: 9
|
Caster si,pero qué pasa si pago con un 780? Te lo agradezco. eferion, tienes razón, no me había dado cuenta de eso, y la división la puse solo para evitarme cualquier posible error. Muchas gracias a ambos, intentare para ver si puedo resolverlo.
Ya corregí eso y sigue sin salir, no se que esté mal.
|
|
« Última modificación: 2 Octubre 2014, 00:47 am por Eternal Idol »
|
En línea
|
|
|
|
milx86
Desconectado
Mensajes: 42
|
#include <stdio.h> int main() { int continuar, chimichanga; continuar = 0; while (continuar == 0) { printf("\nMenu: \n 1.-Paque-te pongas feliz. \n 2.-Paque-te llenes. \n 3.-Paque-te enojes"); printf("\nSelecciona tu paquete: "); scanf("%d",&chimichanga ); int precio; int billetes, sobra, moneda; switch(chimichanga) { case 1: precio=100; printf("Elegiste el paquete %d, su precio es de %d este incluye: ",chimichanga , precio ); printf("\n Chocolate caliente. \n 3 churros. \n 5 tacos."); break; case 2: precio=80; printf("Elegiste el paquete %d, su precio es de %d este incluye: ",chimichanga , precio ); printf("\n Cafe \n Concha \n Torta"); break; case 3: precio=40; printf("Elegiste el paquete %d, su precio es de %d este incluye: ",chimichanga , precio ); printf("\n Agua. \n Bolillo. \n Chayote."); break; default: printf("Escoge un paquete valido."); }; int pago, cambio; printf("\n indica con cuanto vas a pagar: "); if (pago>=precio) { cambio=pago-precio; printf("\n su cambio es de: %d", cambio ); billetes= (int) cambio/200; printf("\n %d billetes de 200", billetes ); sobra=(int) cambio%200; billetes=(int) sobra/100; printf("\n %d billetes de 100", billetes ); sobra=(int) sobra%100; billetes=(int) sobra/50; printf("\n %d billetes de 50", billetes ); sobra=(int) sobra%50; billetes=(int) sobra/20; printf("\n %d billetes de 20", billetes ); sobra=(int) sobra%20; moneda=(int) sobra/10; printf("\n %d monedas de 10", moneda ); sobra=(int) sobra%10; moneda=(int) sobra/5; printf("\n %d monedas de 5", moneda ); sobra=(int) sobra%5; moneda=(int) sobra/2; printf("\n %d monedas de 2", moneda ); sobra=(int) sobra%2; printf("\n %d monedad de 1", sobra ); } else { printf("\n pague lo que se indica."); }; printf("\nQuieres escoger algun otro paquete? Presiona 0 si tu respuesta es si y 1 si es no: "); }; }
En lugar de billetes=(int) sobra/100; printf("\n %d billetes de 100", billetes ); sobra=(int) cambio%100;
Debería ser billetes=(int) sobra/100; printf("\n %d billetes de 100", billetes ); sobra=(int) sobra%100;
Y asi para los que siguen, en la primera si debes usar cambio, pero en las que siguen me parece que no. Saludos
|
|
« Última modificación: 2 Octubre 2014, 00:48 am por free_c0de »
|
En línea
|
La abstracción es la clave para lidiar con la complejidad.
|
|
|
Caster
|
Eso no da error. Si tu haces int resultado = 20/200;
resultado acaba almacenando el valor 0, la parte decimal se ignora al tratarse de números enteros. Eso lo pensé, pero ya despues de haber posteado. Un saludo
|
|
|
En línea
|
|
|
|
eferion
Desconectado
Mensajes: 1.248
|
En lugar de billetes=(int) sobra/100; printf("\n %d billetes de 100", billetes ); sobra=(int) cambio%100;
Debería ser billetes=(int) sobra/100; printf("\n %d billetes de 100", billetes ); sobra=(int) sobra%100;
No hace falta hacerlo así. Te lo demuestro: supón un cambio de 265. esto son un billete de 200, uno de 50, una moneda de 10 y otra de 5 cambio = 265 billetesA = 265 / 200 = 1 <-- 1 de 200 sobra = 265 % 200 = 65 billetesB = 65 / 100 = 0 <-- 0 de 100 sobraB = 265 % 100 = 65 billetesC = 65 / 50 = 1 <-- 1 de 50 sobraC = 265 % 50 = 15 billetesD = 15 / 20 = 0 <-- 0 de 20 sobraD = 265 % 20 = 15 monedaA= 15/10 = 1 <-- 1 de 10 sobraE = 265 % 10 = 5 monedaB = 5 / 5 = 1 <-- 1 de 5 sobraF = 265 % 5 = 0 monedaC = 0 / 2 = 0 <-- 0 de 2 sobraG = 265 % 2 = 0 monedaD = 0 / 1 = 0 <-- 0 de 1
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
tengo que devolver el cambio en billetes de 200, 100, 50, 20 y monedas de 10, 5, 2, 1 es basándome en este código Los pasos del algoritmo ya te los explicaron de una forma satisfactoria, en cuanto a la implementación esta deja que desear ya que deberías utilizar arrays y un bucle para acortar el código fuente. Ejemplos de ello existen en la base de datos de los foros, solo tienes que utilizar el motor de busqueda. Y una alternativa a realizar las operaciones de división y modulo directamente es utilizar la función div y el tipo div_t (el encabezado es <stdlib.h>): #include <stdio.h> #include <stdlib.h> int main(void) { int den[] = {200, 100, 50, 20, 10, 5, 2, 1}; char *tipo[] = {"Billetes", " Monedas"}; int i = 0; div_t r = {0, 388}; do { if (r.quot != 0) printf("%s de %3d: %d\n", tipo [i / 4], den [i ], r. quot); i++; }while (r.rem != 0); return EXIT_SUCCESS; }
Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Hacer Billetes
Diseño Gráfico
|
@ZeRo~bLuE@
|
8
|
22,749
|
15 Agosto 2006, 07:40 am
por marlon_agz
|
|
|
[python] Calcular billetes
« 1 2 »
Python
|
Meta
|
11
|
31,358
|
11 Junio 2019, 11:28 am
por CIUDADANO Z
|
|
|
Ejercicio de monedas
Programación C/C++
|
spf9
|
3
|
2,688
|
9 Enero 2015, 04:09 am
por rir3760
|
|
|
Tutorial de desglose o registro de billetes
Java
|
jelsir
|
2
|
2,696
|
28 Septiembre 2015, 19:28 pm
por engel lex
|
|
|
Problema de Cambio de monedas
Java
|
GAticoxx
|
0
|
3,195
|
4 Noviembre 2017, 04:09 am
por GAticoxx
|
|