Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Endlose repeat schleife
Stread - Do 15.01.09 19:36
Titel: Endlose repeat schleife
Ich bin gerade an einem Projekt zur Kreditberechnng dran. Sprich: Man gibt eine Kreditsumme einen Prozentsatz und eine Monatliche Rate ein und das Projekt sagt einem dann nach wieviel Jahren man den Kredit abgezahlt hat.
Delphi-Quelltext
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:
| var Form12: TForm12; Kreditsumme, Prozentsatz, mRate, ProzentGeld, Jahr, ZuZGeld : Double;
implementation
{$R *.dfm}
procedure TForm12.Button1Click(Sender: TObject); begin Kreditsumme:= StrToFloat(Edit1.Text); Prozentsatz:= StrToFloat(Edit2.Text); mRate:= StrToFloat(Edit3.Text);
mRate:= mRate*12; ProzentGeld:= (Kreditsumme*Prozentsatz)/100; if mRate < Prozentgeld then begin showmessage('Die Monatliche Rate ist zu klein'); end else Jahr:=0; repeat Jahr:= Jahr+1; Label15.Caption:=FloatToStr(Jahr); ZuZgeld:= (Kreditsumme+Prozentgeld)-mRate; Prozentgeld:= (ZuzGeld*Prozentsatz)/100; Label17.Caption:= FloatToStr(ZuZGeld); until ZuZGeld=0; if ZuZgeld = 0 then showmessage('Abgezahlt'); end;
end. |
Die erste Showmessage kommt noch wenn die Bedingung erfüllt ist, aber die zweite bekomme ich nie zu Gesicht.
Mir scheint es als ob die Schleife nie aufhört.
Ich weiß dass die Darstellung nicht gut ist aber ich will erst dass das programm auch so läuft.
Danke
MSCH - Do 15.01.09 19:50
versuchs mal mit
:-)msch
Stread - Do 15.01.09 20:04
Nein, das wars leider nicht.
GTA-Place - Do 15.01.09 20:29
begin und end nach else wäre vielleicht nicht schlecht ;-)
Stread - Do 15.01.09 20:35
so?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| repeat begin Jahr:= Jahr+1; Label15.Caption:=FloatToStr(Jahr); ZuZgeld:= (Kreditsumme+Prozentgeld)-mRate; Prozentgeld:= (ZuzGeld*Prozentsatz)/100; Label17.Caption:= FloatToStr(ZuZGeld); end; until ZuZGeld<=0; |
Aber ich dachte immer bei einer Repeat Schleife gibt es kein begin und end?
Die Rechnung stimmt, dass habe ich gerade mit if then überprüft.
Marc. - Do 15.01.09 20:35
Ich hab mal die Repeat-Schleife zusammengefasst:
Delphi-Quelltext
1: 2: 3: 4:
| repeat Jahr:= Jahr+1; ZuZgeld:= (Kreditsumme + ZuzGeld*Prozentsatz / 100) - mRate; until ZuZGeld <= 0; |
Wie soll das denn gegen Null gehen? Der Wert von Zuzgeld geht maximal gegen Kreditsumme-mRate, wenn Kreditsumme > mRate.
Ansonsten ist bereits nach dem ersten Durchlauf Schluss, vorrausgesetzt der Prozentsatz ist niedrig. :?
€: Weshalb finden sich die Änderungen der Labelcaption in der Repeat-Schleife? So schnell kann wirklich keiner mitlesen. :lol:
Außerdem brauchst du bei der Repeat-Schleife kein
begin und
end.
Stread - Do 15.01.09 21:43
Hast du, oder jemamd anderes, denn eine Idee wie es funktioniert?
Was muss ich denn anderst machen dass es 0 wird?
Jetzt hat GTA-Place noch geschrieben dass es nur nach else so ist.
Ich nehme mal an so
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| else begin Jahr:=0; repeat Jahr:= Jahr+1; Label15.Caption:=FloatToStr(Jahr); ZuZgeld:= (Kreditsumme+Prozentgeld)-mRate; Prozentgeld:= (ZuzGeld*Prozentsatz)/100; Label17.Caption:= FloatToStr(ZuZGeld); until ZuZGeld<=0; if ZuZgeld <= 0 then showmessage('Abgezahlt'); end; end; |
Ich will dass die Ergebnisse untereinander im Label stehen. Werde ich noch #13 einfügen.
GTA-Place - Do 15.01.09 21:46
Ja, das löst zwar noch nicht die Endlosschleife. Ich gehe aber davon aus, dass die Schleife eben nur dann aufgerufen werden soll, wenn mRate > Prozentgeld ist. Sonst würde das Programm trotzdem weitermachen.
Stread - Do 15.01.09 22:03
Ja das stimmt. Das Problem hätten wir also schonmal gelöst. :D
Edit: Wenns interessiert: Der richige Code lautet
Delphi-Quelltext
1:
| ZuZgeld:= (ZuZGeld + ZuzGeld*Prozentsatz / 100) - mRate; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!