Ver Mensaje Individual
  #4  
Antiguo 25-11-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 29
Lepe Va por buen camino
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 [-]
// supongo que B50 es la cantidad de Billetes de 50$ que tienes en el cajero

var n50, n20, n10:integer; // cantidad de billetes de cada clase que Necesito
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
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 25-11-2007 a las 04:15:37.
Responder Con Cita