<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=GOTO-Programm</id>
	<title>GOTO-Programm - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=GOTO-Programm"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=GOTO-Programm&amp;action=history"/>
	<updated>2026-05-21T01:49:37Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=GOTO-Programm&amp;diff=65039&amp;oldid=prev</id>
		<title>217.61.192.163: ,</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=GOTO-Programm&amp;diff=65039&amp;oldid=prev"/>
		<updated>2023-07-23T09:34:42Z</updated>

		<summary type="html">&lt;p&gt;,&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;GOTO-Programme&amp;#039;&amp;#039;&amp;#039; sind spezielle [[Computerprogramm|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-Berechenbarkeit|Turing-berechenbare]] Funktion GOTO-berechenbar ist.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
GOTO-Programme haben folgende [[Syntax]] in modifizierter [[Backus-Naur-Form]]:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;P ::= M_1 : A; ... ; M_k : A&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;A ::= x_i := x_j + c \, | x_i := x_j - c \, | \, \mathrm{GOTO} \, M_i \, | \, \mathrm{IF} \, x_i = c \, \mathrm{THEN} \, \mathrm{GOTO} \, M_j \, | \, \mathrm{STOP}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;M_1, ..., M_k&amp;lt;/math&amp;gt; sind Marken (k ∈ ℕ)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;GOTO&amp;lt;/math&amp;gt; ist die Menge aller GOTO-Programme gemäß obiger Definition.&lt;br /&gt;
&lt;br /&gt;
Jede GOTO-berechenbare Funktion ist [[WHILE-Programm|WHILE-berechenbar]] und umgekehrt.&lt;br /&gt;
&lt;br /&gt;
Jede Turing-berechenbare Funktion ist GOTO-berechenbar und umgekehrt.&lt;br /&gt;
&lt;br /&gt;
=== Erklärung der Syntax ===&lt;br /&gt;
Jedes GOTO-Programm &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; besteht aus einer Anzahl von Anweisungen &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, getrennt mit jeweils einem Semikolon. Vor jeder Anweisung befindet sich eine (eindeutige) Marke &amp;lt;math&amp;gt;M_1,\ M_2,\ \dots&amp;lt;/math&amp;gt;, gefolgt von einem Doppelpunkt.&lt;br /&gt;
&lt;br /&gt;
GOTO-Programme haben eine endliche Anzahl von Variablen &amp;lt;math&amp;gt;x_1,\ x_2,\ \dots&amp;lt;/math&amp;gt; und Konstanten &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;. Es sind nur fünf verschiedene Anweisungen erlaubt:&lt;br /&gt;
* Zuweisung einer Variablen durch eine weitere (dieselbe oder eine andere) Variable, vermehrt um eine Konstante, etwa&lt;br /&gt;
::&amp;lt;math&amp;gt;x_1 := x_2+3&amp;lt;/math&amp;gt;&lt;br /&gt;
* oder vermindert um eine Konstante, etwa&lt;br /&gt;
::&amp;lt;math&amp;gt;x_3 := x_3-1&amp;lt;/math&amp;gt;.&lt;br /&gt;
* eine Sprunganweisung&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{GOTO} \quad M_4&amp;lt;/math&amp;gt;&lt;br /&gt;
* eine bedingte Sprunganweisung, wobei eine Variable auf Gleichheit mit einer Konstanten abgefragt wird, etwa&lt;br /&gt;
::&amp;lt;math&amp;gt;{\rm IF} \quad x_4 = 45 \quad {\rm THEN} \quad {\rm GOTO} \quad M_5&amp;lt;/math&amp;gt;&lt;br /&gt;
* und die STOP-Anweisung&lt;br /&gt;
::&amp;lt;math&amp;gt;{\rm STOP}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Konsequenz ==&lt;br /&gt;
Man kann formal beweisen, dass jedes [[GOTO]]-Programm auch durch ein äquivalentes [[Pascal (Programmiersprache)|Pascal]]-, [[C (Programmiersprache)|C]]-, [[C++]]- oder [[Java (Programmiersprache)|Java]]-Programm dargestellt werden kann, und umgekehrt.&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
&lt;br /&gt;
=== Addition zweier Variablen ===&lt;br /&gt;
Das folgende GOTO-Programm berechnet die Summe &amp;lt;math&amp;gt;x_1 + x_2&amp;lt;/math&amp;gt; von zwei nicht-negativen Zahlen &amp;lt;math&amp;gt;x_1, x_2&amp;lt;/math&amp;gt; und speichert diese in die Variable &amp;lt;math&amp;gt;x_3&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;math&amp;gt;M_1:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;x_3:=x_1&amp;lt;/math&amp;gt;;&lt;br /&gt;
  &amp;lt;math&amp;gt;M_2:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;x_4:=x_2&amp;lt;/math&amp;gt;;&lt;br /&gt;
  &amp;lt;math&amp;gt;M_3:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;{\rm IF} \ x_4 = 0 \ {\rm THEN} \ {\rm GOTO} \ M_{7}&amp;lt;/math&amp;gt;;&lt;br /&gt;
  &amp;lt;math&amp;gt;M_4:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;x_3:=x_3+1&amp;lt;/math&amp;gt;;&lt;br /&gt;
  &amp;lt;math&amp;gt;M_5:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;x_4:=x_4-1&amp;lt;/math&amp;gt;;&lt;br /&gt;
  &amp;lt;math&amp;gt;M_6:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mathrm{GOTO} \quad M_3&amp;lt;/math&amp;gt;;&lt;br /&gt;
  &amp;lt;math&amp;gt;M_7:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;STOP&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Multiplikation zweier Variablen ===&lt;br /&gt;
&lt;br /&gt;
Das folgende Programm berechnet das Produkt &amp;lt;math&amp;gt;x_1 \cdot x_2&amp;lt;/math&amp;gt; von zwei nicht-negativen Zahlen &amp;lt;math&amp;gt;x_1, x_2&amp;lt;/math&amp;gt; und speichert dieses in die Variable &amp;lt;math&amp;gt;x_3&amp;lt;/math&amp;gt;.&lt;br /&gt;
Da wir schon ein Programm zur Implementierung der Addition zweier Variablen haben, verwenden wir diese, um eine Implementierung der Multiplikation zu entwickeln.&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;math&amp;gt;M_1:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;x_3:=0&amp;lt;/math&amp;gt;;&lt;br /&gt;
  &amp;lt;math&amp;gt;M_2:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;x_4:=x_2&amp;lt;/math&amp;gt;;&lt;br /&gt;
  &amp;lt;math&amp;gt;M_3:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;{\rm IF} \quad x_4 = 0 \quad {\rm THEN} \quad {\rm GOTO} \quad M_{7}&amp;lt;/math&amp;gt;;&lt;br /&gt;
  &amp;lt;math&amp;gt;M_4:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;x_4 := x_4 - 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
  &amp;lt;math&amp;gt;M_5:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;x_3 := x_3+x_1&amp;lt;/math&amp;gt;;&lt;br /&gt;
  &amp;lt;math&amp;gt;M_6:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mathrm{GOTO} \quad M_3&amp;lt;/math&amp;gt;;&lt;br /&gt;
  &amp;lt;math&amp;gt;M_7:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;STOP&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
Hier ist zu beachten, dass &amp;lt;math&amp;gt;M_5:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;x_3 := x_3+x_1&amp;lt;/math&amp;gt; formal kein gültiges GOTO-Programm ist, sondern durch ein entsprechendes GOTO-Programm für die Addition ersetzt werden muss.&lt;br /&gt;
Führt man diese Ersetzung durch, erhält man folgendes GOTO-Programm für die Multiplikation von zwei nicht-negativen Zahlen &amp;lt;math&amp;gt;x_1, x_2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;math&amp;gt;M_1:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;x_3:=0&amp;lt;/math&amp;gt;;&lt;br /&gt;
  &amp;lt;math&amp;gt;M_2:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;x_4:=x_2&amp;lt;/math&amp;gt;;&lt;br /&gt;
  &amp;lt;math&amp;gt;M_3:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;{\rm IF} \quad x_4 = 0 \quad {\rm THEN} \quad {\rm GOTO} \quad M_{10}&amp;lt;/math&amp;gt;;&lt;br /&gt;
  &amp;lt;math&amp;gt;M_4:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;x_4 := x_4 - 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
  &amp;lt;math&amp;gt;M_5:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;x_5:=x_1&amp;lt;/math&amp;gt;;&lt;br /&gt;
  &amp;lt;math&amp;gt;M_6:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;{\rm IF} \quad x_5 = 0 \quad {\rm THEN} \quad {\rm GOTO} \quad M_{3}&amp;lt;/math&amp;gt;;&lt;br /&gt;
  &amp;lt;math&amp;gt;M_7:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;x_3:=x_3+1&amp;lt;/math&amp;gt;;&lt;br /&gt;
  &amp;lt;math&amp;gt;M_8:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;x_5:=x_5-1&amp;lt;/math&amp;gt;;&lt;br /&gt;
  &amp;lt;math&amp;gt;M_9:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mathrm{GOTO} \quad M_6&amp;lt;/math&amp;gt;;&lt;br /&gt;
  &amp;lt;math&amp;gt;M_{10}:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;STOP&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
== Simulation durch WHILE-Programm ==&lt;br /&gt;
Ein GOTO-Programm&lt;br /&gt;
 M1: A1; M2: A2; ... Mk: Ak&lt;br /&gt;
kann durch ein [[WHILE-Programm]] der folgenden Form simuliert werden&lt;br /&gt;
 counter := 1;&lt;br /&gt;
 WHILE counter != 0 DO&lt;br /&gt;
   IF counter = 1 THEN B1 END;&lt;br /&gt;
   IF counter = 2 THEN B2 END;&lt;br /&gt;
   ...&lt;br /&gt;
   IF counter = k THEN Bk END;&lt;br /&gt;
   IF counter = k+1 THEN counter := 0 END&lt;br /&gt;
 END&lt;br /&gt;
wobei&lt;br /&gt;
 Bi = xj := xn + c; counter := counter + 1   falls Ai = xj := xn + c&lt;br /&gt;
 Bi = xj := xn - c; counter := counter + 1   falls Ai = xj := xn - c&lt;br /&gt;
 Bi = counter := n                           falls Ai = GOTO Mn&lt;br /&gt;
 Bi = IF xj = c THEN counter := n&lt;br /&gt;
      ELSE counter := counter + 1            falls Ai = IF xj = c THEN GOTO Mn&lt;br /&gt;
      END&lt;br /&gt;
 Bi = counter := 0                           falls Ai = STOP&lt;br /&gt;
&lt;br /&gt;
In WHILE-Programmen gibt es keine IF THEN END Anweisungen, diese können aber mit [[LOOP-Programm#IF THEN ELSE|LOOP]] oder WHILE Schleifen implementiert werden.&lt;br /&gt;
Das folgende Programm simuliert eine &amp;#039;&amp;#039;IF x&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = c THEN P1 END&amp;#039;&amp;#039; Anweisung, dabei werden drei neue Variablen xn1, xn2, xn3 verwendet.&lt;br /&gt;
&lt;br /&gt;
 x&amp;lt;sub&amp;gt;n1&amp;lt;/sub&amp;gt;:=x&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;-(c-1); x&amp;lt;sub&amp;gt;n2&amp;lt;/sub&amp;gt;:=x&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;-c; x&amp;lt;sub&amp;gt;n3&amp;lt;/sub&amp;gt;:=1;&lt;br /&gt;
 LOOP x&amp;lt;sub&amp;gt;n1&amp;lt;/sub&amp;gt; DO&lt;br /&gt;
   LOOP x&amp;lt;sub&amp;gt;n2&amp;lt;/sub&amp;gt; DO&lt;br /&gt;
      x&amp;lt;sub&amp;gt;n3&amp;lt;/sub&amp;gt;:=0&lt;br /&gt;
   END;&lt;br /&gt;
   LOOP x&amp;lt;sub&amp;gt;n3&amp;lt;/sub&amp;gt; DO&lt;br /&gt;
      P1&lt;br /&gt;
   END&lt;br /&gt;
 END&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Sprunganweisung]] (GOTO)&lt;br /&gt;
* [[LOOP-Programm]]&lt;br /&gt;
* [[WHILE-Programm]]&lt;br /&gt;
* [[µ-Rekursion]]&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* {{Literatur| Autor=[[Uwe Schöning]]| Titel=Theoretische Informatik – kurz gefasst| Auflage=5| Verlag=Spektrum Akademischer Verlag| Ort=Heidelberg| Kapitel=2.3 LOOP-, WHILE und GOTO-Berechenbarkeit| ISBN=978-3-8274-1824-1}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Berechenbarkeitstheorie|Gotoprogramm]]&lt;/div&gt;</summary>
		<author><name>217.61.192.163</name></author>
	</entry>
</feed>