Guten Abend
Ich bin gerade dabei, einen kleinen Automaten zu schreiben.
Es läuft ganz gut, bis auf den Wechselgeld-"Auswurf".
Hier der Code für den Button mit Aufschrift "bezahlen".
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43:
| procedure TForm1.Button1Click(Sender: TObject); var i50er: integer; i100er: integer; i20er: integer; i10er: integer; zahl: extended; begin i50er:= 0; i100er:= 0; i20er:= 0; i10er := 0; zahl:= 0.00; zahl := StrToFloat(Label8.Caption); if zahl < 0 then begin zahl := zahl * -1; while zahl > 0.00 do begin if zahl >= 1 then begin i100er := i100er + 1; zahl := zahl - 1.00; end else if zahl >= 0.50 then begin i50er := i50er +1; zahl := zahl - 0.50; end else if (zahl >= 0.20) and (zahl < 0.50) then begin i20er := i20er + 1; zahl := zahl - 0.20; end else if (zahl >= 0.10) and (zahl < 0.20) and (zahl < 0.50) then begin i10er := i10er + 1; zahl := zahl - 0.10; end; end; ShowMessage('Rückgeld: ' + #13 + #10 + IntTOStr(i100er) + ' 1€-Stück(e)' + #13 + #10 + IntToStr(i50er) + ' 50c-Stück(e)' + #13 + #10 + IntToStr(i20er) + ' 20c-Stück(e)' + #13 + #10 + IntToStr(i10er) + ' 10c-Stück(e)'); end; end; |
Zum Problem:
Manchmal rattert er einfach durch und gibt mir auch das gewünschte Ergebnis aus und manchmal wiederrum
bleibt das Programm einfach hängen. Per Debugger habe ich herausgefunden, dass es bei einem Wert von "0,1" nicht in die 10c-Schleife eintaucht.
Ich hab keinerlei Ideen mehr und weiß auch nicht, wo anzufangen ist, da ich es mir nicht erklären kann.
Deshalb frage ich hier und hoffe auf kompetente Hilfe.
Vielen Dank für die Aufmerksamkeit und einen schönen Abend,
Anton