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;