Wo liegt der Fehler? Zinsrechner

Hallo Community. In der Schule und zu Hause beginnen wir/ich gerade die Programierung in Delphi.

Nun habe ich versucht eine Aufgabe aus der Schule zu Hause nach zu bauen: einen Zinsrechner.
Aber irgendwie haut das bei mir nicht hin.

_________________________________________________________________

procedure TForm1.Button1Click(Sender: TObject);
var i, l :integer; s, z :real;

begin
s := strtofloat (edit1.text);
z := strtofloat (edit2.Text);
z := z/100+1;
l := strtoint (edit3.text);

for i := 1 to l do;

begin

s := s*z;

end;

edit4.text := floattostr (s);

end;

end.

_________________________________________________________________

Hier mal die Proramzeilen. l --> Laufzeit; s --> Startkapital; z --> Zinsen und i --> Ja wofĂĽr steht das eigentlich???

Nun zu meinem Problem: Das Program startet korrekt und rechnent auch. Jedoch ohne dabei die Laufzeit (zur Erinnerung --> l) zu berĂĽcksichtigen.
Wo liegt mein Fehler?

GrĂĽĂźe und besten Dank
Florian

Hallo Florian,

es ist das „;“ hinter „do“. Es macht die for-do-Schleife zu einer Leerschleife. Die Zeile „s := s*z;“ wird dadurch nur einmal statt wie gewünscht l mal ausgeführt, weil sie logisch außerhalb der Schleife steht. Entferne dieses „;“ und alles wird funzen. Ist übrigens ein beliebter Anfängerfehler, also nicht ärgern… :wink:

edit4.text := floattostr (s);

Du könntest auch ein Memo aufs Formular setzen und es mit

Memo1.Lines.Add(floattostr(s));

oder auch

Memo1.Lines.Add(inttostr(i)+’ '+floattostr(s));

fĂĽllen. Dann bekommst Du eine nette Wertetabelle.

GruĂź
Martin

PS: Dieselbe Gefahr lautert auch bei IF-THEN: Niemals hinter „then“ ein „;“ schreiben!

Vielen Dank fĂĽr die Antwort. Fehler ist bereits behoben =)

es ist das „;“ hinter „do“. Es macht die for-do-Schleife zu
einer Leerschleife.

omg, da sucht man eine halbe Ewigkeit nach dem Fehler und geht alle Programzeilen von Anfang bis Ende mehrmals durch und dann ist es so ein kleines Semikolon xD

Ist übrigens ein beliebter Anfängerfehler, also
nicht ärgern… :wink:

Ok

Memo1.Lines.Add(floattostr(s));
Memo1.Lines.Add(inttostr(i)+’ '+floattostr(s));

Das mit dem Memo ist eine nette Idee. Einfach übernehmen fände ich aber doof, ohne es zu verstehen. Kannst du mir das bitte noch erklären? Also ich meine ist „Lines“ das, was beim Label „Caption“ ist? Was sagt „add“ aus (Englisch müsste es hinzufügen heißen)? Und beim zweiten Memo-Beispiel warum das +’ '+ ???

GruĂź
Florian

Hallo Florian,

Memo1.Lines.Add(floattostr(s));
Memo1.Lines.Add(inttostr(i)+’ '+floattostr(s));

Das mit dem Memo ist eine nette Idee. Einfach übernehmen fände
ich aber doof, ohne es zu verstehen.

Gut!

…ich meine ist „Lines“ das, was beim Label
„Caption“ ist?

Jein.
Ein Memo hat mehrere Zeilen. „Lines“ sind diese. (TString)

Was sagt „add“ aus (Englisch müsste es
hinzufĂĽgen heiĂźen)?

Ja. „Add“ fügt eine Zeile hinzu, mit dem Inhalt, der in der Kammer angegeben ist.

Und beim zweiten Memo-Beispiel warum das
+’ '+ ???

Nun, das solltest Du jetzt wissen …
Wenn nicht, überleg mal. (Das Zeichen zwischen den ’ ist ein Leerzeichen)

Manfred