[ Foro de Pascal ]

Dudas sobre un ejercicio...ayuda por favor!

27-Oct-2007 22:57
Alejandra Montes de Oca
2 Respuestas

Estoy realizando el profesorado en Informática y en la materia de Resolución de problemas y algoritmo me dieron varios problemas que realizar en Pascal (son 8), de los cuales solo uno no puedo darme cuenta en como resolverlo. Les paso el enunciado:

Problema:

Suponiendo que el precio de cualquier artículo que se vende en un negocio es inferior o igual a $ 1 y que se abona con un billete de $ 2, diseñar un algoritmo para leer el precio de los artículos vendidos y calcular el número de cada clase de moneda que debe darse a cambio, de tal manera que se devuelva un mínimo de monedas fraccionarias. Por ejemplo, si el precio de venta es de $ 0,30, el cambio debe ser:

Una moneda de $ 1.

Una moneda de 50 centavos.

Dos monedas de 10 centavos.

Si bien cunado terminen de leer el enunciado a muchos de ustedes les resultará fácil, yo no me doy cuenta como dar el vuelto con el mínimo de monedas fraccionadas. Soy de argentina, y los valores de las monedas son los siguientes:

* En billetes de mayor a menor valor son:
$ 100, $ 50, $20, $ 10, $ 5, $2 y $ 1

* En monedas de mayor a menor valor son:
$ 1, $ 0,50, $ 0,25, $ 0,10 y $ 0,05

Desde ya les agradezco a cualquiera que haya leído este mensaje y me haya dado una mano. saludos a todos, y gracias nuevamente.

30-Oct-2007 22:23
Nacho Cabanes (+31)

Si suponemos que tienes un número de monedas infinito ;-) (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.


31-Oct-2007 00:03
Alejandra Montes de Oca

Nacho: Muchísimas gracias por la punta que me tirás, la verdad es que de tantos ejercicios que tuve que realizar llegué un momento que me enredé solita y no podía salir y ni siquiera hacer nada. Entendí todo lo que sugerís, ya me pongo a hacerlo. Gracias otra vez. Saludos






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)