<?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=LOOP-Programm</id>
	<title>LOOP-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=LOOP-Programm"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=LOOP-Programm&amp;action=history"/>
	<updated>2026-05-20T08:03:42Z</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=LOOP-Programm&amp;diff=65031&amp;oldid=prev</id>
		<title>~2025-37651-59: /* IF THEN ELSE */</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=LOOP-Programm&amp;diff=65031&amp;oldid=prev"/>
		<updated>2025-12-01T15:47:25Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;IF THEN ELSE&lt;/span&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;LOOP-Programme&amp;#039;&amp;#039;&amp;#039; sind [[Computerprogramm|Programme]] in der [[Programmiersprache]] &amp;#039;&amp;#039;&amp;#039;LOOP&amp;#039;&amp;#039;&amp;#039;, einer stark eingeschränkten, modellhaften Sprache, die nur die Formulierung von [[Addition]]en, [[Wertzuweisung]]en und endlich oft durchlaufende [[Schleife (Programmierung)|Schleifen]] erlaubt. LOOP-Programme spielen in der [[Theoretische Informatik|Theoretischen Informatik]] eine Rolle, insbesondere im Zusammenhang mit [[Berechenbarkeit]]. Eine [[Funktion (Mathematik)|Funktion]] heißt &amp;#039;&amp;#039;&amp;#039;LOOP-berechenbar&amp;#039;&amp;#039;&amp;#039;, wenn sie sich als LOOP-Programm formulieren lässt. Die Menge aller LOOP-Programme wird mit &amp;lt;math&amp;gt;\mathit{LOOP}&amp;lt;/math&amp;gt; bezeichnet.&lt;br /&gt;
&lt;br /&gt;
== Eigenschaften ==&lt;br /&gt;
Aufgrund ihrer Definition [[Terminiertheit|terminieren]] LOOP-Programme für alle Eingaben und definieren daher [[totale Funktion]]en&amp;lt;ref&amp;gt;{{Literatur |Autor=[[Uwe Schöning]] |Titel=Theoretische Informatik- kurz gefasst |Auflage=5. |Verlag=Spektrum Akademischer Verlag |Ort=Heidelberg |Datum=2008 |ISBN=978-3-8274-1824-1 |Seiten=93}}&amp;lt;/ref&amp;gt;.  Damit stehen sie im Kontrast zu [[GOTO-Programm]]en und [[WHILE-Programm]]en, bei denen eine Terminierung des Programms nicht garantiert ist.&lt;br /&gt;
&lt;br /&gt;
Die Menge der durch LOOP-Programme berechenbaren Funktionen ist eine echte Untermenge der [[Berechenbare Funktion|berechenbaren]] totalen Funktionen (und damit auch eine Untermenge der durch WHILE- bzw. GOTO-Programme berechenbaren Funktionen)&amp;lt;ref name=&amp;quot;:0&amp;quot;&amp;gt;{{Literatur |Autor=[[Uwe Schöning]] |Titel=Theoretische Informatik- kurz gefasst |Auflage=5. |Verlag=Spektrum Akademischer Verlag |Ort=Heidelberg |Datum=2008 |ISBN=978-3-8274-1824-1 |Seiten=93,94}}&amp;lt;/ref&amp;gt;. Ein Beispiel für eine berechenbare, aber nicht LOOP-berechenbare [[totale Funktion]] ist die [[Ackermann-Funktion]]&amp;lt;ref&amp;gt;{{Literatur |Autor=[[Uwe Schöning]] |Titel=Theoretische Informatik- kurz gefasst |Auflage=5. |Verlag=Spektrum Akademischer Verlag |Ort=Heidelberg |Datum=2008 |ISBN=978-3-8274-1824-1 |Seiten=94,112}}&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Die Menge der LOOP-berechenbaren Funktionen entspricht der Menge der [[primitiv-rekursive Funktion|primitiv-rekursiven Funktionen]]&amp;lt;ref&amp;gt;{{Literatur |Autor=[[Uwe Schöning]] |Titel=Theoretische Informatik- kurz gefasst |Auflage=5. |Verlag=Spektrum Akademischer Verlag |Ort=Heidelberg |Datum=2008 |ISBN=978-3-8274-1824-1 |Seiten=105}}&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Formale Definition ==&lt;br /&gt;
=== Syntax ===&lt;br /&gt;
LOOP-Programme bestehen aus den Symbolen &amp;lt;code&amp;gt;LOOP&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DO&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;END&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;:=&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt; sowie einer beliebigen Anzahl von Variablen und Konstanten. LOOP-Programme haben folgende [[Syntax]] in modifizierter [[Backus-Naur-Form]]:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{array}{lrl}&lt;br /&gt;
 P &amp;amp; := &amp;amp; x_i := x_j + c \\&lt;br /&gt;
   &amp;amp;   | &amp;amp; x_i := x_j - c \\&lt;br /&gt;
   &amp;amp;   | &amp;amp; P;P \\&lt;br /&gt;
   &amp;amp;   | &amp;amp; \mathrm{LOOP} \, x_i \, \mathrm{DO} \, P \, \mathrm{END}&lt;br /&gt;
\end{array}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Hierbei sind &amp;lt;math&amp;gt;\mathit{Var} := \{ x_0, x_1, ... \}&amp;lt;/math&amp;gt; Variablennamen und &amp;lt;math&amp;gt;c \in \mathbb{N}&amp;lt;/math&amp;gt; Konstanten.&lt;br /&gt;
&lt;br /&gt;
=== Semantik ===&lt;br /&gt;
Ein Ausdruck der Form&lt;br /&gt;
 x&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; := x&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + c&lt;br /&gt;
bedeutet die Zuweisung des um &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; erhöhten Wertes der Variablen &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; an die Variable &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt;. Dabei ist für &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; der Wert Null zulässig, so dass sich auch die direkte Zuweisung des Wertes einer Variablen an eine andere Variable mit diesem syntaktischen Konstrukt formulieren lässt:&lt;br /&gt;
 x&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; := x&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 0&lt;br /&gt;
&lt;br /&gt;
Ein Ausdruck der Form&lt;br /&gt;
 x&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; := x&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; - c&lt;br /&gt;
bedeutet die Zuweisung des um &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; verminderten Wertes der Variablen &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; an die Variable &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt;. Bei der Ausführung von Zuweisungen werden negative Werte implizit durch Nullen ersetzt.&lt;br /&gt;
&lt;br /&gt;
Variablen dürfen in Zuweisungsausdrücken gleichzeitig auf der linken und auf der rechten Seite des Symbols &amp;lt;code&amp;gt;:=&amp;lt;/code&amp;gt; erscheinen. Ein Ausdruck der Form&lt;br /&gt;
 x := x + c&lt;br /&gt;
erhöht beispielsweise den Wert der Variablen &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; um &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Die in einem LOOP-Programm verwendeten Variablen werden vor Beginn des Programmablaufs mit vorgegebenen Initialwerten vorbelegt.&lt;br /&gt;
&lt;br /&gt;
Ein Ausdruck der Form&lt;br /&gt;
 &amp;#039;&amp;#039;P&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;; &amp;#039;&amp;#039;P&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
bedeutet die Hintereinanderausführung der Teilprogramme &amp;lt;math&amp;gt;P_1&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;P_2&amp;lt;/math&amp;gt; in dieser Reihenfolge. Ein Ausdruck der Form&lt;br /&gt;
 LOOP x DO &amp;#039;&amp;#039;P&amp;#039;&amp;#039; END&lt;br /&gt;
bedeutet die &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;-fache Ausführung des Teilprogramms &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, wobei &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; den Wert am Beginn der Abarbeitung darstellt. (Auch wenn &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; durch die Ausführung von &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; verändert wird, wird &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; nur so oft ausgeführt, wie &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; am Anfang war.) Hat &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; dabei den Wert Null, so wird das Teilprogramm &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; innerhalb des LOOP-Ausdrucks überhaupt nicht ausgeführt. Dieser Umstand erlaubt die Formulierung von [[Verzweigung (Programmierung)|Verzweigungen]] in LOOP-Programmen durch die bedingte Ausführung von Teilprogrammen in Abhängigkeit vom Wert einer Variablen.&lt;br /&gt;
&lt;br /&gt;
== Beispielprogramme ==&lt;br /&gt;
=== Addition ===&lt;br /&gt;
Das folgende LOOP-Programm weist der Variablen &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; die Summe der Werte der Variablen &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt; zu.&lt;br /&gt;
 x&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; := x&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 0;&lt;br /&gt;
 LOOP x&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; DO&lt;br /&gt;
    x&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; := x&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 1&lt;br /&gt;
 END&lt;br /&gt;
#&lt;br /&gt;
Dabei bekommt zunächst &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; den aktuellen Wert von &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; zugewiesen und wird dann um den Wert von &amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt; inkrementiert.&lt;br /&gt;
&lt;br /&gt;
Dieses Programm lässt sich wie ein Unterprogramm in anderen LOOP-Programmen verwenden. Solche Verwendungen werden durch eine einfache Erweiterung der ursprünglichen LOOP-Syntax in der Form&lt;br /&gt;
 x&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; := x&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + x&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
beschrieben.&lt;br /&gt;
&lt;br /&gt;
Dabei gilt zu beachten, dass LOOP-Programme keine Unterprogramme aufrufen können&amp;lt;ref&amp;gt;{{Internetquelle |autor=Till Tantau |url=http://www.tcs.uni-luebeck.de/downloads/mitarbeiter/tantau/2009-ws-ti.pdf |titel=Vorlesungsskript Theoretische Informatik |werk=Institut für Theoretische Informatik - Universität zu Lübeck |hrsg= |datum=2010-02-12 |seiten=154–156 |abruf=2019-01-23 |sprache=de |zitat=Unterprogramme sind nicht erlaubt.}}&amp;lt;/ref&amp;gt;, sondern diese Unterprogramme [[Inline-Ersetzung|inlined]] und somit ein Teil des Hauptprogramms werden&amp;lt;ref&amp;gt;{{Literatur |Autor=Uwe Schöning |Titel=Theoretische Informatik - kurz gefasst |Hrsg= |Sammelwerk= |Band= |Nummer= |Auflage=5 |Verlag=Spektrum Akademisch Verlag |Ort= |Datum= |ISBN= |Seiten=102 |Zitat=Die Funktion g (...) kann formal durch eine entsprechende Einsetzung definiert werden (...)}}&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt;. Andernfalls bestände die Möglichkeit einer zirkulären Abhängigkeit und damit einhergehend der Verlust der endlichen Laufzeit von LOOP-Programmen.&lt;br /&gt;
&lt;br /&gt;
=== Multiplikation ===&lt;br /&gt;
Das folgende LOOP-Programm erhöht den Wert der Variablen &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; um den Wert des Produktes der Werte der Variablen &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt;.&lt;br /&gt;
 LOOP x&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; DO&lt;br /&gt;
   x&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; := x&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + x&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
 END&lt;br /&gt;
#&lt;br /&gt;
Das Programm benutzt dabei das im ersten Beispiel definierte Unterprogramm der Addition. Die ausgeführte Multiplikation wird dabei durch das &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt;-fache Addieren des Wertes von &amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt; zum Wert von &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; realisiert.&lt;br /&gt;
&lt;br /&gt;
Durch Einsetzen des LOOP-Programms für die Addition erhält man das äquivalente Programm in der ursprünglichen LOOP-Syntax.&lt;br /&gt;
&lt;br /&gt;
 LOOP x&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; DO&lt;br /&gt;
   x&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; := x&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 0;&lt;br /&gt;
   LOOP x&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; DO&lt;br /&gt;
     x&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; := x&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 1&lt;br /&gt;
   END&lt;br /&gt;
 END&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
=== IF THEN ELSE ===&lt;br /&gt;
Das folgende LOOP-Programm simuliert eine „if x&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; &amp;amp;gt; c then P1 else P2“-Anweisung, wobei x&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; eine Variable, c eine Konstante und P1, P2 beliebige LOOP-Programme sind. In dem Programm werden drei neue Variablen x&amp;lt;sub&amp;gt;n1&amp;lt;/sub&amp;gt;, x&amp;lt;sub&amp;gt;n2&amp;lt;/sub&amp;gt;, x&amp;lt;sub&amp;gt;n3&amp;lt;/sub&amp;gt; verwendet.&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; x&amp;lt;sub&amp;gt;n2&amp;lt;/sub&amp;gt;:=0; 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;
   x&amp;lt;sub&amp;gt;n2&amp;lt;/sub&amp;gt; := 1&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;n2&amp;lt;/sub&amp;gt; DO&lt;br /&gt;
   P1&lt;br /&gt;
 END;&lt;br /&gt;
 LOOP x&amp;lt;sub&amp;gt;n3&amp;lt;/sub&amp;gt; DO&lt;br /&gt;
   P2&lt;br /&gt;
 END;&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
Das folgende LOOP-Programm simuliert eine „if x&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = c then P1 else P2“-Anweisung, wobei x&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; eine Variable, c eine Konstante und P1, P2 beliebige LOOP-Programme sind. In dem Programm werden vier neue Variablen x&amp;lt;sub&amp;gt;n1&amp;lt;/sub&amp;gt;, x&amp;lt;sub&amp;gt;n2&amp;lt;/sub&amp;gt;, x&amp;lt;sub&amp;gt;n3&amp;lt;/sub&amp;gt;, x&amp;lt;sub&amp;gt;n4&amp;lt;/sub&amp;gt; verwendet.&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; x&amp;lt;sub&amp;gt;n4&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;
      x&amp;lt;sub&amp;gt;n4&amp;lt;/sub&amp;gt;:=0;&lt;br /&gt;
   END&lt;br /&gt;
 END;&lt;br /&gt;
 LOOP x&amp;lt;sub&amp;gt;n4&amp;lt;/sub&amp;gt; DO&lt;br /&gt;
   P2&lt;br /&gt;
 END&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
== Simulation von LOOP-Programmen durch WHILE-Programm ==&lt;br /&gt;
Ein jedes LOOP-Programm&lt;br /&gt;
 LOOP x DO &amp;#039;&amp;#039;P&amp;#039;&amp;#039; END&lt;br /&gt;
kann durch das folgende WHILE-Programm simuliert werden&lt;br /&gt;
 y := x&lt;br /&gt;
 WHILE y != 0 DO y := y-1; &amp;#039;&amp;#039;P&amp;#039;&amp;#039; END&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[µ-Rekursion]]&lt;br /&gt;
* [[WHILE-Programm]]&lt;br /&gt;
* [[GOTO-Programm]]&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* {{Literatur |Autor=[[Uwe Schöning]] |Titel=Theoretische Informatik - kurzgefasst |Auflage=4. |Verlag=Spektrum Akademischer Verlag |Datum=2001 |ISBN=3-8274-1099-1}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Berechenbarkeitstheorie]]&lt;/div&gt;</summary>
		<author><name>~2025-37651-59</name></author>
	</entry>
</feed>