estudiante!!
necesito el lenguaje c de un programa para una caja de supermercado que lea un precio desde el teclado y una cantidad entregada por el cliente (se supone que cantidad >=precio) y obtenga en la pantalla numero minimo de monedas de 1 euro, 50 centimos, 10 centimos y 1 centimo que se debe dar de cambio. Por ejemplo, si precio es 1.12 euros y cantidad es 5 euros, debe dar como resultado 3 monedas de 1 euro, 1 moneda de 50 centimos, 10 monedas de 3 centimos y 8 monedas de 1 centimo.
No te voy a dar todo el código fuente, pero la forma de plantearlo es ésta:
Si suponemos que tienes un número de monedas infinito guiño (no es tan raro, es lo que se suele considerar si es el primer ejercicio que haces de este tipo), basta con que tomes cada vez la moneda de mayor valor que puedas:
Si el precio es $0,30 y se paga con $2:
Falta por pagar: 2-0,30 = 1,70
Mayor moneda/billete que es inferior a 1,70 -> $1, cantidad: 1,70 / 1 = 1
Falta por pagar: 1,70 - 1 = 0,70
Mayor moneda/billete que es inferior a 0,70 -> $0,50, cantidad: 0,70 / 0,50 = 1
Falta por pagar: 0,70 - 0,50 = 0,20
Mayor moneda/billete que es inferior a 0,20 -> $0,10, cantidad: 0,20 / 0,10 = 0
Falta por pagar: 0,20 - 0,20 = 0
Terminado
Si el número de monedas no fuera infinito, la situación se complica, porque hay que probar todas las posibilidades válidas hasta que una solucione el problema (es la técnica que se conoce como "backtracking"). Por ejemplo, si sólo tuvieras una moneda de $0,10, no podrÃas completar los $0,20 con ellas y deberÃas seguir probando con $0,05, y asà sucesivamente.
(Lo acaban de preguntar aquÃ:
http://www.aprendeaprogramar.com/mod/forum/discuss.php?d=170#871
Si suponemos que tienes un número de monedas infinito guiño (no es tan raro, es lo que se suele considerar si es el primer ejercicio que haces de este tipo), basta con que tomes cada vez la moneda de mayor valor que puedas:
Si el precio es $0,30 y se paga con $2:
Falta por pagar: 2-0,30 = 1,70
Mayor moneda/billete que es inferior a 1,70 -> $1, cantidad: 1,70 / 1 = 1
Falta por pagar: 1,70 - 1 = 0,70
Mayor moneda/billete que es inferior a 0,70 -> $0,50, cantidad: 0,70 / 0,50 = 1
Falta por pagar: 0,70 - 0,50 = 0,20
Mayor moneda/billete que es inferior a 0,20 -> $0,10, cantidad: 0,20 / 0,10 = 0
Falta por pagar: 0,20 - 0,20 = 0
Terminado
Si el número de monedas no fuera infinito, la situación se complica, porque hay que probar todas las posibilidades válidas hasta que una solucione el problema (es la técnica que se conoce como "backtracking"). Por ejemplo, si sólo tuvieras una moneda de $0,10, no podrÃas completar los $0,20 con ellas y deberÃas seguir probando con $0,05, y asà sucesivamente.
(Lo acaban de preguntar aquÃ:
http://www.aprendeaprogramar.com/mod/forum/discuss.php?d=170#871
