Autor Beitrag
Stread
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 188

Win 7
Delphi XE
BeitragVerfasst: Do 15.01.09 19:36 
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.

ausblenden volle Höhe 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1448
Erhaltene Danke: 3

W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
BeitragVerfasst: Do 15.01.09 19:50 
versuchs mal mit
ausblenden Delphi-Quelltext
1:
 until ZuGeld <= 0;					

:-)msch

_________________
ist das politisch, wenn ich linksdrehenden Joghurt haben möchte?
Stread Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 188

Win 7
Delphi XE
BeitragVerfasst: Do 15.01.09 20:04 
Nein, das wars leider nicht.
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Do 15.01.09 20:29 
begin und end nach else wäre vielleicht nicht schlecht ;-)

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
Stread Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 188

Win 7
Delphi XE
BeitragVerfasst: Do 15.01.09 20:35 
so?
ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Do 15.01.09 20:35 
Ich hab mal die Repeat-Schleife zusammengefasst:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 188

Win 7
Delphi XE
BeitragVerfasst: 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
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: 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.

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
Stread Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 188

Win 7
Delphi XE
BeitragVerfasst: 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
ausblenden Delphi-Quelltext
1:
ZuZgeld:= (ZuZGeld + ZuzGeld*Prozentsatz / 100) - mRate;