www.wikidata.de-de.nina.az
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 konnen Programme auf verschiedene Zustande reagieren indem Programmteile nur bedingt bedingte Anweisung oder wiederholt Schleife ausgefuhrt werden 1 StruktogrammInhaltsverzeichnis 1 Geschichtliche Entwicklung 2 Kontrollstrukturen 3 Kontrollanweisungen 3 1 Blockstrukturanweisung Sequenz 3 2 Bedingte Anweisung 3 3 Verzweigung Alternative 3 4 Schleife Wiederholung Iterationsanweisung 3 5 Sprunganweisung 3 6 Rucksprung 3 7 Ereignis und Ausnahmebehandlung 4 Grafische Darstellung 5 Weitere Kategorisierungen 6 EinzelnachweiseGeschichtliche Entwicklung BearbeitenKontrollstrukturen helfen Sprunge mit Goto zu vermeiden da fast jede Programmieraufgabe mit Hilfe von Bedingungs und Wiederholungsstrukturen gelost werden kann Programmierung ohne Goto unter Verwendung einer modernen Sprache ist heute der Normalfall Die Programmiersprache Java unterstutzt z B keine Goto Anweisung mehr Heinz Rutishauser entwickelte von 1949 bis 1951 die einfache algebraische Programmiersprache Superplan Rutishauser kannte Konrad Zuses Arbeit uber Programmiersprachen d h Zuses Plankalkul und wahlte den Namen in Anlehnung an Zuses Bezeichnung Rechenplan fur ein einzelnes Programm Rutishausers einfache Sprache hatte nur eine Kontrollstruktur die Fur Schleife Fur i 2 1 n a i displaystyle a i nbsp 3 a i displaystyle a i nbsp In den fruhen 1960er Jahren waren Flussdiagramme und Sprunganweisungen in Programmen ublich was grossere Programme nahezu unwartbar machte da sie schnell unuberschaubar wurden 1968 sprach sich Edsger W Dijkstra in seinem Aufsatz Go To Statement Considered Harmful der Titel geht allerdings auf Niklaus Wirth zuruck fur eine Abschaffung des GOTO Befehls in allen hoheren Programmiersprachen aus 2 Im Mai 1966 publizierten Bohm und Jacopini in der Zeitschrift Communications of the ACM einen Artikel in dem sie zeigten dass jedes Programm das Goto Anweisungen enthalt 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 Einfuhrung von booleschen Variablen true false Anfang der 1970er Jahre wurde damit begonnen diesen Ansatz zur Selbstbeschrankung auf wenige typische Elemente umzusetzen Wegweisend war die Arbeit von Niklaus Wirth mit seiner Programmiersprache Pascal Kontrollstrukturen BearbeitenKonventionelle Programmiermodelle und sprachen konstruieren Algorithmen mit Hilfe folgender Kontrollstrukturen 3 Sequenz die Anweisungen werden linear ausgefuhrt Bedingte Anweisung und Verzweigung die Anweisungen werden nur bei einem bestimmten Zustand ausgefuhrt Schleife oder Iteration die Anweisungen werden nur solange ausgefuhrt wie oder bis ein bestimmter Zustand erreicht wird Rekursion Bei der rekursiven Programmierung ruft sich eine Prozedur Funktion oder Methode in einem Computerprogramm selbst wieder auf Blockstruktur Mehrere Anweisungen werden gruppiert und beschranken ggf den Gultigkeitsbereich bestimmter Variablen oder Aktionen Das Programmierparadigma der Strukturierten Programmierung beinhaltet neben dem Paradigma der prozeduralen Programmierung die Beschrankung auf lediglich drei Kontrollstrukturen Sequenz Verzweigung und Schleifen Die strukturierte Programmierung verhindert das Entstehen von Quelltext bei dem auf unubersichtliche Weise hin und hergesprungen wird dem sogenannten Spaghetti Code Die folgenden Regeln dienen der Nutzung von Kontrollstrukturen Anweisungen die wiederholt werden sind durch Schlusselworter klar gekennzeichnet Bedingungen und Wiederholungen sind sofort erkennbar Sprunganweisungen und Sprungmarken werden vermieden Kontrollanweisungen BearbeitenKontrollanweisungen auch Kontrollflussanweisungen Steuerkonstrukte sind Anweisungen die eine Kontrollstruktur implementieren 4 Blockstrukturanweisung Sequenz Bearbeiten Blockstrukturanweisungen kennzeichnen Beginn und Ende einer Blockstruktur Sequenz und strukturieren damit Programmteile In Pascal oder Visual Basic werden sie mit begin end gekennzeichnet in einigen Programmiersprachen werden sie durch Klammernpaare gekennzeichnet Im Quelltext werden die Anweisungen einer Sequenz einheitlich eingeruckt um die Blockstruktur besser sichtbar zu machen In Python wird auf Blockstrukturanweisungen verzichtet die Zugehorigkeit von Anweisungen zu Blocken wird hier allein durch Einruckung gekennzeichnet Bedingte Anweisung Bearbeiten Hauptartikel Bedingte Anweisung und Verzweigung Eine Bedingte Anweisung ist eine Anweisung die nur bei der Erfullung einer bestimmten Bedingung ausgefuhrt wird Durch sie kann ein Programm auf unterschiedliche Zustande und Benutzereingaben reagieren Eine Bedingte Anweisung besteht aus einer Bedingungsprufung und der eigentlichen Anweisung IF lt Bedingung gt THEN lt Anweisung gt Nur dann wenn eine Bedingung erfullt ist wird die Anweisung ausgefuhrt Koppelt man eine Bedingungsprufung und einen Sprungbefehl if bedingung then methode so erhalt man eine Verzweigung bei der eine Methode nur bei positiver Auswertung des Bedingungsausdrucks TRUE ausgefuhrt wird Durch die Prufung des Zustands einer Zahlervariable konnen auch Schleifen implementiert werden Verzweigung Alternative Bearbeiten Fur eine alternative Verzweigung bieten viele Programmiersprachen das IF THEN ELSE Konstrukt in der Form IF lt Bedingung gt THEN lt Anweisung1 gt ELSE lt Anweisung2 gt Bei positiver Bedingung wird Anweisung1 ausgefuhrt In allen anderen Fallen ELSE wird Anweisung2 ausgefuhrt So kann ein Programm beispielsweise abhangig von einer Eingabe zwei unterschiedliche Methoden aufrufen Viele Sprachen erlauben weitere Prufungen und damit verbundene alternative Verzweigungen in der Form IF ELIF ELSE oder ein Konstrukt aus Case und Switch Anweisungen Beispiel in Python Die Funktion vorzeichen ermittelt das Vorzeichen des Ausdrucks i def vorzeichen i if i gt 0 Bedingung return positiv bedingte Anweisung1 elif i lt 0 weitere Bedingung return negativ bedingte Anweisung2 else anderenfalls return neutral 0 bedingte Anweisung3 Schleife Wiederholung Iterationsanweisung Bearbeiten Hauptartikel Schleife Programmierung Schleifen dienen dazu Anweisungs Blocke wiederholt auszufuhren Es gibt viele Erscheinungsformen von Schleifen Zahlschleifen for Schleife Bedingungsgesteuerte Schleifen while Schleife Mengengesteuerte Schleifen for in bzw foreach Schleife EndlosschleifenBeispiel in Python Fur die Zahlen 5 2 0 und 1000 wird nacheinander das jeweilige Vorzeichen ausgegeben for i in 5 2 0 1000 print vorzeichen i In den Schleifen gibt es je nach Programmiersprache Anweisungen zum vorzeitigen Verlassen von Schleifen break zur Fortsetzung mit der nachsten Iteration continue zur Wiederholung der aktuellen Iteration retry oder zum erneuten Starten der Schleife redo Ruby Programmiersprache List Comprehensions erzeugen Mengen mit Schleifen und Bedingungskonstrukten m x 2 for x in range 12 if x 2 0 ergibt die Quadratzahlen aus geraden x Sprunganweisung Bearbeiten Hauptartikel Sprunganweisung Die Anweisungen in einer Sequenz werden sequentiell also nacheinander abgearbeitet Bei einem Sprung wird eine durch Adresse oder durch Label festgelegte Sprungmarke angesprungen und der Programmverlauf dort fortgesetzt Bedingte Sprunganweisungen im Maschinencode sind meist die Grundlage fur bedingte Ausfuhrung sowie Schleifen in der Hochsprache unbedingte Sprunganweisungen im Maschinencode sind meist die Grundlage fur Funktionsaufrufe oder Endlosschleifen Beim Aufruf eines Unterprogramms wird zunachst abgespeichert wohin nach dem Ende des Unterprogramms zuruckzukehren ist Anschliessend mussen ggf Aufrufparameter an eine vereinbarte Stelle gelegt werden erst danach kann das Unterprogramm angesprungen werden Die Verwendung von Sprunganweisungen in Hochsprachen ist umstritten da sie schnell zu Spaghetticode fuhren kann Sprunganweisungen lassen sich in Hochsprachen durch andere Kontrollstrukturen ersetzen Rucksprung Bearbeiten Hauptartikel Rucksprung Wird bei einem Sprungbefehl ein Unterprogramm oder eine andere Methode aufgerufen so kann diese mittels return wieder verlassen und das Programm direkt nach dem Absprungpunkt fortgesetzt werden Dabei konnen sogenannte Ruckgabewerte ubergeben werden Ereignis und Ausnahmebehandlung Bearbeiten Hauptartikel Ausnahmebehandlung Mit der Ausnahmebehandlung kann ein Programm die Kontrolle bei bestimmten Programmzustanden meistens Fehlerzustanden an andere Programmebenen zur Weiterbehandlung weiterzureichen Ausnahmen oder Exceptions haben in weiten Teilen die Behandlung von Fehlern mittels Fehlercodes oder Sprunganweisungen abgelost Grafische Darstellung Bearbeiten nbsp UML DiagrammeKontrollstrukturen konnen mittels Diagrammen visualisiert und modelliert werden nbsp FlussdiagrammAktuell gebrauchlich sind hierfur die UML Sequenzdiagramme als Weiterentwicklung der Struktogrammen Nassi Shneiderman Diagrammen und UML Aktivitatsdiagramme als Weiterentwicklung der Flussdiagramme In Struktogrammen wird die Kontrollstruktur durch entsprechende Symbole fur Verzweigung und Schleife deutlicher Struktogramme lassen sich dann in einen strukturierten Programmcode umsetzen Weitere Kategorisierungen BearbeitenDie Arten von Kontrollflussanweisungen die von verschiedenen Sprachen unterstutzt werden variieren konnen nach ihrer Wirkung kategorisiert werden Kennzeichnung des Beginns und Endes einer Blockstruktur Blockstrukturanweisung Fortsetzung bei einer anderen Anweisung Sprunganweisungen Beenden des Programms oder Prozedur Methode oder Funktion Verhindern einer weiteren Ausfuhrung Rucksprung bedingungsloser Stopp Ausfuhren einer Reihe von Anweisungen nur wenn eine Bedingung erfullt ist bedingte Anweisung oder Verzweigung Ausfuhren einer Reihe von Anweisungen in einer Schleife nicht oder mehrmals bis oder solange wie eine Bedingung erfullt ist Iterationsanweisung Ausfuhren einer Reihe entfernter Anweisungen nach Eintritt eines Ereignisses Ereignis und Ausnahmebehandlung Manche Kontrollanweisungen wie zum Beispiel der unbedingte Sprung lassen sich nicht eindeutig einer Kontrollstruktur zuordnen oder konnen fur mehrere Kontrollstrukturen notwendig sein Viele Programmiersprachen wie zum Beispiel imperative Sprachen enthalten Kontrollanweisungen Einzelnachweise Bearbeiten Reisig Wolfgang 1950 Freytag Johann Christoph 1954 Informatik aktuelle Themen im historischen Kontext Springer Berlin 2006 ISBN 978 3 540 32743 1 S 278 Edsger W Dijkstra Letters to the editor Go To Statement Considered Harmful In Communications of the ACM Band 11 Nr 3 Marz 1968 S 147 148 doi 10 1145 362929 362947 Reisig Wolfgang 1950 Freytag Johann Christoph 1954 Informatik aktuelle Themen im historischen Kontext Springer Berlin 2006 ISBN 978 3 540 32743 1 S 301 Steyer Ralph Programmierung in Python Ein kompakter Einstieg fur die Praxis Wiesbaden ISBN 978 3 658 20705 2 S 87 Abgerufen von https de wikipedia org w index php title Kontrollstruktur amp oldid 236555582