Autor Beitrag
Ottchen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 43



BeitragVerfasst: Do 14.11.02 22:32 
Hallo Liste!

Ich möchte mein "Sparprogramm", in dem der Anfangsbetrag und der Zinssatz eingelesen wird, mit der repeat-until-Schleife realisieren. Mit der For-To-Do-Schleife klappt es prima.

Die Bedingung bei der Repeat-Until-Schleife soll folgende sein:
Es sollen z.B. 1000 Euro bei einem Zinssatz von 5% eingelesen werden. Frage: Nach wie viel Jahren hat sich der Anfangsbetrag verdoppelt?
Ich weiß nicht, wie ich die Austrittsbedingung schaffen soll? :(

Kann mir jmd. helfen?

Daaaaaaaaanke!!! Ottchen

Hier mein Quelltext:


ausblenden 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:
procedure TForm1.Rechne1Click(Sender: TObject);
var  Laufzeit:integer;
      Anfang, Ende, Zinsen, Zinssatz: real;

begin

// Variante mit der repeat-until-Schleife
//Nach wie viel Jahren hat sich sein Kapital verdoppelt ?

  Anfang:=StrToFloat(Anlage_Edit.Text);
  Zinssatz:=StrToFloat(Zinssatz_Edit.Text);

  Laufzeit:=0;
  Ende:=Anfang*2; //kann ich doch hier noch nicht festlegen, oder?
  repeat
    if Laufzeit>5 then StringGrid1.RowCount:=Laufzeit+1; //Anpassen der     Zeilen in Abh. der Laufzeit
    StringGrid1.Cells[0,Laufzeit+1]:=IntToStr(Laufzeit);
    StringGrid1.Cells[1,Laufzeit+1]:=FloatToStrF(Anfang,ffFixed,10,2);
    Zinsen:=Anfang*Zinssatz/100;
    StringGrid1.Cells[2,Laufzeit+1]:=FloatToStrF(Zinsen,ffFixed,10,2);
    Ende:=Anfang+Zinsen;
    StringGrid1.Cells[3,Laufzeit+1]:=FloatToStrF(Ende,ffFixed,10,2);
    Anfang:=Ende;
    Laufzeit:=Laufzeit+1;
  until Anfang>=Ende;
  Laufzeit_Edit.Text:=IntToStr(Laufzeit);

end;


Lege ich die Variable Ende vor repeat fest, wird sie nicht mit einem Wert belegt.
Danke! :(

_________________
See you.
littlemike1005
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 187



BeitragVerfasst: Do 14.11.02 22:51 
ausblenden volle Höhe 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:
var  Laufzeit:integer; 
      Anfang, Ende, Zinsen, Zinssatz: real; 

begin 

// Variante mit der repeat-until-Schleife 
//Nach wie viel Jahren hat sich sein Kapital verdoppelt ? 

  Anfang:=StrToFloat(Anlage_Edit.Text); 
  Zinssatz:=StrToFloat(Zinssatz_Edit.Text); 

  Laufzeit:=0; 
  Ende:=Anfang*2; //kann ich doch hier noch nicht festlegen, oder? 
  repeat 
    if Laufzeit>5 then StringGrid1.RowCount:=Laufzeit+1; //Anpassen der     Zeilen in Abh. der Laufzeit 
    StringGrid1.Cells[0,Laufzeit+1]:=IntToStr(Laufzeit); 
    StringGrid1.Cells[1,Laufzeit+1]:=FloatToStrF(Anfang,ffFixed,10,2); 
    Zinsen:=Anfang*Zinssatz/100; 
    StringGrid1.Cells[2,Laufzeit+1]:=FloatToStrF(Zinsen,ffFixed,10,2); 
-->>  Ende:=Anfang+Zinsen;
    StringGrid1.Cells[3,Laufzeit+1]:=FloatToStrF(Ende,ffFixed,10,2); 


    Anfang:=Ende;   ----> warum dieses damit setzt du doch im ersten durchlauf doch gleich die ausgangs bedingung von anfang>=ende 


    Laufzeit:=Laufzeit+1; 
  until Anfang>=Ende; 
  Laufzeit_Edit.Text:=IntToStr(Laufzeit); 

end;

du darfst doch nicht in der repeat schleife mit der variable ende arbeiten die ist doch fest oder nicht (anfang * 2 also im beispiel 2000) oder irre ich da. du gibst in der repeat schleife der variable ende immer wieder andere werte.

fals ich was falsch verstanden habe lass es mich wissen
Raphael82
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 67



BeitragVerfasst: Do 14.11.02 23:08 
Wie gesagt, du darfst Ende in der Schleife nicht verändern, denn sonst veränderst du ja jedesmal die Abbruchbedingung. Bin zu faul deinen kompletten Quelltext zu kopieren aber hier ist mal eine "Skizze" (nicht lauffähig)
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure...
var Anfang,Ende:Real;
begin
 Anfang := StrToFloat(Edit1.Text);
 Ende := Anfang*2;
 
  repeat
   {Hier kommt dann deine Zinsberechnung rein
     dabei solltest du jedoch immer nur mit der Variable
     Anfang rechnen!}
   Anfang := Anfang + //Die Zinsen die du errechnet hast
  until Anfang >= Ende;
end;

Dies ist nur eine Struktur, ich denke die Lösung sollte jetzt jedenfalls klar sein! Hoffe geholfen zu haben, MfG, Raphael

_________________
Share your knowledge to receive perfection!
Ottchen Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 43



BeitragVerfasst: Sa 16.11.02 19:40 
Titel: Vielen Dank,...
... irgendwie hatte ich da eine "Kombinations-Denk-Lücke".
Alles klar! Ich probiere es!

Danke für die hilfreichenden Tipps!

Ottchen

_________________
See you.
Raphael82
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 67



BeitragVerfasst: So 17.11.02 14:58 
Bitte :P

_________________
Share your knowledge to receive perfection!