| Autor |
Beitrag |
Paulchengb
      
Beiträge: 39
|
Verfasst: Mo 12.03.07 21:28
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
      
Beiträge: 735
Erhaltene Danke: 6
Windows 7
Delphi7 - Delphi XE
|
Verfasst: Mo 12.03.07 21:34
initialisiere mal s2 vor der schleife mit 0, dann sollte das klappen, sehe erstmal so keinen Fehler.
_________________ "Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
HelgeLange
      
Beiträge: 735
Erhaltene Danke: 6
Windows 7
Delphi7 - Delphi XE
|
Verfasst: 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.
_________________ "Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
|
|
Paulchengb 
      
Beiträge: 39
|
Verfasst: 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 
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mo 12.03.07 23:01
Ist doch richtig.
Du rechnest 9+10+11+...
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Calculon
      
Beiträge: 676
Win XP Professional
Delphi 7 PE, Delphi 3 PRO
|
Verfasst: 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]
Zuletzt bearbeitet von Calculon am Mo 12.03.07 23:08, insgesamt 2-mal bearbeitet
|
|
Paulchengb 
      
Beiträge: 39
|
Verfasst: 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 
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: Mo 12.03.07 23:31
Mach vor der Schleife s2 := 20 - s1, dann haste es auch.
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|