Kontrollanweisungen Flashcards

Auswahlanweisungen, Iterationsanweisungen, Terminierung, Blöcke, Sichtbarkeit, Lokale Variablen, Spuranweisungen.

1
Q

Welches sind die beiden Auswahlanweisungen und wozu sind sie gut?

A

Auswahlanweisungen realisieren Verzweigungen im Programm. Es existieren:

  • 𝚒𝚏-Anweisung
  • 𝚒𝚏-𝚎𝚕𝚜𝚎-Anweisung
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Wie sieht die Anatomie einer 𝚒𝚏-Anweisung aus, d.h. aus welchen “Teilen” besteht die Anweisung? Was macht die Anweisung?

A

𝚒𝚏 (𝚌𝚘𝚗𝚍𝚒𝚝𝚘𝚗) {𝚜𝚝𝚊𝚝𝚎𝚖𝚎𝚗𝚝}

Das 𝚜𝚝𝚊𝚝𝚎𝚖𝚎𝚗𝚝 wird ausgeführt, wenn die 𝚌𝚘𝚗𝚍𝚒𝚝𝚘𝚗 wahr ist. Somit ist 𝚜𝚝𝚊𝚝𝚎𝚖𝚎𝚗𝚝 eine beliebige Anweisung, die 𝚌𝚘𝚗𝚍𝚒𝚝𝚘𝚗 muss jedoch nach 𝚋𝚘𝚘𝚕 konvertierbar sein.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Wie sieht die Anatomie einer 𝚒𝚏-𝚎𝚕𝚜𝚎-Anweisung aus, d.h. aus welchen “Teilen” besteht die Anweisung? Was macht die Anweisung?

A

𝚒𝚏 (𝚌𝚘𝚗𝚍𝚒𝚝𝚒𝚘𝚗)
{𝚜𝚝𝚊𝚝𝚎𝚖𝚎𝚗𝚝 𝟷}
𝚎𝚕𝚜𝚎
{𝚜𝚝𝚊𝚝𝚎𝚖𝚎𝚗𝚝 𝟸}

Das 𝚜𝚝𝚊𝚝𝚎𝚖𝚎𝚗𝚝 𝟷 wird ausgeführt, wenn 𝚌𝚘𝚗𝚍𝚒𝚝𝚒𝚘𝚗 wahr ist, andernfalls wird 𝚜𝚝𝚊𝚝𝚎𝚖𝚎𝚗𝚝 𝟸 ausgeführt. Wiederum können 𝚜𝚝𝚊𝚝𝚎𝚖𝚎𝚗𝚝 beliebige Anweisungen sein, während 𝚌𝚘𝚗𝚍𝚒𝚝𝚒𝚘𝚗 nach 𝚋𝚘𝚘𝚕 konvertierbar sein muss.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Was sind Iterationsanweisungen, welche existieren und wozu sind sie gut?

A

Die drei Iterationsanweisungen 𝚏𝚘𝚛, 𝚠𝚑𝚒𝚕𝚎 und 𝚍𝚘 realisieren Schleifen, so kann man z.B. Summen berechnen oder Prozesse wiederholen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Wie sieht die Anatomie einer 𝚏𝚘𝚛-Anweisung aus, d.h. aus welchen “Teilen” besteht die Anweisung? Was macht die Anweisung?

A

𝚏𝚘𝚛 (𝚒𝚗𝚒𝚝 𝚜𝚝𝚊𝚝𝚎𝚖𝚎𝚗𝚝; 𝚌𝚘𝚗𝚍𝚒𝚝𝚒𝚘𝚗; 𝚎𝚡𝚙𝚛𝚎𝚜𝚜𝚒𝚘𝚗)
{𝚋𝚘𝚍𝚢 𝚜𝚝𝚊𝚝𝚎𝚖𝚎𝚗𝚝}

Das 𝚒𝚗𝚒𝚝 𝚜𝚝𝚊𝚝𝚎𝚖𝚎𝚗𝚝 ist eine Ausdrucks-, Deklarations- oder Nullanweisung, z.B. zur Deklaration einer Laufvariable 𝚒 = 𝟷.
Solange die 𝚌𝚘𝚗𝚍𝚒𝚝𝚒𝚘𝚗 wahr ist, wird das 𝚋𝚘𝚍𝚢 𝚜𝚝𝚊𝚝𝚎𝚖𝚎𝚗𝚝 ausgeführt. Ist die 𝚌𝚘𝚗𝚍𝚒𝚝𝚒𝚘𝚗 falsch, terminiert die Schleife. Somit muss 𝚌𝚘𝚗𝚍𝚒𝚝𝚒𝚘𝚗 einen boolschen Wert besitzen.
Die 𝚎𝚡𝚙𝚛𝚎𝚜𝚜𝚒𝚘𝚗 ändert einen Wert, der in der 𝚌𝚘𝚗𝚍𝚒𝚝𝚒𝚘𝚗 vorkommt, so funktioniert es überhaupt, dass die 𝚌𝚘𝚗𝚍𝚒𝚝𝚒𝚘𝚗 von wahr zu falsch wechseln kann.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Wie würde eine 𝚏𝚘𝚛-Anweisung aussehen, die die Summe aller Zahlen von 1 bis 100 berechnet?

A

𝚏𝚘𝚛 (𝚒=𝟷; 𝚒<=𝟷00; 𝚒++)
𝚊 += 𝚒;
𝚜𝚝𝚍::𝚌𝚘𝚞𝚝 &laquo_space;𝚊;

Anmerkung: Falls nur eine Anweisung im Rumpf steht, können die geschweiften Klammern weggelassen werden.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Wie würde ein Programmausschnitt mit einer 𝚏𝚘𝚛-Anweisung aussehen, die für eine eingegebene Zahl 𝚗 des Typs 𝚒𝚗𝚝 berechnet, ob es eine Primzahl ist oder nicht, und das Ergebnis wieder ausgibt?

A

𝚜𝚝𝚍::𝚌𝚒𝚗&raquo_space; 𝚗;

𝚏𝚘𝚛 (𝚒 = 𝟸; 𝚗 % 𝚒 != 0; ++𝚒);

𝚒𝚏 (𝚒 != 𝚗)
𝚜𝚝𝚍::𝚌𝚘𝚞𝚝 &laquo_space;𝚗 &laquo_space;” 𝚒𝚜 𝚗𝚘𝚝 𝚙𝚛𝚒𝚖𝚎.”;
𝚎𝚕𝚜𝚎
𝚜𝚝𝚍::𝚌𝚘𝚞𝚝 &laquo_space;𝚗 &laquo_space;” 𝚒𝚜 𝚙𝚛𝚒𝚖𝚎.”;

Bemerke, dass die 𝚒𝚏-𝚎𝚕𝚜𝚎-Anweisung erst aufgerufen wird, nach dem die 𝚏𝚘𝚛-Schleife terminiert hat (Semikolon hinter der Schleife).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Was sind Blöcke und wozu sind sie gut?

A

Eine Gruppierung einer oder mehrerer Anweisungen ist ein Block. Sie verhelfen zu einer logischen Programmstruktur und man kann mit ihnen mächtige und doch lesbare Kontrollanweisungen erschaffen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Weshalb können Blöcke Probleme bei der Deklaration von Variablen erschaffen?

A

Was in einem Block deklariert wird, gilt zwar für den Block und alle “Unterblöcke”, jedoch nicht für den grösseren Block. Man könnte sagen, die “Blickrichtung” sei von rechts nach links. Wird also eine Variable in einem Block deklariert und man verwendet sie später ausserhalb des Blocks wieder, wird es zu einem Fehler kommen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Betrachte folgendes Programm:

𝚒𝚗𝚝 𝚖𝚊𝚒𝚗 ()
{
  𝚏𝚘𝚛 (𝚞𝚗𝚜𝚒𝚐𝚗𝚎𝚍 𝚒𝚗𝚝 𝚒 = 0; 𝚒 < 𝟷0; ++𝚒)
    𝚜 += 𝚒;
  𝚜𝚝𝚍::𝚌𝚘𝚞𝚝 << 𝚒;
  𝚛𝚎𝚝𝚞𝚛𝚗 0;
}

Weshalb wird es hier unvermeidlich zu einem Fehler kommen und was wird der Fehler sein?

A

Da 𝚒 nur innerhalb der 𝚏𝚘𝚛-Anweisung deklariert wurde und Schleifen die gleiche strukturelle Auswirkung haben wie Blöcke, wird der Compiler melden, dass ein undeklarierter Name (𝚒) verwendet wurde.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Betrachte folgendes Programm:

𝚒𝚗𝚝 𝚖𝚊𝚒𝚗 ()
{
  𝚒𝚗𝚝 𝚒 = 𝟸;
  𝚏𝚘𝚛 (𝚞𝚗𝚜𝚒𝚐𝚗𝚎𝚍 𝚒𝚗𝚝 𝚒 = 0; 𝚒 < 𝟷0; ++𝚒)
    𝚜 += 𝚒;
  𝚜𝚝𝚍::𝚌𝚘𝚞𝚝 << 𝚒;
  𝚛𝚎𝚝𝚞𝚛𝚗 0;
}

Was wird das Programm ausgeben und warum?

A

Der Output dieses Programms lautet:
0𝟷𝟸𝟹𝟺𝟸

Man betrachte, dass hier zwei verschiedene 𝚒 deklariert wurden, die sich aber beide nicht überschneiden. Somit funktioniert das Programm, und es werden zuerst die in der 𝚏𝚘𝚛-Anweisung deklarierten 𝚒 ausgegeben und dann das im grösseren Block mit 𝚒𝚗𝚝 𝚒 = 𝟸 deklarierte 𝚒.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Wie funktioniert das Konzept der “automatischen Speicherdauer” von lokalen Variablen?

A

Lokale Variablen (Deklaration in Block) werden bei jedem Erreichen ihrer Deklaration neu angelegt, d.h. ein Speicher / eine Adresse wird zugewiesen. Am Ende ihrer deklarativen Region wird der Speicher wieder freigegeben und die Adresse wird ungültig.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Wie sieht die Anatomie einer 𝚠𝚑𝚒𝚕𝚎-Anweisung aus, d.h. aus welchen “Teilen” besteht die Anweisung? Was macht die Anweisung?

A

𝚠𝚑𝚒𝚕𝚎 (𝚌𝚘𝚗𝚍𝚒𝚝𝚒𝚘𝚗)
{𝚜𝚝𝚊𝚝𝚎𝚖𝚎𝚗𝚝}

Das 𝚜𝚝𝚊𝚝𝚎𝚖𝚎𝚗𝚝 - eine beliebige Anweisung - wird solange ausgeführt, wie 𝚌𝚘𝚗𝚍𝚒𝚝𝚒𝚘𝚗 - ein boolscher Wert - wahr ist. Ist 𝚌𝚘𝚗𝚍𝚒𝚝𝚒𝚘𝚗 falsch, terminiert die Schleife.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Wie kann man eine 𝚠𝚑𝚒𝚕𝚎-Anweisung in eine 𝚏𝚘𝚛-Anweisung konvertieren, d.h., wie sind die beiden Anweisungen äquivalent zueinander?

A
𝚠𝚑𝚒𝚕𝚎 (𝚌𝚘𝚗𝚍𝚒𝚝𝚒𝚘𝚗)
  {𝚜𝚝𝚊𝚝𝚎𝚖𝚎𝚗𝚝}
⇔
𝚏𝚘𝚛 ( ; 𝚌𝚘𝚗𝚍𝚒𝚝𝚒𝚘𝚗; )
  {𝚜𝚝𝚊𝚝𝚎𝚖𝚎𝚗𝚝}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

In welchen Fällen eignet sich die 𝚠𝚑𝚒𝚕𝚎-Anweisung besser als die 𝚏𝚘𝚛-Anweisung?

A

Meist verwendet man eine 𝚏𝚘𝚛-Schleife, wenn der “Fortschritt”, also die 𝚎𝚡𝚙𝚛𝚎𝚜𝚜𝚒𝚘𝚗, die die 𝚌𝚘𝚗𝚍𝚒𝚝𝚒𝚘𝚗 verändert, ziemlich simpel ist, wie z.B. ++𝚒.
Ist hingegen die 𝚎𝚡𝚙𝚛𝚎𝚜𝚜𝚒𝚘𝚗 sehr komplex, eignet sich eher eine 𝚠𝚑𝚒𝚕𝚎-Anweisung, da sie besser lesbar sein wird.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Wie sieht die Anatomie einer 𝚍𝚘-Anweisung aus, d.h. aus welchen “Teilen” besteht die Anweisung? Was macht die Anweisung?

A

𝚍𝚘
{𝚜𝚝𝚊𝚝𝚎𝚖𝚎𝚗𝚝}
𝚠𝚑𝚒𝚕𝚎 (𝚌𝚘𝚗𝚍𝚒𝚝𝚒𝚘𝚗)

Das 𝚜𝚝𝚊𝚝𝚎𝚖𝚎𝚗𝚝 - eine beliebige Anweisung - wird solange ausgeführt, wie 𝚌𝚘𝚗𝚍𝚒𝚝𝚒𝚘𝚗 - ein boolscher Wert - wahr ist. Ist 𝚌𝚘𝚗𝚍𝚒𝚝𝚒𝚘𝚗 falsch, terminiert die Schleife.

17
Q

Wie kann man eine 𝚍𝚘-Anweisung in eine 𝚠𝚑𝚒𝚕𝚎-Anweisung konvertieren, d.h., wie sind die beiden Anweisungen äquivalent zueinander?

A
𝚍𝚘
  {𝚜𝚝𝚊𝚝𝚎𝚖𝚎𝚗𝚝}
𝚠𝚑𝚒𝚕𝚎 (𝚌𝚘𝚗𝚍𝚒𝚝𝚒𝚘𝚗)
⇔
𝚠𝚑𝚒𝚕𝚎 (𝚌𝚘𝚗𝚍𝚒𝚝𝚒𝚘𝚗)
  {𝚜𝚝𝚊𝚝𝚎𝚖𝚎𝚗𝚝}
18
Q

Betrachte folgenden Programmausschnitt:

𝚒𝚗𝚝 𝚊;
𝚒𝚗𝚝 𝚜 = 0;
𝚍𝚘 {
  𝚜𝚝𝚍::𝚌𝚘𝚞𝚝 << "𝚗𝚎𝚡𝚝 𝚗𝚞𝚖𝚋𝚎𝚛 =? ";
  𝚜𝚝𝚍::𝚌𝚒𝚗 >> 𝚊;
  𝚜 += 𝚊;
  𝚜𝚝𝚍::𝚌𝚘𝚞𝚝 << "𝚜𝚞𝚖 = " << 𝚜 << "\𝚗";
} 𝚠𝚑𝚒𝚕𝚎 (𝚊 != 0);

Was macht das Programm?

A

Es berechnet die Summe von allen vom User eingegebenen ganzen Zahlen. Sobald der User eine Null eingibt, terminiert das Programm.

19
Q

Was macht die 𝚋𝚛𝚎𝚊𝚔-Anweisung und wozu ist sie gut?

A

Mit einer 𝚋𝚛𝚎𝚊𝚔-Anweisung innerhalb einer Iterationsanweisung (𝚏𝚘𝚛, 𝚍𝚘, 𝚠𝚑𝚒𝚕𝚎) wird die Iteration sofort beendet. Dies ist nützlich, um Schleifen mittendrin abbrechen zu können und “unnötige” Anweisungen zu überspringen.

20
Q

Betrachte folgenden Programmausschnitt:

𝚒𝚗𝚝 𝚊;
𝚒𝚗𝚝 𝚜 = 0;
𝚍𝚘 {
  𝚜𝚝𝚍::𝚌𝚘𝚞𝚝 << "𝚗𝚎𝚡𝚝 𝚗𝚞𝚖𝚋𝚎𝚛 =? ";
  𝚜𝚝𝚍::𝚌𝚒𝚗 >> 𝚊;
  𝚜 += 𝚊;
  𝚜𝚝𝚍::𝚌𝚘𝚞𝚝 << "𝚜𝚞𝚖 = " << 𝚜 << "\𝚗";
} 𝚠𝚑𝚒𝚕𝚎 (𝚊 != 0);

Wie könnte man hier irrelevante Anweisungen mithilfe einer 𝚋𝚛𝚎𝚊𝚔-Anweisung übergehen?

A

Da für eine Eingabe Null die Anweisung 𝚜 += 𝚊 trotzdem nochmals ausgeführt wird, bevor das Programm terminiert, kann man hier mit einer 𝚋𝚛𝚎𝚊𝚔-Anweisung diesen Schritt sparen:

𝚒𝚗𝚝 𝚊;
𝚒𝚗𝚝 𝚜 = 0;
𝚍𝚘 {
  𝚜𝚝𝚍::𝚌𝚘𝚞𝚝 << "𝚗𝚎𝚡𝚝 𝚗𝚞𝚖𝚋𝚎𝚛 =? ";
  𝚜𝚝𝚍::𝚌𝚒𝚗 >> 𝚊;
    𝚒𝚏 (𝚊 == 0) 𝚋𝚛𝚎𝚊𝚔;
  𝚜 += 𝚊;
  𝚜𝚝𝚍::𝚌𝚘𝚞𝚝 << "𝚜𝚞𝚖 = " << 𝚜 << "\𝚗";
} 𝚠𝚑𝚒𝚕𝚎 (𝚊 != 0);
21
Q

Was macht die 𝚌𝚘𝚗𝚝𝚒𝚗𝚞𝚎-Anweisung und wozu ist sie gut?

A

Die 𝚌𝚘𝚗𝚝𝚒𝚗𝚞𝚎-Anweisung wird gebraucht, um - im Gegensatz zur 𝚋𝚛𝚎𝚊𝚔-Anweisung - nicht die ganze Iteration abzubrechen, sondern lediglich den Rumpf der Iterationsanweisung zu überspringen. Man kann so z.B. verschachtelte 𝚒𝚏-𝚎𝚕𝚜𝚎-Blöcke oder komplexe Disjunktionen vermeiden.

22
Q

Was sind die Nachteile von 𝚋𝚛𝚎𝚊𝚔- und 𝚌𝚘𝚗𝚝𝚒𝚗𝚞𝚎-Anweisungen?

A

Sie führen zu mehr Sprüngen und somit zu potentiell komplexerem Kontrollfluss.

23
Q

Auf welche vier Eigenschaften sollte man achten, um die “richtige” Iterationsanweisung für möglichst lesbare und prägnante Codes auszuwählen?

A

(1) Wenige Anweisungen
(2) Wenige Zeilen Code
(3) Einfacher Kontrollfluss
(4) Einfache Ausdrücke

(Vgl.: Skript und ppt-Slides für gute Diagramme zum Kontrollfluss!)

24
Q

Betrachte folgenden Programmausschnitt zur Darstellung der ungeraden Zahlen in {0, …, 100}:

𝚏𝚘𝚛 (𝚞𝚗𝚜𝚒𝚐𝚗𝚎𝚍 𝚒𝚗𝚝 𝚒 = 0; 𝚒 < 𝟷00; ++𝚒) {
  𝚒𝚏 (𝚒 % 𝟸 == 0)
    𝚌𝚘𝚗𝚝𝚒𝚗𝚞𝚎;
  𝚜𝚝𝚍::𝚌𝚘𝚞𝚝 << 𝚒 << "\𝚗";
}

Wie könnte man das Programm vereinfachen?

A
𝚏𝚘𝚛 (𝚞𝚗𝚜𝚒𝚐𝚗𝚎𝚍 𝚒𝚗𝚝 𝚒 = 0; 𝚒 < 𝟷00; ++𝚒) {
  𝚒𝚏 (𝚒 % 𝟸 == 0)
    𝚌𝚘𝚗𝚝𝚒𝚗𝚞𝚎;
  𝚜𝚝𝚍::𝚌𝚘𝚞𝚝 << 𝚒 << "\𝚗";
}

wird zu:

𝚏𝚘𝚛 (𝚞𝚗𝚜𝚒𝚐𝚗𝚎𝚍 𝚒𝚗𝚝 𝚒 = 𝟷; 𝚒 < 𝟷00; 𝚒 += 𝟸)
𝚜𝚝𝚍::𝚌𝚘𝚞𝚝 &laquo_space;𝚒 &laquo_space;“\𝚗”;

25
Q

Wie sieht die Anatomie einer 𝚜𝚠𝚒𝚝𝚌𝚑-Anweisung aus, d.h. aus welchen “Teilen” besteht die Anweisung? Was macht die Anweisung?

A

𝚜𝚠𝚒𝚝𝚌𝚑 (𝚎𝚡𝚙𝚛𝚎𝚜𝚜𝚒𝚘𝚗)
{𝚜𝚝𝚊𝚝𝚎𝚖𝚎𝚗𝚝}

wobei das 𝚜𝚝𝚊𝚝𝚎𝚖𝚎𝚗𝚝 sogenannte Marken beinhaltet:

𝚜𝚠𝚒𝚝𝚌𝚑 (𝚎𝚡𝚙𝚛𝚎𝚜𝚜𝚒𝚘𝚗) {
  𝚌𝚊𝚜𝚎 (𝚎𝚡𝚙𝚛𝚎𝚜𝚜𝚒𝚘𝚗 𝟷): {𝚜𝚝𝚊𝚝𝚎𝚖𝚎𝚗𝚝 𝟷};
  𝚌𝚊𝚜𝚎 (𝚎𝚡𝚙𝚛𝚎𝚜𝚜𝚒𝚘𝚗 𝟸): {𝚜𝚝𝚊𝚝𝚎𝚖𝚎𝚗𝚝 𝟸};
  ...
  𝚌𝚊𝚜𝚎 (𝚎𝚡𝚙𝚛𝚎𝚜𝚜𝚒𝚘𝚗 𝚗): {𝚜𝚝𝚊𝚝𝚎𝚖𝚎𝚗𝚝 𝚗};
  𝚍𝚎𝚏𝚊𝚞𝚕𝚝: {𝚍𝚎𝚏𝚊𝚞𝚕𝚝 𝚜𝚝𝚊𝚝𝚎𝚖𝚎𝚗𝚝};
}

Für die Eingabe einer 𝚎𝚡𝚙𝚛𝚎𝚜𝚜𝚒𝚘𝚗 überprüft die 𝚜𝚠𝚒𝚝𝚌𝚑-Anweisung, zu welchem 𝚌𝚊𝚜𝚎 die 𝚎𝚡𝚙𝚛𝚎𝚜𝚜𝚒𝚘𝚗 passt, springt dorthin und führt das jeweilige 𝚜𝚝𝚊𝚝𝚎𝚖𝚎𝚗𝚝 aus. Passt kein 𝚌𝚊𝚜𝚎 zu der Eingabe, wird zu 𝚍𝚎𝚏𝚊𝚞𝚕𝚝 gesprungen.
Ist auch kein 𝚍𝚎𝚏𝚊𝚞𝚕𝚝 vorhanden, wird das gesamte 𝚜𝚝𝚊𝚝𝚎𝚖𝚎𝚗𝚝 übersprungen.

26
Q
Betrachte folgendes Problem: Wir möchten ein Programm schreiben, dass je nach Eingabe einer Schulnote einen passenden Ausdruck ausgibt, nach folgendem Schema:
6     → "Excellent... You passed!"
5, 4 → "You passed!"
3     → "Close, but... You failed!"
2, 1 → "You failed!"
sonst → "Error!" 

Wie würde die passende 𝚜𝚠𝚒𝚝𝚌𝚑-Anweisung aussehen?

A
𝚜𝚠𝚒𝚝𝚌𝚑 (𝚐𝚛𝚊𝚍𝚎) {
  𝚌𝚊𝚜𝚎 𝟼: 𝚜𝚝𝚍::𝚌𝚘𝚞𝚝 << "𝙴𝚡𝚌𝚎𝚕𝚕𝚎𝚗𝚝 ... ";
  𝚌𝚊𝚜𝚎 𝟻:
  𝚌𝚊𝚜𝚎 𝟺: 𝚜𝚝𝚍::𝚌𝚘𝚞𝚝 << "𝚈𝚘𝚞 𝚙𝚊𝚜𝚜𝚎𝚍!";
    𝚋𝚛𝚎𝚊𝚔;
  𝚌𝚊𝚜𝚎 𝟹: 𝚜𝚝𝚍::𝚌𝚘𝚞𝚝 << "𝙲𝚕𝚘𝚜𝚎, 𝚋𝚞𝚝 ... ";
  𝚌𝚊𝚜𝚎 𝟸:
  𝚌𝚊𝚜𝚎 𝟷: 𝚜𝚝𝚍::𝚌𝚘𝚞𝚝 << "𝚈𝚘𝚞 𝚏𝚊𝚒𝚕𝚎𝚍!";
    𝚋𝚛𝚎𝚊𝚔;
  𝚍𝚎𝚏𝚊𝚞𝚕𝚝: 𝚜𝚝𝚍::𝚌𝚘𝚞𝚝 << "𝙴𝚛𝚛𝚘𝚛!";
}

Bemerke, dass solange die Cases durchgemacht weren, bis ein 𝚋𝚛𝚎𝚊𝚔 kommt. Dann wird die Schleife verlassen.