|
|
|||||||||||||||||||
Referenz:Verzweigungen |
|||||||||||||||||||
FallunterscheidungenComputerprogramme bestehen aus einer Folge von Anweisungen, die nacheinander ausgeführt werden. Das Programm aus Folge 3 "Sie werden gewogen" läuft - wenn Sie Übung 3.2 gelöst haben - zum Beispiel so ab: In der Übung 3.3 sollen Sie das Programm so verfeinern, dass in dem Ausgabefenster angezeigt wird, ob die Person Übergewicht, Untergewicht oder Idealgewicht hat. Dazu ist eine dreiseitige Fallunterscheidung oder eine so genannte Dreifachauswahl notwendig. Ein Mensch hat keine Probleme, eine solche Auswahl zu treffen, ein Computer schon. Die gängigen Programmiersprachen kennen nämlich nur die einseitige Auswahl sowie die zweiseitige Auswahl, mit denen wir uns im Folgenden näher beschäftigen wollen. Anschließend kommen wir auf die Frage zurück, wie man mit diesen einfachen Mitteln eine dreiseitige Auswahl realisieren kann. |
Das Arbeitsblatt 3.01 zum Thema "Verzweigungen" können Sie sich hier als PDF-Dokument he |
||||||||||||||||||
Die einseitige Auswahl oder
Eine if-Anweisung besteht aus dem Schlüsselwort "if" - klein geschrieben - einer logischen Bedingung, die in runden Klammern stehen muss, und einer Anweisungsliste:
|
logische Vergleichs-Operatoren:
logische Verknüpfungs-Operatoren:
|
||||||||||||||||||
Die zweiseitige Auswahl oder
Meistens hat man aber eine alternative Aktion geplant, wenn die Bedingung für die Hauptaktion nicht erfüllt ist. Für eine solche zweiseitige Auswahl verwendet man die if-else-Anweisung, die im Prinzip genauso aufgebaut ist wie die if-Anweisung. |
|||||||||||||||||||
3 Syntaxdiagramm der if-else-Anweisung |
|||||||||||||||||||
|
Das, was bereits über logische Bedingungen und Anweisungslisten gesagt wurde, bleibt weiterhin gültig. Für Pascal-Programmierer ungewohnt ist vielleicht, dass am Ende des then-Zweigs (in Java gibt es das Schlüsselwort "then" nicht!) ein Semikolon stehen muss. Schauen wir uns eine korrekte if-else-Anweisung an:
if (gewicht <= ideal+3)
System.out.println("Super!);
else
{
System.out.println("Weniger essen!");
diff = gewicht-ideal;
System.out.println(diff + " kg zuviel!");
}
In der ersten Alternative (Pascal-Programmierer würden sagen: "im then-Zweig") haben wir eine einfache Anweisung verwendet, in der zweiten Alternative ("else-Zweig) eine aus drei Anweisungen bestehende Anweisungsliste. |
|||||||||||||||||||
Die dreiseitige Auswahl oder
Die meisten Programmiersprachen kennen nur ein- oder zweiseitige Auswahlen. Benötigt man eine dreiseitige Auswahl, so sollte man sich die Syntaxdiagramme der ein- und zweiseitigen Auswahl mal näher anschauen. Im else-Zweig finden wir eine Anweisungsliste. Diese Anweisungsliste kann aus einer einzelnen Anweisung oder eine geklammerten Liste von Anweisungen bestehen.
|
Terminologie: Neben dem Ausdruck "geschachtelte" oder "verschachtelte" if-Anweisung werden in der deutschsprachigen Fachliteratur auch noch oft folgende Begriffe verwendet: angehäufte if-Anweisungen if-Kaskaden |
||||||||||||||||||
Das Dangling-Else-ProblemDieser Abschnitt dürfte für alle Schüler(innen) interessant sein, die das Fach Informatik im Abitur belegen wollen. Betrachten Sie bitte folgenden Quelltext:
if (x < 10)
if (y < 10)
ausgabe("O.K.");
else
ausgabe("Falsch!");
Was wird hier ausgegeben? Lassen Sie sich nicht von der Stellung des "else" verwirren! Es wird hier der Eindruck erweckt, dass das "else" zum ersten "if" gehört. Das ist aber nicht der Fall, ein "else" gehört immer zum innersten "if", in unserem Fall also zum zweiten "if". Die Meldung "falsch" wird also ausgegeben, wenn y nicht kleiner als 10 ist. Dieses hier beschriebene Problem ist als "dangling-else-problem" in der Fachliteratur bekannt geworden. Es ist nicht nur von akademischem Interesse, sondern hat auch durchaus praktische Auswirkungen auf die tägliche Programmierarbeit. |
|||||||||||||||||||
Die switch-AnweisungUnter bestimmten Umständen kann man geschachtelte if-Anweisungen durch eine switch-Anweisung ersetzen. Hier ein Beispiel:
switch (note)
{
case 1 : ausgabe("sehr gut"); break;
case 2 : ausgabe("gut"); break;
case 3 : ausgabe("befriedigend"); break;
case 4 : ausgabe("ausreichend"); break;
case 5 : ausgabe("mangelhaft"); break;
case 6 : ausgabe("ungenügend"); break;
}
Das Wort "break" bewirkt einen sofortigen Abbruch des Vergleichs. Wenn also festgestellt wurde, dass der Wert der Variable "note" zum Beispiel 3 ist, so werden die Fälle 4, 5 und 6 nicht mehr überprüft. Wichtig: Auch komplexere Überprüfungen wie sie zum Beispiel in der Übung 3.5 vorgekommen sind, kann man nicht so einfach durch eine switch-Anweisung realisieren; hier müssen wir auf geschachtelte if-else-Anweisungen zurückgreifen. |
|||||||||||||||||||
Zurück zu Folge 3: Sie werden gewogen!Diese HTML-Seite wurde erstellt von Ulrich Helmich am 20. Februar 2005 mit Golive 6. |
|||||||||||||||||||