„Kontrollstruktur“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen
[gesichtete Version][gesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
-siehe auch (Links waren doppelt vorhanden)
Definition neu gefasst, Artikel strukturiert
Zeile 1: Zeile 1:
{{Portalhinweis|Informatik}} ''Lemma seit zehn Jahren ungeklärt (siehe Diskussionsseite).'' --[[Benutzer:Gebu|Gebu]] ([[Benutzer Diskussion:Gebu|Diskussion]]) 18:34, 4. Jan. 2021 (CET)
{{Portalhinweis|Informatik}} ''Lemma seit zehn Jahren ungeklärt (siehe Diskussionsseite).'' --[[Benutzer:Gebu|Gebu]] ([[Benutzer Diskussion:Gebu|Diskussion]]) 18:34, 4. Jan. 2021 (CET)
'''Kontrollstrukturen''' (''Steuerkonstrukte'') sind [[Anweisung (Programmierung)|Anweisungen]] in [[Imperative Programmiersprache|imperativen Programmiersprachen]]. Sie werden verwendet, um den Ablauf eines Computerprogramms zu steuern. Eine Kontrollstruktur ist entweder eine ''[[Bedingte Anweisung und Verzweigung|Verzweigung]]'' oder eine ''[[Schleife (Programmierung)|Schleife]]''. Meist wird ihre Ausführung über logische Ausdrücke der [[Boolesche Algebra|booleschen Algebra]] beeinflusst. Kontrollstrukturen können über spezielle [[Diagramm]]e visualisiert werden (z. B. [[Nassi-Shneiderman-Diagramm]]e).
'''Kontrollstrukturen''' sind in der Informatik die Vorgabe, in welcher Reihenfolge die Handlungsschritte eines [[Algorithmus]] abgearbeitet werden. In [[Imperative Programmiersprache|imperativen Programmiersprachen]] werden sie durch [[Kontrollanweisung|'''Kontrollanweisungen''']] ('''Steuerkonstrukte''') implementiert. Mit Kontrollstrukturen können Programme auf verschiedene Zustände reagieren, indem Programmteile nur bedingt ([[Bedingte Anweisung und Verzweigung|bedingte Anweisung]]) oder wiederholt ([[Schleife (Programmierung)|Schleife]]) ausgeführt werden.<ref>{{Literatur |Autor=Reisig, Wolfgang, 1950-, Freytag, Johann Christoph, 1954- |Titel=Informatik : aktuelle Themen im historischen Kontext |Hrsg= |Sammelwerk= |Band= |Nummer= |Auflage= |Verlag=Springer |Ort=Berlin |Datum=2006 |ISBN=978-3-540-32743-1 |Seiten=278 |Online= |Abruf=}}</ref>
[[Datei:Struktogramm.png|mini|Struktogramm]]
== Geschichte ==
Konventionelle Programmiermodelle und -sprachen konstruieren Algorithmen mit Hilfe folgender Kontrollstrukturen:
In den frühen 1960er Jahren waren Flussdiagramme und [[Sprunganweisung]]en in Programmen üblich, was größere Programme nahezu [[Wartbarkeit|unwartbar]] machte, da sie schnell unüberschaubar wurden. 1968 sprach sich [[Edsger W. Dijkstra]] in seinem Aufsatz ''Go To Statement Considered Harmful'' (der Titel geht allerdings auf [[Niklaus Wirth]] zurück), für eine Abschaffung des GOTO-Befehls in allen höheren Programmiersprachen aus.<ref>{{Literatur | Autor=Edsger W. Dijkstra | Titel=Letters to the editor: Go To Statement Considered Harmful | Sammelwerk= Communications of the ACM | Band=11| Nummer=3| Jahr=1968| Monat=3| Seiten=147–148| DOI=10.1145/362929.362947}}</ref>


* Sequenz: die Anweisungen werden linear ausgeführt.
Im Mai 1966 publizierten Böhm und Jacopini in der Zeitschrift ''Communications of the ACM'' einen Artikel, in dem sie zeigten, dass jedes Programm, das Goto-[[Anweisung (Programmierung)|Anweisungen]] enthält, in ein Goto-freies Programm umgeschrieben werden kann, das nur mit Verzweigung (IF THEN ELSE) und einer Schleife (WHILE ''Bedingung'' DO ''Anweisung'') arbeitet, gegebenenfalls unter Zuhilfenahme von etwas Code-Doppelung und der Einführung von booleschen Variablen (true/false).
* [[Bedingte Anweisung und Verzweigung]]: die Anweisungen werden nur bei einem bestimmten Zustand ausgeführt.
* [[Schleife (Programmierung)|Schleife]] oder Iteration: die Anweisungen werden nur solange ausgeführt wie oder bis ein bestimmter Zustand erreicht wird.
* [[Rekursion]]: Bei der [[Rekursive Programmierung|rekursiven Programmierung]] ruft sich eine [[Prozedur (Programmierung)|Prozedur]], [[Funktion (Programmierung)|Funktion]] oder [[Methode (Programmierung)|Methode]] in einem [[Computerprogramm]] selbst wieder auf.


Das [[Programmierparadigma]] der [[Strukturierte Programmierung|Strukturierten Programmierung]] beinhaltet neben dem Paradigma der [[Prozedurale Programmierung|prozeduralen Programmierung]] die Beschränkung auf lediglich drei Kontrollstrukturen Sequenz, Verzweigung und Schleifen.
Anfang der 1970er Jahre wurde damit begonnen, diesen Ansatz zur Selbstbeschränkung auf wenige, typische Elemente umzusetzen. Wegweisend war die Arbeit von [[Niklaus Wirth]] mit seiner Programmiersprache [[Pascal (Programmiersprache)|Pascal]].

<!-- Siehe Diskussionsseite.
Die Verwendung von Kontrollstrukturen verhindert das Entstehen von [[Quelltext]], bei dem auf unübersichtliche Weise hin- und hergesprungen wird, dem sogenannten [[Spaghetticode|Spaghetti-Code]]. Die folgenden Merkmale kennzeichnen ein Programm bei Verwendung von Kontrollstrukturen:
Nicht durchgesetzt hat sich der ''completer'' aus [[Algol 68]], der es erlaubt, die Ausführung der unmittelbar umschließenden Kontrollstruktur jederzeit zu beenden, sobald das Ergebnis feststeht. Dabei war er leicht zu verallgemeinern auf das Beenden der Ausführung einer ''beliebigen'' umschließenden, mit einer Marke (label) zu bezeichnenden Kontrollstruktur. Der ''completer'' kann manche boolesche Variable und manche Abfrage ersetzen und so das Programm übersichtlicher machen.
* Anweisungen, die wiederholt werden, sind durch Schlüsselwörter klar gekennzeichnet
-->
* Bedingungen und Wiederholungen sind sofort erkennbar
* Vermeidung von Goto und Sprungmarken.
== Visualisierung ==
Kontrollstrukturen können mittels [[Diagramm|Diagrammen]] visualisiert werden.
[[Datei:Flowchart de.svg|mini|Flussdiagramm]]
Aktuell gebräuchlich sind hierfür die [[UML]]-[[Sequenzdiagramm|Sequenzdiagramme]] als Weiterentwicklung der [[Struktogramm|Struktogrammen]] ([[Nassi-Shneiderman-Diagramm]]en).

In [[Struktogramm|Struktogrammen]] wird die Kontrollstruktur durch entsprechende Symbole für Verzweigung und Schleife deutlicher. Struktogramme lassen sich dann in einen strukturierten Programmcode umsetzen.

== Kontrollanweisungen ==
Kontrollanweisungen sind [[Anweisung (Programmierung)|Anweisungen]], die die Kontrollstruktur implementieren:<ref>{{Literatur |Autor=Steyer, Ralph, |Titel=Programmierung in Python : Ein kompakter Einstieg für die Praxis |Hrsg= |Sammelwerk= |Band= |Nummer= |Auflage= |Verlag= |Ort=Wiesbaden |Datum= |ISBN=978-3-658-20705-2 |Seiten=87 |Online= |Abruf=}}</ref>

* Entscheidungsanweisungen: Diese suchen auf Grund einer Bedingung einen Programmfluss heraus. Man spricht hier auch von einem Zweig, denn der Programmfluss verzweigt in verschiedene Varianten.
* Iterationsanweisungen: Diese wiederholen eine bestimmte Anzahl an Anweisungen.
* [[Sprunganweisung|Sprunganweisungen]]: Diese verlassen eine Struktur.

Folgende Programmiersprachen eignen sich unter anderem zur strukturierten Programmierung:

* [[Ada (Programmiersprache)|Ada]]
* [[ALGOL|Algol]]
* [[C (Programmiersprache)|C]] und [[C++]]
* [[C-Sharp|C#]]
* [[COBOL]] (ab COBOL 85)
* [[Fortran]] (ab Fortran 77)
* [[Java (Programmiersprache)|Java]]
* [[Pascal (Programmiersprache)|Pascal]], [[Modula-2]], [[Oberon (Programmiersprache)|Oberon]] und [[Component Pascal]]
* [[Python (Programmiersprache)|Python]]
* [[Visual Basic Classic|Visual Basic]]
* [[Go (Programmiersprache)]]


=== Sprung- und Entscheidungsanweisungen ===
== Konzept anhand eines Beispiels ==
Ohne Kontrollstrukturen müssen Wiederholungen und Bedingungen durch Sprünge (GOTO, IF … GOTO – ''englisch'': springen zu, Wenn … springen zu) realisiert werden. Die Ausgabe der Zahlen von 1 bis 100, jedoch ohne den Bereich 40 bis 60, wird ohne Kontrollstruktur etwa so realisiert ([[Pseudocode]], in Anlehnung an [[BASIC]])
Ohne Kontrollstrukturen müssen Wiederholungen und Bedingungen durch Sprünge (GOTO, IF … GOTO – ''englisch'': springen zu, Wenn … springen zu) realisiert werden. Die Ausgabe der Zahlen von 1 bis 100, jedoch ohne den Bereich 40 bis 60, wird ohne Kontrollstruktur etwa so realisiert ([[Pseudocode]], in Anlehnung an [[BASIC]])


Zeile 24: Zeile 56:
GOTO M1 -- Sprung nach M1
GOTO M1 -- Sprung nach M1
</syntaxhighlight>
</syntaxhighlight>

=== Iterationsanweisungen ===
: '''Unstrukturiertes Programm: Ausgabe der Zahlen 1, 2, ..., 39, 61, 62, 63, ..., 99, 100'''
: '''Unstrukturiertes Programm: Ausgabe der Zahlen 1, 2, ..., 39, 61, 62, 63, ..., 99, 100'''


Die Verwendung von Kontrollstrukturen ist auch Bestandteil der [[Strukturierte Programmierung|strukturierten Programmierung]]. Jede Kontrollstruktur besteht wenigstens aus einem Anfangs- und meistens einem Endeschlüsselwort. Sprachen wie Pascal, [[C (Programmiersprache)|C]], [[Modula]]-2 (und auch neuere Varianten der Sprache BASIC) verfügen über Kontrollstrukturen für Wiederholungen
Die Verwendung von Kontrollstrukturen ist auch Bestandteil der [[Strukturierte Programmierung|strukturierten Programmierung]]. Jede Kontrollstruktur besteht wenigstens aus einem Anfangs- und meistens einem Endeschlüsselwort. Sprachen wie Pascal, [[C (Programmiersprache)|C]], [[Modula]]-2 (und auch neuere Varianten der Sprache BASIC) verfügen über Kontrollanweisungen für Wiederholungen


<syntaxhighlight lang="pascal">
<syntaxhighlight lang="pascal">
Zeile 46: Zeile 80:
Die Schlüsselwörter rahmen dabei die Anweisungen ein, die mehrfach oder bedingt ausgeführt werden. Die obenstehende Programmieraufgabe kann dann folgendermaßen realisiert werden:
Die Schlüsselwörter rahmen dabei die Anweisungen ein, die mehrfach oder bedingt ausgeführt werden. Die obenstehende Programmieraufgabe kann dann folgendermaßen realisiert werden:


<!-- TODO, welche Sprache hat REPEAT und PRINT? -->
<!-- TODO, welche Sprache hat REPEAT und PRINT?
REPEAT=Pascal, PRINT=WriteLn()
werde ich später überarbeiten -->
<syntaxhighlight lang="QBASIC" style="border: dashed 1px #2F6FAB; padding: 1em">
<syntaxhighlight lang="QBASIC" style="border: dashed 1px #2F6FAB; padding: 1em">
I := 1
I := 1
Zeile 63: Zeile 99:
Das Programm erhält eine Struktur, welche meist noch durch Einrückungen verdeutlicht wird. Die neuen Schlüsselwörter und die Formatierung erleichtern das Verständnis des Programmcodes.
Das Programm erhält eine Struktur, welche meist noch durch Einrückungen verdeutlicht wird. Die neuen Schlüsselwörter und die Formatierung erleichtern das Verständnis des Programmcodes.


== Vermeidung von Goto ==
== Entwicklung ==


Kontrollstrukturen helfen Sprünge mit [[Sprunganweisung|Goto]] zu vermeiden, da fast jede Programmieraufgabe mit Hilfe von Bedingungs- und Wiederholungsstrukturen gelöst werden kann. Programmierung ohne Goto unter Verwendung einer modernen Sprache ist heute der Normalfall. Die Programmiersprache [[Java (Programmiersprache)|Java]] unterstützt z.&nbsp;B. keine [[Sprunganweisung|Goto]]-Anweisung mehr.
Kontrollstrukturen helfen Sprünge mit [[Sprunganweisung|Goto]] zu vermeiden, da fast jede Programmieraufgabe mit Hilfe von Bedingungs- und Wiederholungsstrukturen gelöst werden kann. Programmierung ohne Goto unter Verwendung einer modernen Sprache ist heute der Normalfall. Die Programmiersprache [[Java (Programmiersprache)|Java]] unterstützt z.&nbsp;B. keine [[Sprunganweisung|Goto]]-Anweisung mehr.


In den frühen 1960er Jahren waren Flussdiagramme und [[Sprunganweisung]]en in Programmen üblich, was größere Programme nahezu [[Wartbarkeit|unwartbar]] machte, da sie schnell unüberschaubar wurden. 1968 sprach sich [[Edsger W. Dijkstra]] in seinem Aufsatz ''Go To Statement Considered Harmful'' (der Titel geht allerdings auf [[Niklaus Wirth]] zurück), für eine Abschaffung des GOTO-Befehls in allen höheren Programmiersprachen aus.<ref>{{Literatur |Autor=Edsger W. Dijkstra |Titel=Letters to the editor: Go To Statement Considered Harmful |Sammelwerk=Communications of the ACM |Band=11 |Nummer=3 |Jahr=1968 |Monat=3 |DOI=10.1145/362929.362947 |Seiten=147–148}}</ref>
Dabei wird auf einige der Freiheiten verzichtet. Im obenstehenden Beispiel wird bei <code>I=39</code> in der strukturierten Variante trotzdem noch <code>I>100</code> abgefragt, obwohl dies eigentlich nicht notwendig ist. Ein optimierender Compiler könnte dies zwar korrigieren, ist aber wohl nicht in allen Fällen in der Lage, solche Feinheiten zu erkennen.


Im Mai 1966 publizierten Böhm und Jacopini in der Zeitschrift ''Communications of the ACM'' einen Artikel, in dem sie zeigten, dass jedes Programm, das Goto-[[Anweisung (Programmierung)|Anweisungen]] enthält, in ein Goto-freies Programm umgeschrieben werden kann, das nur mit Verzweigung (IF THEN ELSE) und einer Schleife (WHILE ''Bedingung'' DO ''Anweisung'') arbeitet, gegebenenfalls unter Zuhilfenahme von etwas Code-Doppelung und der Einführung von booleschen Variablen (true/false).
Die Verwendung von Kontrollstrukturen verhindert das Entstehen von Quelltext, bei dem auf unübersichtliche Weise hin- und hergesprungen wird. Die folgenden Merkmale kennzeichnen ein Programm bei Verwendung von Kontrollstrukturen:


Anfang der 1970er Jahre wurde damit begonnen, diesen Ansatz zur Selbstbeschränkung auf wenige, typische Elemente umzusetzen. Wegweisend war die Arbeit von [[Niklaus Wirth]] mit seiner Programmiersprache [[Pascal (Programmiersprache)|Pascal]].<!-- Siehe Diskussionsseite.
* Anweisungen, die wiederholt werden, sind durch Schlüsselwörter klar gekennzeichnet
Nicht durchgesetzt hat sich der ''completer'' aus [[Algol 68]], der es erlaubt, die Ausführung der unmittelbar umschließenden Kontrollstruktur jederzeit zu beenden, sobald das Ergebnis feststeht. Dabei war er leicht zu verallgemeinern auf das Beenden der Ausführung einer ''beliebigen'' umschließenden, mit einer Marke (label) zu bezeichnenden Kontrollstruktur. Der ''completer'' kann manche boolesche Variable und manche Abfrage ersetzen und so das Programm übersichtlicher machen.
* Bedingungen und Wiederholungen sind sofort erkennbar
-->
* Vermeidung von Goto und Sprungmarken

== Flussdiagramme und Struktogramme ==

[[Datenflussdiagramm|Flussdiagramm]]e dienen der grafischen Wiedergabe des Programmflusses. Sie besitzen dieselben Freiheiten, die ''Goto'' im Programmcode bietet. 1972 hatten I.&nbsp;Nassi und B.&nbsp;Shneiderman die Idee, Flussdiagramme durch Struktogramme zu ersetzen, bei denen Kontrollstrukturen durch grafische Elemente dargestellt werden, den [[Nassi-Shneiderman-Diagramm]]en. Struktogramme lassen sich dann in einen strukturierten Programmcode umsetzen.

Der unstrukturierte Code zur Ausgabe der Zahlen 1 bis 39 und 61 bis 100 lässt sich durch ein Flussdiagramm wiedergeben:

: [[Datei:Flowchart de.svg|Flussdiagramm]]
: '''Flussdiagramm des unstrukturierten Programms'''
: ''' Ausgabe der Zahlen 1,2,...,39,61,62,...,100'''

Auch der strukturierte Code ließe sich durch ein ähnliches Diagramm darstellen, zusätzlich jedoch durch ein Struktogramm

: [[Datei:Struktogramm.png|Struktogramm]]
: '''Struktogramm des strukturierten Programms'''
: '''Ausgabe der Zahlen 1,2,...,39,61,62,...,100'''


== Einzelnachweise ==
== Einzelnachweise ==

Version vom 12. Januar 2021, 19:41 Uhr

Dieser Artikel wurde im Portal Informatik zur Verbesserung eingetragen. Hilf mit, ihn zu bearbeiten, und beteilige dich an der Diskussion!
Vorlage:Portalhinweis/Wartung/Informatik

Lemma seit zehn Jahren ungeklärt (siehe Diskussionsseite). --Gebu (Diskussion) 18:34, 4. Jan. 2021 (CET)

Kontrollstrukturen sind in der Informatik die Vorgabe, in welcher Reihenfolge die Handlungsschritte eines Algorithmus‘ abgearbeitet werden. In imperativen Programmiersprachen werden sie durch Kontrollanweisungen (Steuerkonstrukte) implementiert. Mit Kontrollstrukturen können Programme auf verschiedene Zustände reagieren, indem Programmteile nur bedingt (bedingte Anweisung) oder wiederholt (Schleife) ausgeführt werden.[1]

Struktogramm

Konventionelle Programmiermodelle und -sprachen konstruieren Algorithmen mit Hilfe folgender Kontrollstrukturen:

Das Programmierparadigma der Strukturierten Programmierung beinhaltet neben dem Paradigma der prozeduralen Programmierung die Beschränkung auf lediglich drei Kontrollstrukturen Sequenz, Verzweigung und Schleifen.

Die Verwendung von Kontrollstrukturen verhindert das Entstehen von Quelltext, bei dem auf unübersichtliche Weise hin- und hergesprungen wird, dem sogenannten Spaghetti-Code. Die folgenden Merkmale kennzeichnen ein Programm bei Verwendung von Kontrollstrukturen:

  • Anweisungen, die wiederholt werden, sind durch Schlüsselwörter klar gekennzeichnet
  • Bedingungen und Wiederholungen sind sofort erkennbar
  • Vermeidung von Goto und Sprungmarken.

Visualisierung

Kontrollstrukturen können mittels Diagrammen visualisiert werden.

Flussdiagramm

Aktuell gebräuchlich sind hierfür die UML-Sequenzdiagramme als Weiterentwicklung der Struktogrammen (Nassi-Shneiderman-Diagrammen).

In Struktogrammen wird die Kontrollstruktur durch entsprechende Symbole für Verzweigung und Schleife deutlicher. Struktogramme lassen sich dann in einen strukturierten Programmcode umsetzen.

Kontrollanweisungen

Kontrollanweisungen sind Anweisungen, die die Kontrollstruktur implementieren:[2]

  • Entscheidungsanweisungen: Diese suchen auf Grund einer Bedingung einen Programmfluss heraus. Man spricht hier auch von einem Zweig, denn der Programmfluss verzweigt in verschiedene Varianten.
  • Iterationsanweisungen: Diese wiederholen eine bestimmte Anzahl an Anweisungen.
  • Sprunganweisungen: Diese verlassen eine Struktur.

Folgende Programmiersprachen eignen sich unter anderem zur strukturierten Programmierung:

Sprung- und Entscheidungsanweisungen

Ohne Kontrollstrukturen müssen Wiederholungen und Bedingungen durch Sprünge (GOTO, IF … GOTO – englisch: springen zu, Wenn … springen zu) realisiert werden. Die Ausgabe der Zahlen von 1 bis 100, jedoch ohne den Bereich 40 bis 60, wird ohne Kontrollstruktur etwa so realisiert (Pseudocode, in Anlehnung an BASIC)

     I := 1
 M1: PRINT I                  -- Ausgabe von I
     IF I=39 THEN GOTO M2     -- Wenn ... springen (bedingte Ausführung)
     I := I+1
     IF I<=100 THEN GOTO M1   -- Wenn ... springen (wiederholte Ausführung)
     END                      -- Programmende
 M2: I := 61
     GOTO M1                  -- Sprung nach M1

Iterationsanweisungen

Unstrukturiertes Programm: Ausgabe der Zahlen 1, 2, ..., 39, 61, 62, 63, ..., 99, 100

Die Verwendung von Kontrollstrukturen ist auch Bestandteil der strukturierten Programmierung. Jede Kontrollstruktur besteht wenigstens aus einem Anfangs- und meistens einem Endeschlüsselwort. Sprachen wie Pascal, C, Modula-2 (und auch neuere Varianten der Sprache BASIC) verfügen über Kontrollanweisungen für Wiederholungen

     REPEAT
       ''Anweisungen''
     UNTIL ''Bedingung''

und bedingte Ausführung von Anweisungen:

     IF ''Bedingung'' THEN
        ''Anweisungen''
     ELSE
        ''Anweisungen''
     ENDIF

Die Schlüsselwörter rahmen dabei die Anweisungen ein, die mehrfach oder bedingt ausgeführt werden. Die obenstehende Programmieraufgabe kann dann folgendermaßen realisiert werden:

     I := 1
     REPEAT              -- Wiederhole
        PRINT I
        IF I=39 THEN     --    Wenn ... Dann
           I := 61
        ELSE             --    Sonst
           I := I+1
        ENDIF            --    EndeWenn
     UNTIL I>100         -- bis
     END                 -- Programmende
Strukturiertes Programm: Ausgabe der Zahlen 1, 2, ..., 39, 61, 62, 63, ..., 99, 100

Das Programm erhält eine Struktur, welche meist noch durch Einrückungen verdeutlicht wird. Die neuen Schlüsselwörter und die Formatierung erleichtern das Verständnis des Programmcodes.

Entwicklung

Kontrollstrukturen helfen Sprünge mit Goto zu vermeiden, da fast jede Programmieraufgabe mit Hilfe von Bedingungs- und Wiederholungsstrukturen gelöst werden kann. Programmierung ohne Goto unter Verwendung einer modernen Sprache ist heute der Normalfall. Die Programmiersprache Java unterstützt z. B. keine Goto-Anweisung mehr.

In den frühen 1960er Jahren waren Flussdiagramme und Sprunganweisungen in Programmen üblich, was größere Programme nahezu unwartbar machte, da sie schnell unüberschaubar wurden. 1968 sprach sich Edsger W. Dijkstra in seinem Aufsatz Go To Statement Considered Harmful (der Titel geht allerdings auf Niklaus Wirth zurück), für eine Abschaffung des GOTO-Befehls in allen höheren Programmiersprachen aus.[3]

Im Mai 1966 publizierten Böhm und Jacopini in der Zeitschrift Communications of the ACM einen Artikel, in dem sie zeigten, dass jedes Programm, das Goto-Anweisungen enthält, in ein Goto-freies Programm umgeschrieben werden kann, das nur mit Verzweigung (IF THEN ELSE) und einer Schleife (WHILE Bedingung DO Anweisung) arbeitet, gegebenenfalls unter Zuhilfenahme von etwas Code-Doppelung und der Einführung von booleschen Variablen (true/false).

Anfang der 1970er Jahre wurde damit begonnen, diesen Ansatz zur Selbstbeschränkung auf wenige, typische Elemente umzusetzen. Wegweisend war die Arbeit von Niklaus Wirth mit seiner Programmiersprache Pascal.

Einzelnachweise

  1. Reisig, Wolfgang, 1950-, Freytag, Johann Christoph, 1954-: Informatik : aktuelle Themen im historischen Kontext. Springer, Berlin 2006, ISBN 978-3-540-32743-1, S. 278.
  2. Steyer, Ralph,: Programmierung in Python : Ein kompakter Einstieg für die Praxis. Wiesbaden, ISBN 978-3-658-20705-2, S. 87.
  3. Edsger W. Dijkstra: Letters to the editor: Go To Statement Considered Harmful. In: Communications of the ACM. Band 11, Nr. 3, März 1968, S. 147–148, doi:10.1145/362929.362947.