El problema está en saber si hay billetes suficientes o no.
Si el cajero tiene 2 Billetes de 50$, 2 Billetes de 20$, tienes en total 140$ disponibles. Si el usuario quiere 130$ no puedes suministrarlo (no te quedan billetes de 10).
Existen algoritmos para analizar estos problemas, pero son bastante complejos (redes neuronales) y a nivel de clase no son viables. Lo fácil:
- Primero compruebas que el monto que quiere el usuario es menor al disponible en el cajero.
- Intentas servir billetes grandes mientras no sobrepases el monto, y cuando no puedas, cambias a un billete menor.
Código Delphi
[-]
var n50, n20, n10:integer; begin
if Monto < (B50 * 50) + (B20 * 20) + (B10*10) then
begin
while Monto >= 50 do
begin
inc (n50);
dec(Monto, 50);
end;
While Monto >= 20 do
begin
inc(n20);
dec(Monto,20);
end;
While Monto >= 10 do
begin
inc(n10);
dec(Monto,10);
end;
if Monto > 0 then ShowMessage('error: no tengo billetes suficientes');
en "n50" tienes los billetes necesarios de 50 $, ahora tendrás que mirar en la Base de datos si tienes suficientes o no.
Hay un caso que no he tenido en cuenta y no sé si te lo pedirán. Puede que no tengas billetes de 50$, pero podrías conseguir el monto necesario si tienes muchos billetes del 20$ y de 10$. Adapta el código.
Saludos