Autor Beitrag
Paulchengb
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 39



BeitragVerfasst: Mo 12.03.07 21:28 
Hallo,
ich habe hier mal folgende repeat-until Schleife gemacht

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 735
Erhaltene Danke: 6

Windows 7
Delphi7 - Delphi XE
BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 735
Erhaltene Danke: 6

Windows 7
Delphi7 - Delphi XE
BeitragVerfasst: Mo 12.03.07 22:11 
user profile iconChristian 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 39



BeitragVerfasst: Mo 12.03.07 22:54 
Hi,
also jetzt schaut es so aus

ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 676

Win XP Professional
Delphi 7 PE, Delphi 3 PRO
BeitragVerfasst: 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

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 39



BeitragVerfasst: 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
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: 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)