PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Aus verschachtelter Schleife Springen.


zabarax
26.04.2004, 21:14
Hallo, ist es möglich aus einer verschachtelten Schleife (die sich in einer Funktion befindet) zu springen, ohne goto zu verwenden aber einen Wert zurückzugeben?

Die Schleife befindet sich in einer Funktion mit dem Rückgabewert BOOLEAN. In der Sprache C würde ich einfach return XYZ schreiben und beide Schleifen wären abgebrochen mit Pascal geht das nicht so einfach. Wenn ich ein break verwende, beendet er die erste Schleife nicht jedoch die zweite.

Meine Idee war folgende. In der inneren schleife gebe ich einen Wert zurück,
z.B. FUNKTIONsname:=FALSE und verlasse diese Schleife mit einem break,
in der äußeren Schleife überprüfe ich dann immer, ob Funktionsname=false ist.
Wenn es False is, beende ich auch die äußere Schleife und kann meinen Rückgabewert ja beim Funktionsaufruf abfragen.
Irgendwie geht das mit Pascal aber nicht.


FUNCTION check(startwert:integer; endwert:integer; XKoordinate:integer):BOOLEAN;


for MIN_X:=Min_x TO Max_X DO
BEGIN


for momentan_Wert:=Startwert TO Endwert DO
BeGIN

if (XXX=TRUE) THEN

BEGIN
check:=false;
BREAK;
END;



END;
if (check=false) THEN
BEGIN
break;
{hier soll er dann aus der äußeren Schleife springen}
END;

END;




grüße
zabarax


Scavi
27.04.2004, 11:20
Im "normalen" Pascal gibts eigentlich gar kein Break/Continue. Dies ist eine Borland Extension. Eine normale Transformation C->Pascal ist daher eigentlich nicht möglich. Deswegen wäre goto vielleicht die einfachste und schnellste Möglichkeit die Schleifen abzubrechen.

zabarax
27.04.2004, 16:05
Ok, danke ich bezog mich auf Borland Pascal.

Ich habe mitlerweile ein workaround über ein zusätzliche Variable gefunden,
ist zwar umständlich, geht aber.

Wenn das jedoch mit Borland Pascal einfacher gerhen sollte, wäre ich super happy, wenn mir das jemand sagen könnte.

ThX

Zabarax.

His Infernal Majesty
27.04.2004, 22:21
ist zwar nicht ne schöne lösung, aber setz doch einfach in dem if wo du abbrechen willst MIN_X:= Max_X dann bricht die schleife ab weil das ende erreicht wurde

zabarax
28.04.2004, 19:56
@ His Infernal Majesty
Ich finde deine Lösung gut, da man hier nicht zusätzliche stuervariablen deklariern muss.
Was ist daran unschön? ich finde es gegenüber meiner zusätzlichen Variablen- Lösung super. Ich wäre auf die Idee wahrscheinlich nie gekommen.

THX

Aron Squander
30.10.2004, 23:54
Unschön halt, weil du eine Variable umsetzt. Wenn du sie weiter verwenden willst, dann geht das so halt nicht. Außerdem: Break ist nie schön, ist im Endeffekt genau wie goto ein Sprung, und den sollte man vermeiden... Meist kann man die Schleife anders bauen... Das ganze ist halt so eine Grundsatzfrage mit der Strukturierten Programmierung....
Cheers
Aron

Diogenes
31.10.2004, 07:56
Aus einem Block, und daher auch aus einer Funktion, einer Prozedur und dem Hauptprogramm (!) springt man mit Exit. Dies ist nur ein Sprung. Die Zuweisung an die Funktion muß man extra machen. Ein C return( Result) ist in Borland-Pascal daher als FuncID := Result; Exit zu coden. (Im Wirth-Standard gibt es kein Break. Da muß(te) ein Wege gefunden werden, um die Schleife bzw. den Block regulär zu beenden.)

Es gibt dann noch Halt, das von jeder Stelle aus das Programm beendet. Das muß man mit äußerster vorsicht genießen!