LOOP, WHILE, GOTO Umwandlungen

Aus ProgrammingWiki

Wechseln zu: Navigation, Suche

LOOP-Programm Grundstruktur:

LOOP (Zählwariable) DO (Anweisung) END

Erklärung:

Die Zählvariable gibt an, wie oft die Anweisung wiederholt werden soll. Die Anweisung kann ein anderes LOOP-Programm (z.B. eine Wertzuweisung) beschreiben.

Beispiel:

x0 := 2;
x1 := 1;
LOOP x0 DO x1 := x1 + 1 END

-> Führe zwei mal (Wert von Zählvariable x0) durch, dass der Variable x1 die Summe der Variable x1 und der Konstante 1 zugewiesen wird.

WHILE-Programm Grundstruktur:

WHILE (Abbruchbedingung) DO (Anweisung) END

Erklärung:

Solange die Abbruchsbedingung nicht erfüllt ist, soll die Anweisung wiederholt werden. Achtung: Wenn das Erzeugen einer Endlosschleife nicht geplant ist, muss sichergestellt werden, dass die Abbruchsbedingung in der Anweisung erreicht werden kann.

Beispiel:

x0 := 2;
WHILE x0 <> 0 DO x1 := x1 + 1; x0 := x0 - 1 END

-> Führe durch solange der Wert der Variable x0 ungleich 0 ist, dass der Variable x1 die Summe der Variable x1 und der Konstante 1 zugewiesen wird und der Variable x0 die Differenz der Variable x0 und der Konstante 1 zugewiesen wird.


GOTO-Programm Grundstruktur:

GOTO (Marker)
(Marker) : (Anweisung)

Erklärung:

Springe zum angewiesenen Marker und führe die dort beschriebene Anweisung durch.

Beispiel:

M1: GOTO M3;
M2: x0 := 1;
M3: x0 := 2;

-> Springe zum Merker M3 und weise der Variable x0 den Wert zwei zu.


Umwandlung LOOP zu WHILE:

LOOP-Programm:

LOOP xj DO P END;

Entsprechendes WHILE-Programm:

xi := xj; WHILE Xi <> 0 DO xi:= xi - 1; P END

Erklärung:

Weise einer Variablen xi den Wert der Zählvariablen xj zu. Setze die Abbruchsbedingung für das WHILE-Programm als xi ungleich 0. Als Anwendung setze eine Sequenz aus der Dekrementierung von xi um 1 und der Anweisung aus dem LOOP-Programm.


Umwandlung WHILE zu GOTO

WHILE-Programm:

WHILE xi <> 0 DO P END;

Entsprechendes GOTO-Programm:

M1 : IF xi = 0 THEN GOTO m2;
     P;
     GOTO M1;
M2 : ...

Erklärung:

Vor die Schleife wird ein Merker gesetz. Zu Beginn wird abgefragt, ob das Gegenteil unserer ursprünglichen Abruchbedingung erfüllt ist. Wenn dem so ist, gehe zum Merker M2 außerhalb der Schleife. Sonst führe die Anweisung aus dem WHILE Programm durch und gehe zum Merker am Anfang der Schleife.


Umwandlung GOTO zu WHILE:

GOTO-Programm:

M1 : A1; M2 : A2; M3 : A3; ...

Entsprechendes WHILE-Programm:

xz := 1;
WHILE xz <> 0 DO
IF xz = 1 THEN A′1 END; 
IF xz = 2 THEN A′2 END;
...
IF xz = k THEN A′k END;
IF xz > k THEN xz := 0 END
END

Erklärung:

Setze xz auf 1 und Abruchbedingung auf xz ungleich 0. Für jeden Merker wird ein IF Statement erstelt, indem gefragt wird, ob xz di Merker-Nummer ist. Ist diese der Fall wird die dem Merker zugehörige Anweisung durchgeführt. So kann die Variable xz zur Navigation zwischen den umgewandelten Merkern verwendet werden. Am Ende wird abgefragt, ob xz größer als der größte Merker ist. Sollte dies der Fall sein, wird xz auf 0 gesetzt, womit die Abbruchsbedingung erfült wird.

Zusätzliche Erklärungen:

Wenn die ursprüngliche Anweisung kein GOTO enthält, muss die Zuweisung xz := xz + 1 enthalten sein.

Wenn die ursprüngliche Anweisung ein unbedingtes GOTO zu Mj enthält, muss eine Zweisung von xz zu j enthalten sein.

Wenn die ursprüngliche Anweisung ein bedingtes GOTO zu Mj enthält, muss zuerst ein Zuweisung von xz + 1 auf xz erfolgen. Danach muss abgefragt werden ob die Bedingung erfüllt ist. Sollte dies der Fall sein, wird xz auf j gesetzt.

Sollte die Anweisung aus dem Halte-Befehl HALT bestehen, muss xz auf 0 gestzt werden.

Persönliche Werkzeuge