Lektion 4 von 8

Mehrfachauswahl, Verschachtelung, Schreibtischtest

Ein Ausdruck, viele Fälle: die Mehrfachauswahl. Danach das, was Prüfungsaufgaben schwer macht: Verzweigungen in Schleifen, Schleifen in Schleifen. Und der Schreibtischtest als Werkzeug, mit dem du auch verschachtelte Abläufe sicher liest.

  • Etwa 30 Minuten
  • 2 Leseaufgaben, 1 Zeichenaufgabe, 1 Ergänzungsaufgabe, 4 Quizfragen
  • Papier und Stift genügen

Mehrfachauswahl: FALLS

Die Verzweigung kennt zwei Wege. Manchmal hängt der Weg aber von einem Wert ab, der viele verschiedene Ausprägungen hat: eine Menünummer, ein Wochentag, ein Kürzel. Dafür gibt es die Mehrfachauswahl. Im Struktogramm steht oben der Ausdruck, darunter eine Spalte je Fall und ganz rechts eine Spalte sonst für alle Werte, die zu keinem Fall passen.

Struktogramm

Menü
Eingabe auswahl
auswahl
123sonst
Ausgabe "Neu"
Ausgabe "Öffnen"
Ausgabe "Beenden"
Ausgabe "Ungültig"

Pseudocode

EINGABE auswahl
FALLS auswahl
    FALL 1:
        AUSGABE "Neu"
    FALL 2:
        AUSGABE "Öffnen"
    FALL 3:
        AUSGABE "Beenden"
    SONST
        AUSGABE "Ungültig"
ENDE FALLS

Es läuft genau die Spalte, deren Wert dem Ausdruck entspricht. Für auswahl = 2 also „Öffnen“, für auswahl = 9 die Sonst-Spalte „Ungültig“. Das SONST ist nicht Pflicht; fehlt es und passt kein Fall, passiert einfach nichts und es geht unter der Mehrfachauswahl weiter. In Aufgaben mit Eingaben lohnt sich ein SONST fast immer, weil es die ungültige Eingabe abfängt.

Dieselbe Logik geht auch als Kette von Verzweigungen. Vergleiche:

Menü als Verzweigungskette
Eingabe auswahl
auswahl == 1janein
Ausgabe "Neu"
auswahl == 2janein
Ausgabe "Öffnen"
auswahl == 3janein
Ausgabe "Beenden"
Ausgabe "Ungültig"
Jede weitere Auswahl rückt eine Ebene nach rechts. Bei drei Fällen ist das noch lesbar, bei sieben Wochentagen nicht mehr.

Faustregel: Mehrfachauswahl, wenn ein einziger Ausdruck mit mehreren festen Werten verglichen wird. Verzweigungen, wenn die Fälle unterschiedliche Bedingungen haben („alter < 18“, „mitglied == wahr“) oder Bereiche abdecken. Beides ist in der Prüfung erlaubt; die Mehrfachauswahl ist bei vielen Fällen nur übersichtlicher und spart Punkte, die man sonst mit verrutschten Zweigen verliert.

Einzelwerte oder Bereiche?

Die Fälle einer Mehrfachauswahl sind im Grunde Einzelwerte: 1, 2, 3 oder "A", "B", "C". Sobald eine Aufgabe Bereiche verlangt („ab 80 Prozent gut, ab 50 bestanden“), bist du mit Verzweigungen auf der sicheren Seite, weil dort die Vergleiche >= hingehören:

Verzweigungen (immer korrekt)

Drei Stufen
Eingabe prozent
prozent >= 80janein
note = "gut"
prozent >= 50janein
note = "bestanden"
note = "nicht bestanden"
Ausgabe note

Bereichs-Fälle (in manchen Lösungshinweisen)

Drei Stufen
Eingabe prozent
prozent
80 bis 10050 bis 79sonst
note = "gut"
note = "bestanden"
note = "nicht bestanden"
Ausgabe note

Die rechte Form mit Bereichen als Fallbeschriftung kommt in manchen Lösungshinweisen und Lehrbüchern vor und ist dort auch gemeint. Wenn du sie nutzt, müssen die Bereiche lückenlos und überschneidungsfrei sein (bei ganzzahligen Prozentwerten: 79 gehört zu „50 bis 79“, 80 zu „80 bis 100“). Die Verzweigungskette prüft die Grenzen von oben nach unten, deshalb reicht in der zweiten Bedingung prozent >= 50: Dass der Wert unter 80 liegt, steht dort schon fest. Der IHK-Notenschlüssel mit sechs Stufen sieht als Pseudocode so aus:

EINGABE prozent
WENN prozent >= 92 DANN
    note = 1
SONST
    WENN prozent >= 81 DANN
        note = 2
    SONST
        WENN prozent >= 67 DANN
            note = 3
        SONST
            WENN prozent >= 50 DANN
                note = 4
            SONST
                WENN prozent >= 30 DANN
                    note = 5
                SONST
                    note = 6
                ENDE WENN
            ENDE WENN
        ENDE WENN
    ENDE WENN
ENDE WENN
AUSGABE note

Fünf Verzweigungen, jede im Nein-Zweig der vorigen. Die Reihenfolge der Grenzen (92, 81, 67, 50, 30) muss fallend sein, sonst fängt eine frühere Bedingung Werte ab, die einer späteren gehören. Wer die Bedingungen in beliebiger Reihenfolge prüfen will, braucht vollständige Bereiche wie prozent >= 81 UND prozent < 92.

Verschachtelung: Blöcke in Blöcken

Jeder Zweig und jeder Rumpf darf wieder beliebige Bausteine enthalten. Das nennt man Verschachtelung, und sie kommt häufig in Prüfungsaufgaben vor. Die Regel zum Lesen ist in beiden Schreibweisen gleich: Im Pseudocode zeigt die Einrückung die Tiefe, im Struktogramm zeigen es die Kästen, die ineinander liegen. Drei Kombinationen musst du kennen.

Verzweigung in Schleife

Die häufigste Form: Eine Schleife geht Werte durch, und für jeden Wert wird geprüft, ob er eine Eigenschaft hat. Beispiel: Wie viele gerade Zahlen gibt es von 1 bis n?

Struktogramm

Gerade Zahlen zählen
Eingabe n
anzahl = 0
für i = 1 bis n
i MOD 2 == 0janein
anzahl = anzahl + 1
Ausgabe anzahl

Pseudocode

EINGABE n
anzahl = 0
FÜR i = 1 BIS n
    WENN i MOD 2 == 0 DANN
        anzahl = anzahl + 1
    ENDE WENN
ENDE FÜR
AUSGABE anzahl

Die Verzweigung liegt im Rumpf und wird bei jedem Durchlauf neu geprüft. Der Zähler anzahl wird vor der Schleife initialisiert, nicht im Rumpf; sonst würde er bei jedem Durchlauf wieder auf 0 gesetzt. Für n = 7 zählt die Schleife 2, 4 und 6, Ausgabe 3.

Schleife in Schleife

Die innere Schleife läuft bei jedem Durchlauf der äußeren komplett durch. Das kleine Einmaleins von 1 bis 3:

Struktogramm

Einmaleins bis 3
für i = 1 bis 3
für j = 1 bis 3
Ausgabe i, "x", j, "=", i * j

Pseudocode

FÜR i = 1 BIS 3
    FÜR j = 1 BIS 3
        AUSGABE i, "x", j, "=", i * j
    ENDE FÜR
ENDE FÜR

Ausgegeben werden neun Zeilen: 1 x 1 = 1, 1 x 2 = 2, 1 x 3 = 3, dann 2 x 1 = 2, 2 x 2 = 4, 2 x 3 = 6, dann 3 x 1 = 3, 3 x 2 = 6, 3 x 3 = 9. Die äußere Schleife hat 3 Durchläufe, die innere in jedem davon ebenfalls 3, zusammen 3 · 3 = 9 Ausgaben. Merke: Der innere Zähler heißt anders als der äußere (i und j), und der innere Rumpf ist zwei Ebenen tief.

Verzweigung in Verzweigung

Das kennst du aus Lektion 2: Im Ja- oder im Nein-Zweig steht eine weitere Frage. Sie wird nur gestellt, wenn der Weg dorthin überhaupt genommen wird.

Eintrittspreis
Eingabe alter
Eingabe mitglied
alter >= 18janein
mitglied == wahrjanein
preis = 8
preis = 12
preis = 5
Ausgabe preis
Erst die Frage nach dem Alter, dann nur bei Erwachsenen die Frage nach der Mitgliedschaft. Für alter = 15 wird mitglied gar nicht geprüft, preis ist 5.

Der Schreibtischtest systematisch

Aus Lektion 1 und 3 kennst du den Schreibtischtest (Wertetabelle) schon als Werkzeug. Bei verschachtelten Abläufen brauchst du ihn wirklich, weil man im Kopf sehr schnell einen Durchlauf verliert. So legst du ihn an, und so bewerten es typischerweise auch die Lösungshinweise:

  1. Eine Spalte je Variable, dazu eine Spalte „Ausgabe“ und links eine Spalte für den Schritt oder die Prüfung. Zähler von Schleifen sind auch Variablen.
  2. Erste Zeile: Initialisierung. Alle Startwerte eintragen, leere Zellen für Variablen, die noch keinen Wert haben.
  3. Mindestens eine Zeile je Durchlauf bzw. Prüfung. Änderungen innerhalb eines Durchlaufs dürfen in einer Zeile stehen. Werte, die gleich bleiben, werden mitgeschrieben.
  4. Bedingungen mit Ergebnis notieren: „6 MOD 3 == 0: ja“. So siehst du später, warum ein Zweig gelaufen ist.
  5. Ausgabe nur in der Ausgabe-Spalte, und nur in der Zeile, in der die Ausgabe-Anweisung wirklich erreicht wird.

Das komplette Beispiel: Gegeben ist ein Feld (Array) zahlen mit den fünf Werten 6, 7, 9, 4, 12; das erste Element hat den Index 1, also zahlen[1] = 6. Gezählt wird, wie viele Werte durch 3 teilbar sind.

Durch 3 teilbare Werte zählen
anzahl = 0
für i = 1 bis 5
zahlen[i] MOD 3 == 0janein
anzahl = anzahl + 1
Ausgabe anzahl
Prüfungizahlen[i]anzahlAusgabe
Start··0·
6 MOD 3 == 0: ja161·
7 MOD 3 == 0: nein (Rest 1)271·
9 MOD 3 == 0: ja392·
4 MOD 3 == 0: nein (Rest 1)442·
12 MOD 3 == 0: ja5123·
Schleife beendet, Ausgabe6·33
Schreibtischtest für zahlen = [6, 7, 9, 4, 12]. Eine Zeile je Durchlauf, weil in jedem Durchlauf eine Bedingung geprüft wird. Am Ende steht i auf 6: Die Prüfung 6 > 5 beendet die Schleife. Ausgabe: 3.

Übungen

Leseaufgabe 4.1

Führen Sie einen Schreibtischtest durch: Welche Werte gibt das folgende Struktogramm aus, und in welcher Reihenfolge? Lege die Tabelle mit den Spalten i, j, summe und Ausgabe an, bevor du die Lösung aufklappst. Achte darauf, auf welcher Ebene die Ausgabe steht.

Verschachtelte Zählschleifen
summe = 0
für i = 1 bis 3
für j = 1 bis i
summe = summe + j
Ausgabe summe
Musterlösung anzeigen
SchrittijsummeAusgabe
Start··0·
i = 1, j = 1111·
innere Schleife fertig, Ausgabe1·11
i = 2, j = 1212·
i = 2, j = 2224·
innere Schleife fertig, Ausgabe2·44
i = 3, j = 1315·
i = 3, j = 2327·
i = 3, j = 33310·
innere Schleife fertig, Ausgabe3·1010

Ausgabe: 1, 4, 10. Die innere Schleife läuft „für j = 1 bis i“, also beim ersten Mal einmal, dann zweimal, dann dreimal, zusammen sechs Durchläufe. Die Ausgabe steht im Rumpf der äußeren, aber außerhalb der inneren Schleife und wird deshalb dreimal erreicht, nicht sechsmal und nicht einmal. Wer nur „10“ notiert, hat die Ausgabe unter die äußere Schleife gesetzt; wer sechs Zahlen notiert, hat sie in die innere gesetzt.

Leseaufgabe 4.2

Ermitteln Sie die Ausgabe des Struktogramms für die Eingaben code = 2, code = 3 und code = 7.

Preis nach Code
Eingabe code
code
123sonst
preis = 10
preis = 25
preis = 40
preis = 0
preis > 20janein
preis = preis - 5
Ausgabe preis
Musterlösung anzeigen
  1. code = 2: Fall 2, preis = 25. Dann 25 > 20: ja, preis = 20. Ausgabe 20.
  2. code = 3: Fall 3, preis = 40. 40 > 20: ja, preis = 35. Ausgabe 35.
  3. code = 7: kein Fall passt, also sonst, preis = 0. 0 > 20: nein, preis bleibt 0. Ausgabe 0.

Die Verzweigung nach der Mehrfachauswahl liegt außerhalb und wird in jedem Fall geprüft, auch nach dem Sonst-Zweig. Typischer Fehler: den Abzug nur bei Fall 3 anzuwenden oder ihn für den Sonst-Fall zu vergessen.

Zeichenaufgabe 4.3

Entwerfen Sie das Struktogramm: Für die Zahlen 1 bis 15 soll jeweils eine Zeile ausgegeben werden. Ist die Zahl durch 3 und durch 5 teilbar, wird „FizzBuzz“ ausgegeben; ist sie nur durch 3 teilbar, „Fizz“; nur durch 5, „Buzz“; sonst die Zahl selbst. Prüfe deine Lösung mit 9, 10 und 15.

Musterlösung anzeigen
Fizz Buzz bis 15
für i = 1 bis 15
i MOD 3 == 0 UND i MOD 5 == 0janein
Ausgabe "FizzBuzz"
i MOD 3 == 0janein
Ausgabe "Fizz"
i MOD 5 == 0janein
Ausgabe "Buzz"
Ausgabe i

Der Fall „durch beides teilbar“ muss zuerst geprüft werden. Stünde i MOD 3 == 0 zuerst, würde die 15 schon dort als „Fizz“ ausgegeben und „FizzBuzz“ nie erreicht. Ausgabe der Reihe nach: 1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, FizzBuzz. Gleichwertig: i MOD 15 == 0 als erste Bedingung, oder drei einseitige Verzweigungen mit einem Merker ausgegeben, der am Ende entscheidet, ob die Zahl selbst ausgegeben wird.

So wird typischerweise bewertet

  • Zählschleife von 1 bis 15 (alternativ kopfgesteuert mit eigenem Zähler)
  • Teilbarkeit mit MOD geprüft
  • Der Fall „durch 3 und 5“ wird vor den Einzelfällen geprüft (oder gleichwertig gelöst, etwa mit MOD 15 oder Merker)
  • Alle vier Ausgaben vorhanden, die Zahl selbst nur, wenn keine Bedingung zutrifft
  • Verschachtelung sauber gezeichnet: Verzweigungen im Rumpf, jede weitere im Nein-Zweig
Ergänzungsaufgabe 4.4

Ergänzen Sie das Struktogramm an den Stellen (1), (2) und (3): Ein Grenzwert wird eingelesen, danach fünf Werte nacheinander. Am Ende soll ausgegeben werden, wie viele der fünf Werte über dem Grenzwert liegen. Lücke (2) steht im Kopf der Verzweigung.

Werte über der Grenze zählen
Eingabe grenze
(1)
für i = 1 bis 5
Eingabe wert
(2)janein
(3)
Ausgabe anzahl
Musterlösung anzeigen
Werte über der Grenze zählen
Eingabe grenze
anzahl = 0
für i = 1 bis 5
Eingabe wert
wert > grenzejanein
anzahl = anzahl + 1
Ausgabe anzahl

(1) anzahl = 0: die Initialisierung des Zählers, vor der Schleife. (2) wert > grenze: „über“ heißt echt größer, nicht >=. (3) anzahl = anzahl + 1: die Zählanweisung im Ja-Zweig. Probe mit grenze = 10 und den Werten 4, 12, 10, 15, 7: Nur 12 und 15 liegen darüber, Ausgabe 2. Die 10 zählt nicht, weil sie nicht über der Grenze liegt.

Jetzt selbst testen

Vier Fragen zu Mehrfachauswahl, Verschachtelung und Schreibtischtest.

1 / 4

Eine Wochentagsnummer 1 bis 7 soll in den Namen umgewandelt werden. Welche Struktur passt am besten?

2 / 4

FÜR i = 1 BIS 4 enthält FÜR j = 1 BIS 3 mit einer Ausgabe im inneren Rumpf. Wie oft wird ausgegeben?

3 / 4

Eine Mehrfachauswahl hat die Fälle 1, 2 und 3, aber kein SONST. Der Ausdruck hat den Wert 5. Was passiert?

4 / 4

Wie viele Zeilen bekommt der Schreibtischtest mindestens?