Movatterモバイル変換


[0]ホーム

URL:


Zum Inhalt springen
WikipediaDie freie Enzyklopädie
Suche

Bedingte Anweisung und Verzweigung

aus Wikipedia, der freien Enzyklopädie
Aktivitätsdiagramm einer if-else-Anweisung

Einebedingte Anweisung ist eineKontrollstruktur in derProgrammierung. Ein Programmabschnitt wird dabei nur unter einer bestimmten Bedingung ausgeführt.

EineVerzweigung legt fest, welcher von zwei oder mehreren Programmabschnitten, abhängig von einer oder mehreren Bedingungen, ausgeführt wird.

Bedingte Anweisung

[Bearbeiten |Quelltext bearbeiten]
Struktogramm einer if-Anweisung

Eine bedingte Anweisung besteht aus einerBedingung und einemCodeabschnitt, der wiederum aus einer oder mehrerenAnweisungen besteht. Wird beimProgrammablauf die bedingte Anweisung erreicht, dann wird erst die Bedingung ausgewertet, und falls diese zutrifft (und nur dann), wird anschließend der Codeabschnitt ausgeführt. Danach wird die Programmausführung mit den auf die bedingte Anweisung folgenden Anweisungen fortgesetzt.

InPseudocode formuliert hat eine bedingte Anweisung folgende Form:

fallsBedingung dannAnweisung(en)ende

Die Bedingung ist einAusdruck, der nach den dafür geltenden Regeln derProgrammiersprache (Semantik undVorrangfolge derOperatoren) ausgewertet wird. Er muss als Resultat einenWahrheitswert (wahr: Bedingung trifft zu, oderfalsch: Bedingung trifft nicht zu) liefern, oder sein Resultat muss nach denUmwandlungsregeln der Sprache implizit in einen Wahrheitswert umwandelbar sein.

Die Bedingung ist nicht generell gültig, sondern zeitabhängig. Sie wird jedes Mal ausgewertet, wenn die bedingte Anweisung beim Programmablauf erreicht wird, und es kommt darauf an, ob sie zu dem jeweiligen Zeitpunkt zutrifft oder nicht. Das kann sich von mal zu mal ändern, wenn die bedingte Anweisung mehrmals erreicht wird.

Beispiele: In vielen Programmiersprachen mitC-ähnlicher Syntax, z. B.C++,C# undJava, werden bedingte Anweisungen folgendermaßen formuliert:

if(Temperatur<20)Heizung_Einschalten();

Ist der hier abgefragte WertTemperatur kleiner als 20, wird dieFunktionHeizung_Einschalten() ausgeführt. Ist die Bedingung nicht erfüllt, alsoTemperaturnicht kleiner als 20, wird die Anweisung übersprungen.

In derDatenbankspracheSQL gibt es etwa folgendes Konstrukt:

DELETEFROMtabelleWHEREtabelle.id=42;

Dies entspricht einerSchleife, die über die Einträge in einer Tabelle geht und in der für jeden Tabelleneintrag eine bedingte Anweisung ausgeführt wird: Alle Einträge, für die die Bedingung „id = 42“ zutrifft, werden gelöscht; alle übrigen Einträge bleiben dabei unberührt.

Verzweigung

[Bearbeiten |Quelltext bearbeiten]

Aufbau

[Bearbeiten |Quelltext bearbeiten]
Struktogramm einer if-else-Anweisung

Eine Verzweigung, auchAuswahl oderSelektion genannt, besteht aus einer Bedingung und zwei Codeabschnitten. Wieder wird erst die Bedingung ausgewertet, und falls sie zutrifft, wird anschließend der erste Codeabschnitt ausgeführt, anderenfalls wird der zweite Codeabschnitt ausgeführt:

fallsBedingung dannAnweisung(en)sonstAnweisung(en)ende

Beispiel in der ProgrammierspracheC:

if(Temperatur<20)Heizung_Einschalten();elseHeizung_Ausschalten();

Auswahloperator

[Bearbeiten |Quelltext bearbeiten]

In manchen Programmiersprachen gibt es den ternären Auswahloperator, der auchbedingter Ausdruck genannt wird. DieserOperator kann zum Beispiel für Wertzuweisungen anVariablen verwendet werden, aber auch Bestandteil von komplexeren Ausdrücken sein. Er verarbeitet dreiParameter in der FormwennBedingung dannAusdruck1 sonstAusdruck2. Zuerst wirdBedingung ausgewertet. Ist das Ergebniswahr, wirdAusdruck1 ausgewertet, anderenfallsAusdruck2. Das dabei entstehende Ergebnis ist auch das Ergebnis des Auswahloperators. FolgenderCode in der ProgrammierspracheC zeigt zweimal die gleiche Aktion – einmal als if-else-Konstrukt und einmal mit dem Auswahloperator:

// Variante mit if-else-Anweisungconstchar*str1;if(zahl==5)str1="Zahl gleich 5";elsestr1="Zahl ungleich 5";// Variante mit Auswahloperatorconstchar*str2=zahl==5?"Zahl gleich 5":"Zahl ungleich 5";// Initialisierung einer immutablen Variable mit Auswahloperator (mit if-else nicht möglich)constchar*conststr3=zahl==5?"Zahl gleich 5":"Zahl ungleich 5";

In vielen Sprachen wird der Operator mit den Wortenif-then-else formuliert, z. B. inF#:

letx=ifzahl<5then0else1

Mehrfache Verzweigung

[Bearbeiten |Quelltext bearbeiten]

In vielen Programmiersprachen gibt es auch mehrfache Verzweigungen, auchFallunterscheidungen genannt. Dabei sind zwei Formen zu unterscheiden: Entweder bestimmt das Ergebnis einesAusdrucks, welcher von mehreren Codeabschnitten ausgeführt wird und ob überhaupt einer davon ausgeführt wird, oder es gibt mehrere Bedingungen, denen jeweils ein Codeabschnitt zugeordnet ist. In beiden Formen kann einelse-Teil vorhanden sein.

Erste Form

[Bearbeiten |Quelltext bearbeiten]
Struktogramm einer Switch-Anweisung

Der Ausdruck wird ausgewertet und mit den Wertangaben (hierWert1 bisWert3) verglichen. Bei Übereinstimmung werden dieAnweisungen nach der Wertangabe ausgeführt. Wenn kein Wert übereinstimmt, werden die Anweisungen nachsonst ausgeführt, falls derelse-Teil vorhanden ist:

fallsAusdruck gleich  Wert1:Anweisung(en)  Wert2:Anweisung(en)  Wert3:Anweisung(en)  sonst:Anweisung(en)ende

Beispiel in der ProgrammierspracheC:

switch(zahl){case0:v=1;break;// 'break' ist hier nötig, damit nicht auch die ...case1:v=2;break;// ... folgenden Anweisungen ausgeführt werden (Besonderheit in C)case2:v=5;break;default:v=10;// der sonst-Teil}

Das folgende Beispiel in der ProgrammierspracheC# prüft, in welcher (meteorologischen) Jahreszeit ein Datum liegt, und gibt eine Textzeile aus:

intmonth=date.Month;stringseason;switch(month){case3:case4:case5:season="spring";break;case6:case7:case8:season="summer";break;case9:case10:case11:season="autumn";break;case12:case1:case2:season="winter";break;default:season="invalid date";break;}Console.WriteLine("The date is in "+season+".");

Die genaueSemantik eines solchen Konstrukts hängt stark von der jeweiligen Programmiersprache ab. So ist z. B. derelse-Teil nicht immer erlaubt, manchmal muss er aber vorhanden sein. Manchmal schreibt die Sprachdefinition auch vor, dass es zu einemLaufzeitfehler kommt, falls derelse-Teil fehlt und der Ausdruck keinen der angegebenen Werte annimmt.

Zweite Form

[Bearbeiten |Quelltext bearbeiten]
Datenflussdiagramm einer verschachtelten, bedingten if-else-Anweisung

Die Bedingungen werden der Reihe nach ausgewertet, solange, bis eine davon zutrifft. Dann wird der zu dieser Bedingung gehörende Codeabschnitt ausgeführt, und die Behandlung der mehrfachen Verzweigung ist damit beendet. Wenn keine der Bedingungen zutrifft, wird derelse-Teil ausgeführt, falls er vorhanden ist:

fallsBedingung dannAnweisung(en)sonst fallsBedingung2 dannAnweisung(en)sonstAnweisung(en)ende

In technischer Hinsicht ist das in den meisten Sprachen kein eigenständiges Konstrukt, sondern wird als Verkettung von Verzweigungen realisiert, indem jede Verzweigung, außer der ersten, den Else-Teil der vorhergehenden Verzweigung darstellt.

Die folgendeMethode in der ProgrammierspracheC# prüft, ob ein Zeitpunkt vor, nach oder in einem gegebenen Zeitraum liegt und gibt eine Textzeile aus:

voidCompare(DateTimetime,DateTimestartTime,DateTimeendTime){if(time<startTime)Console.WriteLine("The point in time is before the period.");else// time >= startTime{if(time>endTime)Console.WriteLine("The point in time is after the period.");else// time >= startTime && time <= endTimeConsole.WriteLine("The point in time is in the period.");}}

Siehe auch

[Bearbeiten |Quelltext bearbeiten]
Abgerufen von „https://de.wikipedia.org/w/index.php?title=Bedingte_Anweisung_und_Verzweigung&oldid=245344889
Kategorie:

[8]ページ先頭

©2009-2025 Movatter.jp