Kontrollstruktur

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

Geschichtliche 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.

Heinz Rutishauser entwickelte von 1949 bis 1951 die einfache algebraische Programmiersprache „Superplan“. Rutishauser kannte Konrad Zuses Arbeit über Programmiersprachen, d. h. Zuses Plankalkül und wählte den Namen in Anlehnung an Zuses Bezeichnung „Rechenplan“ für ein einzelnes Programm. Rutishausers einfache Sprache hatte nur eine Kontrollstruktur: die Für-Schleife.

Für i=2(1)n:  + 3 = 

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.[2]

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.

Kontrollstrukturen

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

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

Die strukturierte Programmierung verhindert das Entstehen von Quelltext, bei dem auf unübersichtliche Weise hin- und hergesprungen wird, dem sogenannten Spaghetti-Code. Die folgenden Regeln dienen der Nutzung von Kontrollstrukturen:

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

Kontrollanweisungen

Kontrollanweisungen (auch Kontrollflussanweisungen, Steuerkonstrukte) sind Anweisungen, die eine Kontrollstruktur implementieren.[4]

Blockstrukturanweisung (Sequenz)

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 eingerückt, um die Blockstruktur besser sichtbar zu machen. In Python wird auf Blockstrukturanweisungen verzichtet; die Zugehörigkeit von Anweisungen zu Blöcken wird hier allein durch Einrückung gekennzeichnet.

Bedingte Anweisung

Eine Bedingte Anweisung ist eine Anweisung, die nur bei der Erfüllung einer bestimmten Bedingung ausgeführt wird. Durch sie kann ein Programm auf unterschiedliche Zustände und Benutzereingaben reagieren. Eine Bedingte Anweisung besteht aus einer Bedingungsprüfung und der eigentlichen Anweisung IF <Bedingung> THEN <Anweisung>. Nur dann, wenn eine Bedingung erfüllt ist, wird die Anweisung ausgeführt. Koppelt man eine Bedingungsprüfung und einen Sprungbefehl if bedingung then methode(), so erhält man eine Verzweigung, bei der eine Methode nur bei positiver Auswertung des Bedingungsausdrucks (TRUE) ausgeführt wird. Durch die Prüfung des Zustands einer Zählervariable können auch Schleifen implementiert werden.

Verzweigung (Alternative)

Für eine alternative Verzweigung bieten viele Programmiersprachen das IF-THEN-ELSE Konstrukt in der Form IF <Bedingung> THEN <Anweisung1> ELSE <Anweisung2>. Bei positiver Bedingung wird Anweisung1 ausgeführt. In allen anderen Fällen (ELSE) wird Anweisung2 ausgeführt. So kann ein Programm beispielsweise abhängig von einer Eingabe zwei unterschiedliche Methoden aufrufen. Viele Sprachen erlauben weitere Prüfungen 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>0:                   #Bedingung
        return "positiv +"    #bedingte Anweisung1
    elif i<0:                 #weitere Bedingung
        return "negativ -"    #bedingte Anweisung2
    else                      #anderenfalls
        return "neutral 0"    #bedingte Anweisung3

Schleife (Wiederholung, Iterationsanweisung)

Schleifen dienen dazu, Anweisungs-Blöcke wiederholt auszuführen. Es gibt viele Erscheinungsformen von Schleifen:

Beispiel in Python (Für 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 nächsten 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

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 für bedingte Ausführung sowie Schleifen (in der Hochsprache); unbedingte Sprunganweisungen (im Maschinencode) sind meist die Grundlage für Funktionsaufrufe oder Endlosschleifen.

Beim Aufruf eines Unterprogramms wird zunächst abgespeichert, wohin nach dem Ende des Unterprogramms zurückzukehren ist. Anschließend müssen 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 führen kann. Sprunganweisungen lassen sich (in Hochsprachen) durch andere Kontrollstrukturen ersetzen.

Rücksprung

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 können sogenannte Rückgabewerte übergeben werden.

Ereignis- und Ausnahmebehandlung

Mit der Ausnahmebehandlung kann ein Programm die Kontrolle bei bestimmten Programmzuständen – meistens Fehlerzuständen – an andere Programmebenen zur Weiterbehandlung weiterzureichen. Ausnahmen oder Exceptions haben in weiten Teilen die Behandlung von Fehlern mittels Fehlercodes oder Sprunganweisungen abgelöst.

Grafische Darstellung

UML-Diagramme

Kontrollstrukturen können mittels Diagrammen visualisiert und modelliert werden.

Flussdiagramm

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

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

Weitere Kategorisierungen

Die Arten von Kontrollflussanweisungen, die von verschiedenen Sprachen unterstützt werden, variieren, können 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 Ausführung (Rücksprung bedingungsloser Stopp)
  • Ausführen einer (Reihe von) Anweisungen nur, wenn eine Bedingung erfüllt ist (bedingte Anweisung oder Verzweigung)
  • Ausführen einer Reihe von Anweisungen in einer Schleife nicht oder mehrmals, bis oder solange wie eine Bedingung erfüllt ist (Iterationsanweisung)
  • Ausführen 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 können für mehrere Kontrollstrukturen notwendig sein.

Viele Programmiersprachen wie zum Beispiel imperative Sprachen enthalten Kontrollanweisungen.

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. 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.
  3. Reisig, Wolfgang, 1950-, Freytag, Johann Christoph, 1954-: Informatik : aktuelle Themen im historischen Kontext. Springer, Berlin 2006, ISBN 978-3-540-32743-1, S. 301.
  4. Steyer, Ralph,: Programmierung in Python : Ein kompakter Einstieg für die Praxis. Wiesbaden, ISBN 978-3-658-20705-2, S. 87.

Read other articles:

Surah ke-1الفاتحة al-FātiḥahPembukaTeks ArabTerjemahan KemenagKlasifikasiMakkiyahNama lainFatihatul Kitab,[1] Ummul Qur'an, Ummul Kitab, as-Sab'ul Masani,[2] al-Kanz,[1] al-Wafiyah,[1] al-Kafiyah,[1] al-Asas,[1] asy-Syafiyah,[3] al-Hamd,[1] as-Shalah,[1] al-Ruqyah,[1] asy-Syukru,[1] ad-Du'au,[1] asy-Syifa,[1] al-Waqiyah,[1]JuzJuz 1, Hizb 1Jumlah ruku1Jumlah ayat7Jumlah kat...

 

1841 U.S. Supreme Court case on the legality of the Atlantic slave trade For other uses, see Amistad (disambiguation). 1841 United States Supreme Court caseUnited States v. The AmistadSupreme Court of the United StatesArgued February 22 – March 2, 1841Decided March 9, 1841Full case nameThe United States, Appellants, v. The Libellants and Claimants of the schooner Amistad, her tackle, apparel, and furniture, together with her cargo, and the Africans mentioned and described in the s...

 

Prince and commander in Iran (1517–1549) Bahram Mirza SafaviBorn15 September 1517Maragheh, IranDied11 October 1549 (aged 32)Kurdistan province, IranBurialMashhadSpouseZaynab Sultan KhanumIssueSoltan Hosayn MirzaIbrahim MirzaBadi-al Zaman Mirza SafaviDynastySafavidFatherIsmail IMotherTajlu KhanumReligionTwelver Shia IslamMilitary careerBattles/wars Ottoman–Safavid War of 1532–1555 Bahram Mirza Safavi (Persian: بهرام میرزای صفوی, romanized: Bahrām Mīrzā Safavī; 15 ...

Miss Universe 2016Iris Mittenaere, Miss Universe 2016.Tanggal30 Januari 2017[1]TempatMall of Asia Arena, Pasay, Metro Manila, Filipina[2]Pembawa acaraSteve HarveyAshley GrahamPengisi acaraFlo Rida[3]Boyz II Men[4]PenyiaranInternasional:FoxAztecaPenyiar resmi:Solar EntertainmentABS-CBNGMA NetworkTV5Peserta86[5]Finalis/Semifinalis13[6]DebutSierra LeoneTidak tampilEl SalvadorGabonGhanaIrlandiaLebanonMontenegroSerbiaYunaniTampil ...

 

Questa voce o sezione deve essere rivista e aggiornata appena possibile. Sembra infatti che questa voce contenga informazioni superate e/o obsolete. Se puoi, contribuisci ad aggiornarla. Questa voce o sezione sull'argomento Competizioni calcistiche non è ancora formattata secondo gli standard. Contribuisci a migliorarla secondo le convenzioni di Wikipedia. Segui i suggerimenti del progetto di riferimento. Segunda División 2011-2012Liga Adelante 2011-2012 Competizione Segunda División...

 

Convair 990Convair 990 Majapahit milik Garuda Indonesian Airways di Bandar Udara Internasional Schiphol, Amsterdam tahun 1965TipeAirlinerTerbang perdana24 Januari 1961DipensiunkanSeptember 1987Pengguna utamaAmerican AirlinesPengguna lainSwissairTahun produksi1961-1963Jumlah produksi37Acuan dasarConvair 880 Convair CV-990A milik maskapai Spantax dari Spanyol di Bandar Udara Basel, Swiss. Walau mesin pada tenaga saat mendarat, tetap mengeluarkan asap (foto diambil tahun 1976). Convair 990 merup...

2002 film by Mark Pellington The Mothman PropheciesTheatrical release posterDirected byMark PellingtonScreenplay byRichard HatemBased onThe Mothman Propheciesby John KeelProduced by Gary W. Goldstein Gary Lucchesi Tom Rosenberg Starring Richard Gere Laura Linney Will Patton Debra Messing Lucinda Jenney Alan Bates CinematographyFred MurphyEdited byBrian BerdanMusic bytomandandyProductioncompaniesScreen GemsLakeshore EntertainmentDistributed bySony Pictures Releasing[1]Release date Janu...

 

Greek professional three-cushion billiards player Filippos Kasidokostas Filippos Kasidokostas (GRC) Medal record Representing  Greece Men's Three-cushion billiards[1] UMB World Three-cushion Championship 2003 World Three-cushion Championship Individual 2004 World Three-cushion Championship Individual 2009 World Three-cushion Championship Individual 2013 World Three-cushion Championship Individual World Three-cushion Championship Juniors 2001 World Three-cushion Championship Junio...

 

German car maker 1902 Maurer-Union Maurer-Union was a German car maker located in Nuremberg.[1] From 1900–1910, Maurer-Union produced 300 to 400 cars per year. It was one of the first manufacturers that introduced continuously variable transmission using a friction drive.[citation needed] References ^ Le Claire, Gregor (25 February 2009). Nürnberger Autopionier erfand Automatik mit [Nuremberg car pioneer co-invented automatic transmission]. Nürnberger Nachrichten (...

Canadian video game development studio Warner Bros. Games Montréal Inc.Company typeSubsidiaryIndustryVideo gamesFounded2010; 14 years ago (2010)HeadquartersMontreal, Quebec, CanadaKey peopleStephane Roy (VP, studio head)Number of employees350[1]ParentWarner Bros. GamesWebsitehttp://wbgamesmontreal.com/ WB Games Montréal Inc. is a Canadian video game developer based in Montreal, Quebec. It is a subsidiary of Warner Bros. Games and is best known for developing Batman...

 

Pour les articles homonymes, voir SFP. Société française de photographieHistoireFondation 15 novembre 1854CadreSigle SFPForme juridique Association déclaréeObjet social Concourir aux progrès scientifiques et artistiques de la photographie et de ses applicationsDomaines d'activité Histoire de la photographie, autres organisations fonctionnant par adhésion volontaireSiège Paris (58, rue de Richelieu, 75002) (depuis le 17 octobre 2022)Pays  FranceOrganisationFondateur Henri Victor...

 

Political system of Latvia This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Politics of Latvia – news · newspapers · books · scholar · JSTOR (February 2009) (Learn how and when to remove this message) Politics of Latvia Constitution President Edgars Rinkēvičs Government Prime Minister Evika Siliņa Cabinet ...

Gobierno de la Comandancia General de las Fuerzas Armadas de Rusia del Sur Правительство при главнокомандующем Вооружёнными Силами Юга России LocalizaciónPaís RusiaInformación generalTipo Órgano Legislativo y Administrativo del Estado Ruso en el Sur de RusiaOrganizaciónPresidente Antón DenikinHistoriaFundación 30 de diciembre de 1919Disolución marzo de 1920Sucesión Comandancia General de las Fuerzas Armadas de Rusia del Sur ...

 

Artikel ini tidak memiliki referensi atau sumber tepercaya sehingga isinya tidak bisa dipastikan. Tolong bantu perbaiki artikel ini dengan menambahkan referensi yang layak. Tulisan tanpa sumber dapat dipertanyakan dan dihapus sewaktu-waktu.Cari sumber: Madhabar Singh Thapa – berita · surat kabar · buku · cendekiawan · JSTOR Madhabar Singh Thapa Madhabar Singh Thapa (kematian 1902) adalah Perdana Menteri Nepal dari tahun 1900 ke 1902. Dia dibunuh oleh J...

 

جامعة تافريسكي الوطنية الشعار (بالأوكرانية: Пізнай самого себе)‏،  و(باللاتينية: Nosce Te Ipsum)‏  معلومات التأسيس 1918  الموقع الجغرافي إحداثيات 44°57′04″N 34°06′17″E / 44.95111111°N 34.10472222°E / 44.95111111; 34.10472222   المكان سيمفروبول،  وكييف  البلد أوكرانيا  سميت باسم...

مانويل خيمينيز خيمينيز معلومات شخصية الميلاد 26 يناير 1964 (العمر 60 سنة)الرحل (إشبيلية)  الطول 1.78 م (5 قدم 10 بوصة) مركز اللعب مدافع الجنسية إسبانيا  معلومات النادي النادي الحالي الوحدة مسيرة الشباب سنوات فريق إشبيلية المسيرة الاحترافية1 سنوات فريق م. (هـ.) 1981–1984 إشب...

 

De l’Esprit géométrique et de l’art de persuaderFormat TraitéAuteur Blaise PascalGenre Philosophie, Littérature, MathématiquesPays Francemodifier - modifier le code - modifier Wikidata De l’Esprit géométrique et de l’art de persuader est un opuscule composé par Pascal vers 1658[1]. Il devait être la préface à un essai sur les éléments de géométrie, destiné aux Petites écoles de Port-Royal, mais ce traité fut finalement rédigé par Arnauld neuf ans plus tard[2]. Quoi...

 

1989 American film by Carl Schenkel The Mighty QuinnFilm posterDirected byCarl SchenkelScreenplay byHampton FancherBased onFinding Maubeeby A. H. Z. CarrProduced bySandy LiebersonMarion HuntEd ElbertStarring Denzel Washington Mimi Rogers M. Emmet Walsh Sheryl Lee Ralph Robert Townsend CinematographyJacques SteynEdited byJohn JympsonMusic byAnne DudleyProductioncompanyA&M FilmsDistributed byMetro-Goldwyn-MayerRelease date February 16, 1989 (1989-02-16) Running time98 minutes...

Il bambino, la talpa, la volpe e il cavalloUna scena del filmTitolo originaleThe Boy, the Mole, the Fox and the Horse Lingua originaleinglese Paese di produzioneRegno Unito, Stati Uniti d'America Anno2022 Durata34 min Genereanimazione RegiaPeter Baynton, Charlie Mackesy Soggettodal libro di Charlie Mackesy dalla traduzione del libro autrice C Silvestri SceneggiaturaCharlie Mackesy, Jon Croker ProduttoreJ. J. Abrams, Matthew Freud, Hannah Minghella, Cara Speller Produttore esecutivoAyela B...

 

「武士」のその他の用法については「武士 (曖昧さ回避)」をご覧ください。 この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。 出典を追加して記事の信頼性向上にご協力ください。(このテンプレートの使い方)出典検索?: 武士 – ニュース · 書籍 · スカラー · CiNii · J-STAGE · NDL · dlib.jp · ジャパンサ�...