GOTO-Programm

Aus testwiki
Version vom 23. Juli 2023, 10:34 Uhr von 217.61.192.163 (Diskussion) (,)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

GOTO-Programme sind spezielle Programme mit einer sehr einfachen Syntax. Dennoch spielen sie in Zusammenhang mit Berechenbarkeit eine große Rolle für die theoretische Informatik, insbesondere weil sich zeigen lässt, dass jede Turing-berechenbare Funktion GOTO-berechenbar ist.

Syntax

GOTO-Programme haben folgende Syntax in modifizierter Backus-Naur-Form:

  • P::=M1:A;...;Mk:A
  • A::=xi:=xj+c|xi:=xjc|GOTOMi|IFxi=cTHENGOTOMj|STOP
  • M1,...,Mk sind Marken (k ∈ ℕ)

GOTO ist die Menge aller GOTO-Programme gemäß obiger Definition.

Jede GOTO-berechenbare Funktion ist WHILE-berechenbar und umgekehrt.

Jede Turing-berechenbare Funktion ist GOTO-berechenbar und umgekehrt.

Erklärung der Syntax

Jedes GOTO-Programm P besteht aus einer Anzahl von Anweisungen A, getrennt mit jeweils einem Semikolon. Vor jeder Anweisung befindet sich eine (eindeutige) Marke M1, M2, , gefolgt von einem Doppelpunkt.

GOTO-Programme haben eine endliche Anzahl von Variablen x1, x2,  und Konstanten c. Es sind nur fünf verschiedene Anweisungen erlaubt:

  • Zuweisung einer Variablen durch eine weitere (dieselbe oder eine andere) Variable, vermehrt um eine Konstante, etwa
x1:=x2+3
  • oder vermindert um eine Konstante, etwa
x3:=x31.
  • eine Sprunganweisung
GOTOM4
  • eine bedingte Sprunganweisung, wobei eine Variable auf Gleichheit mit einer Konstanten abgefragt wird, etwa
IFx4=45THENGOTOM5
  • und die STOP-Anweisung
STOP.

Konsequenz

Man kann formal beweisen, dass jedes GOTO-Programm auch durch ein äquivalentes Pascal-, C-, C++- oder Java-Programm dargestellt werden kann, und umgekehrt.

Beispiele

Addition zweier Variablen

Das folgende GOTO-Programm berechnet die Summe x1+x2 von zwei nicht-negativen Zahlen x1,x2 und speichert diese in die Variable x3.

 M1: x3:=x1;
 M2: x4:=x2;
 M3: IF x4=0 THEN GOTO M7;
 M4: x3:=x3+1;
 M5: x4:=x41;
 M6: GOTOM3;
 M7: STOP

Multiplikation zweier Variablen

Das folgende Programm berechnet das Produkt x1x2 von zwei nicht-negativen Zahlen x1,x2 und speichert dieses in die Variable x3. Da wir schon ein Programm zur Implementierung der Addition zweier Variablen haben, verwenden wir diese, um eine Implementierung der Multiplikation zu entwickeln.

 M1: x3:=0;
 M2: x4:=x2;
 M3: IFx4=0THENGOTOM7;
 M4: x4:=x41;
 M5: x3:=x3+x1;
 M6: GOTOM3;
 M7: STOP;

Hier ist zu beachten, dass M5: x3:=x3+x1 formal kein gültiges GOTO-Programm ist, sondern durch ein entsprechendes GOTO-Programm für die Addition ersetzt werden muss. Führt man diese Ersetzung durch, erhält man folgendes GOTO-Programm für die Multiplikation von zwei nicht-negativen Zahlen x1,x2.

 M1: x3:=0;
 M2: x4:=x2;
 M3: IFx4=0THENGOTOM10;
 M4: x4:=x41;
 M5: x5:=x1;
 M6: IFx5=0THENGOTOM3;
 M7: x3:=x3+1;
 M8: x5:=x51;
 M9: GOTOM6;
 M10: STOP;

Simulation durch WHILE-Programm

Ein GOTO-Programm

M1: A1; M2: A2; ... Mk: Ak

kann durch ein WHILE-Programm der folgenden Form simuliert werden

counter := 1;
WHILE counter != 0 DO
  IF counter = 1 THEN B1 END;
  IF counter = 2 THEN B2 END;
  ...
  IF counter = k THEN Bk END;
  IF counter = k+1 THEN counter := 0 END
END

wobei

Bi = xj := xn + c; counter := counter + 1   falls Ai = xj := xn + c
Bi = xj := xn - c; counter := counter + 1   falls Ai = xj := xn - c
Bi = counter := n                           falls Ai = GOTO Mn
Bi = IF xj = c THEN counter := n
     ELSE counter := counter + 1            falls Ai = IF xj = c THEN GOTO Mn
     END
Bi = counter := 0                           falls Ai = STOP

In WHILE-Programmen gibt es keine IF THEN END Anweisungen, diese können aber mit LOOP oder WHILE Schleifen implementiert werden. Das folgende Programm simuliert eine IF x1 = c THEN P1 END Anweisung, dabei werden drei neue Variablen xn1, xn2, xn3 verwendet.

xn1:=x1-(c-1); xn2:=x1-c; xn3:=1;
LOOP xn1 DO
  LOOP xn2 DO
     xn3:=0
  END;
  LOOP xn3 DO
     P1
  END
END

Siehe auch

Literatur