Autor Beitrag
Stoffel1984
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 219

Win NT, Win 2000
D6 Prof
BeitragVerfasst: Do 11.12.03 11:14 
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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 992
Erhaltene Danke: 1

WIN 7
D7 Prof., C#, RAD XE Prof.
BeitragVerfasst: Do 11.12.03 11:33 
Hallo,

mit Break kannst Du normalerweise jede Schleife sofort beenden.

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

_________________
Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
Stoffel1984 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 219

Win NT, Win 2000
D6 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 992
Erhaltene Danke: 1

WIN 7
D7 Prof., C#, RAD XE Prof.
BeitragVerfasst: Do 11.12.03 11:43 
Hallo,

Stoffel1984 hat folgendes geschrieben:

Verstehst was ich mein?


erhrlich gesagt, Nein.

_________________
Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
Andi1982
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 497

WinXP HE
D6 Enterprise
BeitragVerfasst: 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...

_________________
Solange die Bombe tickt ist alles in Ordnung, erst wenn sie damit aufhört wird es problematisch...
Stoffel1984 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 219

Win NT, Win 2000
D6 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 806
Erhaltene Danke: 17

Win10
Delphi Alexandria 11.2 Patch 1
BeitragVerfasst: 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 ?

_________________
mfg. Joel
Andi1982
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 497

WinXP HE
D6 Enterprise
BeitragVerfasst: 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...

_________________
Solange die Bombe tickt ist alles in Ordnung, erst wenn sie damit aufhört wird es problematisch...
Stoffel1984 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 219

Win NT, Win 2000
D6 Prof
BeitragVerfasst: Fr 12.12.03 11:07 
ist mir schon klar... jetzt zumindest! :roll:
Danke nochmal...
Wolff68
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 302
Erhaltene Danke: 1

WinXP home
D6 Prof
BeitragVerfasst: 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.

ausblenden 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... ... ...

_________________
"Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."