Einzelnen Beitrag anzeigen

Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
941 Beiträge
 
Delphi XE2 Professional
 
#7

Re: Problem mit aneinandergereihten while-Schleifen

  Alt 6. Nov 2008, 08:41
Hallo Giertier,

du solltest, wie schon in einem vorhergehenden Beitrag vorgeschlagen, den Betrag in Cent umrechnen und in eine Integer-Variable stellen.
Als Optimierung kannst du, statt in While-Schleifen den Betrag um den Wert einer Banknote/Münze zu senken und x/y zu erhöhen, so vorgehen :
1) x, bzw y, um (betrag div WertDerMünze) erhöhen.
2) betrag = (betrag mod WertDerMünze) setzen.
Bei deiner Methode, kannst du bei sehr hohen Beträgen mit einem etwas höheren Zeitbedarf rechnen.

Beispiel :

Delphi-Quellcode:
PROCEDURE TMain.Test;
const
   cnotes:array[0..6] of integer=(5,10,20,50,100,200,500);
   ccoins:array[0..7] of integer=(1,2,5,10,20,50,100,200);
var
   i,amount,coins,notes:integer;
FUNCTION DivMod(var value:integer; divisor:integer):integer;
begin
   result:=value div divisor;
   value:=value mod divisor;
end;
begin
   amount:=Trunc(StrToFloat(edit1.text)+0.5);
   coins:=0;
   notes:=0;
   for i:=high(cnotes) downto 0 do inc(notes,DivMod(amount,cnotes[i]*100));
   for i:=high(ccoins) downto 0 do inc(coins,DivMod(amount,ccoins[i]));
   edit2.text:=IntToStr(notes);
   edit3.text:=IntToStr(coins);
end;
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat