Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   For in For dann Goto (https://www.delphipraxis.net/159138-dann-goto.html)

BUG 16. Mär 2011 00:00

AW: For in For dann Goto
 
Himtisu macht die Verwirrung wieder komplett :lol:

Luckie 16. Mär 2011 05:07

AW: For in For dann Goto
 
Und ich hoffe, das führt dazu, dass von GOTO Abstand genommen wird. :roll:

alzaimar 16. Mär 2011 05:58

AW: For in For dann Goto
 
Vor allen Dingen und zuerst sollte davon Abstand genommen werden, Schleifenvariablen außerhalb der Schleife benutzen zu wollen.

GOTO ist nicht böse, aber die Sache mit den Schleifenvariablen schon!

GOTO ist nur häßlich.

vergessen 16. Mär 2011 06:33

AW: For in For dann Goto
 
Delphi-Quellcode:
procedure...
label ForEnd;
begin
a:=0;
b:=0;
for a := 0 to 10 do
begin
for b := 0 to 20 do
begin
if prüfungsachen u.a. mit 'a' und 'b' then Goto ForEnd;
end;
end;
ForEnd:
... variable a und b für die weitere Verarbeitung
end;
oder ohne goto

Delphi-Quellcode:
procedure...
begin
a:=0;
b:=0;
for a := 0 to 10 do
begin
for b := 0 to 20 do
begin
if prüfungsachen u.a. mit 'a' und 'b' then break;
end;
end;
... variable a und b für die weitere Verarbeitung
end;
sollte funktionieren.

mkinzler 16. Mär 2011 06:50

AW: For in For dann Goto
 
Oder mit einem else-Zweig

himitsu 16. Mär 2011 08:07

AW: For in For dann Goto
 
@vergessen: Break und Continue funktionieren nur durch eine Schleifenebene hindurch ... hier sind es aber 2 Ebenen.

Wenn, dann müßte jeweils ein Break pro Schleife rein

Delphi-Quellcode:
for a := 0 to 10 do
begin
  for b := 0 to 20 do
  begin
    ...
    if ... then Break;
  end;
  if ... then Break;
end;
Wie gesagt, While/Repeat-Schleifen wären die einzig wirklich praktikable Lösung, vorallem da nach diesen die (Schleifen)-Variablen noch verfügbar wären. (es sind dann ja keine "echten" Schleifenvariablen mehr :angle2: )

Wenn man es schlau anstellt, dann kann man diese beiden einfachen Schleifen auch auf eine Schleife runterschrumpfen und schon geht Break wieder voll durch. :mrgreen:


wie wäre es so?
Delphi-Quellcode:
a := -1;
repeat
  Inc(a);
  b := -1;
  repeat
    Inc(b);
    ...
    Abbrechen := not {prüfungsachen u.a. mit 'a' und 'b'};
  until Abbrechen or (b >= 20);
until Abbrechen or (a >= 10);
...
ShowMessage(Format('a = %d und b = %d', [a, b]));

// oder

a := -1;
repeat
  Inc(a);
  b := -1;
  repeat
    Inc(b);
    Abbrechen := not {prüfungsachen u.a. mit 'a' und 'b'};
    if Abbrechen then Break;
    ...
  until Abbrechen or (b >= 20);
until Abbrechen or (a >= 10);
...
ShowMessage(Format('a = %d und b = %d', [a, b]));

vergessen 16. Mär 2011 08:14

AW: For in For dann Goto
 
@himitsu, schon klar, aber dem TE geht es wohl um

zitat
Delphi gibt hier Warnungen aus:
For Schleifenvariable 'a' kann nach Durchlauf undefiniert sein
For Schleifenvariable 'b' kann nach Durchlauf undefiniert sein

dachte ich.

Daher sollte ein
Delphi-Quellcode:
a:=0;
b:=0;
vor den Schleifen reichen.

Blup 16. Mär 2011 08:21

AW: For in For dann Goto
 
Der Zugriff auf for-Schleifenvariablen nach Verlassen der Schleife ist in erster Linie deshalb unzulässig, weil der Compiler bei eingeschalteter Optimierung so etwas daraus macht:
Delphi-Quellcode:
for a := 10 downto 0 do
begin
  for b := 20 downto 0 do
  begin
    if prüfungsachen u.a. mit '10 - a' und '20 - b' then break;
  end;
end;

himitsu 16. Mär 2011 08:21

AW: For in For dann Goto
 
Warum sollte es reichen?

Diese Variableninhalte sind nach der Schleife undeffiniert.
Davor Zu Beginn wird es von Delphi automatisch initialisiert.
(nämlich mit dem Wert nach dem
Delphi-Quellcode:
:=
des For-To/Downto-Do)
Und wie grade erwähnt, optimiert der Compiler deine Zuweisungen eh weg.

p80286 16. Mär 2011 09:43

AW: For in For dann Goto
 
Die Schleifenvariable kann undefiniert sein.
Dann nimm ein Repeat Until oder ein While und Du hast eine Schleife und Deine Variable ist definiert.

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:50 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz