Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - repeat-Schleife "stimmt" nicht
Paulchengb - Mo 12.03.07 21:28
Titel: repeat-Schleife "stimmt" nicht
Hallo,
ich habe hier mal folgende repeat-until Schleife gemacht
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.LabeledEdit8Change(Sender: TObject); var s1,s2:real; begin s1:=strtoint(LabeledEdit8.text);
repeat s1:=s1+1; s2:=s2+s1; until s1=20;
LabeledEdit9.text:=floattostr(s2); |
Es geht zwar, aber als Ergebnis(s2) wird bei der Eingabe von zB. 4 200 angezeigt.
Eigentlich sollte die Anzahl der Wiederholungen der Schleife, bis 20 erreicht ist, angezeigt werden.
Wo liegt der Fehler?
HelgeLange - Mo 12.03.07 21:34
initialisiere mal s2 vor der schleife mit 0, dann sollte das klappen, sehe erstmal so keinen Fehler.
Christian S. - Mo 12.03.07 21:46
Du solltest außerdem sicherstellen, dass s1 vor der Schleife nicht größer als 19 ist, sondern wird die 20 nie erreicht.
HelgeLange - Mo 12.03.07 22:11
Christian S. hat folgendes geschrieben: |
| Du solltest außerdem sicherstellen, dass s1 vor der Schleife nicht größer als 19 ist, sondern wird die 20 nie erreicht. |
[KlugscheissMode=on]
Naja, das stimmt so nicht ganz, sie wird erreicht, es dauert nur viiiieellll länger. Und dadurch, dass beide den gleichen Datentyp haben, ist der Überschlag auch der gleiche und es sollte sogar das gleiche Ergebnis kommen, oder ?
[KlugscheissMode=off]
Aber insgesamt hast Du natürlich recht, Repeat-Until ist Fusslastig und es sollte vorher überprüft werden, da die Routine mind. 1x durchlaufen wird.
Paulchengb - Mo 12.03.07 22:54
Hi,
also jetzt schaut es so aus
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.LabeledEdit8Change(Sender: TObject); var s1,s2:real; begin s1:=strtoint(LabeledEdit8.text); s2:=0; repeat s1:=s1+1; s2:=s2+s1; until s1=20;
LabeledEdit9.text:=floattostr(s2); |
Und s1 ist natürlich kleiner 20... Ich versuchs immer mit verschiedenen Zahlen. Bei 8 kommt jetzt zB. 174 raus. Scheint mir auch eher flasch zu sein :P
Christian S. - Mo 12.03.07 23:01
Ist doch richtig.
Du rechnest 9+10+11+...
Calculon - Mo 12.03.07 23:03
| Paulchengb hat folgendes geschrieben: |
| Eigentlich sollte die Anzahl der Wiederholungen der Schleife, bis 20 erreicht ist, angezeigt werden. |
Dann erhöhe
s2 innerhalb der Schleife um eins und nicht um
s1
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| var s1,s2: integer; begin s1 := strtoint(LabeledEdit8.text); s2 := 0; repeat s1 := s1 + 1; s2 := s2 + 1; until s1=20;
LabeledEdit9.text := inttostr(s2); |
Gruß
Calculon
--
[edit] Ich würde statt
real integer nehmen, da ersteres bei deiner Problemstellung keinen Sinn macht.[/edit]
Paulchengb - Mo 12.03.07 23:03
Aso, hm. Dann liegt ein Denkfehler vor.
Aber wie bekomm ich dann raus, wie oft die Schleife wiederholt wurde?
Also wenn ich 8 eingebe, dann muss 8+1+1+1+1...12-mal wiederholt werden, bis 20 erreicht ist.
EDIT: Danke Calculon, jetzt gehts :P
GTA-Place - Mo 12.03.07 23:31
Mach vor der Schleife s2 := 20 - s1, dann haste es auch.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!