Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Schleife sofort abbrechen?


Stoffel1984 - Do 11.12.03 11:14
Titel: Schleife sofort abbrechen?
Hallo,

ich möchte gerne wissen ob es möglich ist eine Schleife direkt nach dem eintreffen des Abbruchereignisses abzubrechen? Also nicht erst am Schleifenende bzw Anfang sondern sofort.

Momentan mache ich das so


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
repeat
  i := i+15;
  Abbrechen;
  divAnweisung
  divAnweisung
  i := i+25;
  Abbrechen;
until


Ich führ halt nach jedem Wechsel der Variable die procedure Abbrechen aus. Kann ich das nicht irgendwie anders lösen? Die Schleife ist in Wirklichkeit ca. 120 Zeilen lang.

Habt Ihr nen Rat?

Stoffel


smiegel - Do 11.12.03 11:33

Hallo,

mit Break kannst Du normalerweise jede Schleife sofort beenden.


Delphi-Quelltext
1:
2:
3:
4:
5:
for i:=0 to 100 do
begin
  if (i=25then Break
    else ...
end// for i


Stoffel1984 - Do 11.12.03 11:36

hallo,

ja das ist klar. Aber dazu muss das break ja an einer bestimmten Stelle der Schleife stehn und es dann überprüfen. Ich möchte allerdings das es sobald dieser Fall Eintritt also z.b. i =1000 sofort rauspringt. Praktisch ein globaler break. Verstehst was ich mein?


smiegel - Do 11.12.03 11:43

Hallo,

Stoffel1984 hat folgendes geschrieben:

Verstehst was ich mein?


erhrlich gesagt, Nein.


Andi1982 - Do 11.12.03 11:50

Ich versteh auch nicht wirklich was du meinst. Wie brichst du denn in der Funktion "Abbrechen" ab?? setzt du da ein merkmal dass das Until dann erkennt dass schluss sein soll oder was??

Mach doch einfach mitten rein die Abrage "If i=1000 then break;" Musst du halt nach jedem verändern von i machen... Aber sowas wie "whenever I >= 1000" gibts in Delphi glaube ich nicht...


Stoffel1984 - Do 11.12.03 13:09

Andi1982 hat folgendes geschrieben:
Aber sowas wie "whenever I >= 1000" gibts in Delphi glaube ich nicht...


...schade sowas hab ich gesucht!

okay dann halt nach jedem verändern von i überprüfen.

Danke trotzdem!

Stoffel


JoelH - Fr 12.12.03 10:01
Titel: hmm,
Stoffel1984 hat folgendes geschrieben:
...
okay dann halt nach jedem verändern von i überprüfen.
...

Stoffel


mal ne Frage, was denkst du wie es der Rechner machen würde wenn du die Möglichkeit zu einen 'whenever....' hättest ? Dein Programm würde langsamer werden denn der Rechner muss so oder so nach jeder erhöhung abfragen ob deine Bedingung erfüllt ist, denn ein Hellseher ist er auch nicht. Aber bei einem Whenever müsste er wohl einen extra Thread rennen lassen oder jeweils einen Sprung mehr machen als wenn du die Abfrage direkt programmierst.

Programmierer sind zwar faul aber so faul ?


Andi1982 - Fr 12.12.03 10:05

Eben, die Programme würden dadurch wirklich sehr langsam werden. Ich kenne whenever nur von SQLs, da ist es noch in ordnung. Aber in einem normalen Programm würde er dann nach jeder instruktion eine if abfrage machen ob i sich verändert hat. Bei sql macht er es halt nur nach jedem SQL, da gehts wie gesagt noch...


Stoffel1984 - Fr 12.12.03 11:07

ist mir schon klar... jetzt zumindest! :roll:
Danke nochmal...


Wolff68 - Sa 20.12.03 12:17

Andi1982 hat folgendes geschrieben:
Aber sowas wie "whenever I >= 1000" gibts in Delphi glaube ich nicht...

Ausser man definiert I über einen Zahlentyp der nicht größer als 1000 werden kann und schaltet die Bereichsprüfung ein.


Delphi-Quelltext
1:
2:
3:
4:
5:
type tiLimited = 0..1000;

var i : tiLimited;

{$R+} //Um die Bereichsprüfung zu aktivieren


Aber ich wage mal zu bezweifeln, daß Stoffel das Problem mit dem Auslösen von Exceptions lösen wollte... ... ...