while-Schleifen

while-Schleifen werden eingesetzt, wenn die Abbruchbedingung erst während des Schleifendurchlaufs festgestellt werden kann.

Selbstverständlich kann jederzeit eine while-Schleife durch eine for-Schleife ersetzt werden und umgekehrt, wenn etwas mehr Aufwand spendiert wird.

Es gibt es zwei Formen der Schleife:

while-Schleife

Bei der while-Schleife erfolgt die Prüfung, ob die Schleife (nochmals) zu durchlaufen ist, zu Beginn der Schleife.

while (AUSDRUCK)
    ANWEISUNG;

Die Schleife wird so lange durchlaufen, solange die Auswertung von AUSDRUCK true liefert. Das abschließende Semikolon steht erst nach der auszuführenden Anweisung.

Auch hier gilt, dass standardmäßig nur eine Anweisung ausgeführt wird. Mehrere Anweisungen sind in einen Block {...} einzuschließen.

#include <print>

int main()
{
    auto done = false;
    auto index=0;
    // Schleife so lange durchlaufen
    // so lange done false ist
    while (!done)
    {
        std::println("index: {}",index++);
        // Wenn index 3, dann fertig
        if (index == 3)
            done = true;
    }
}

index: 0
index: 1
index: 2

Eine häufige Fehlerquelle bei diesem Schleifentyp ist das Vergessen der Initialisierung des Abbruchkriteriums. Wird das Abbruchkriterium, im obigen Beispiel die Variable max_index, nicht initialisiert, wird die Schleife unter Umständen nicht durchlaufen!

do-while-Schleife

Diese Schleife wird immer mindestens einmal durchlaufen, da das Abbruchkriterium erst am Ende der Schleife abgeprüft wird.

do
    ANWEISUNG;
while (AUSDRUCK);

Die ANWEISUNG besteht ebenfalls standardmäßig aus einer Anweisung, mehrere Anweisungen sind wieder in einen Block {...} einzuschließen. Die Schleife wird auch hier so lange durchlaufen, wie die Auswertung des Ausdrucks true ergibt.

"#include <print>

int main()
{
    auto done = false;
    auto index=0;
    // Schleife so lange durchlaufen
    // so lange done false ist
    do
    {
        std::println("index: {}",index++);
        // Wenn index 3, dann fertig
        if (index == 3)
            done = true;
    } while (!done);
}

index: 0
index: 1
index: 2

Der einzige Unterschied zwischen den beiden Beispielen besteht darin, dass, wenn done zu Beginn der Schleife schon true wäre, die Schleife im ersten Beispiel nicht durchlaufen werden würde und im zweiten Beispiel auf jeden Fall mindestens einmal.

Übungen

while_01

Es sind von der Standardeingabe solange double-Werte einzulesen, bis der Wert 0. eingegeben wird. Aus den eingegebenen Werten ist der Mittelwert zu berechnen und auszugeben.

1. Wert eingeben: 1
2. Wert eingeben: 2.
3. Wert eingeben: 3.3
4. Wert eingeben: 0
Mittelwert der Zahlen: 2.1000

while_02

Für eine einmalige Einlage in einen Aktienfond ist der sich jährlich ergebende Kontostand bei einer festen mittleren Rendite zu berechnen und auszugeben. Der Renditengewinn verbleibt im Aktionfond. Der Kontostand ist mit 2 Nachkommastellen auszugeben.

Die einmalige Einlage sowie die Rendite (in Prozent) sind einzulesen.

Der Kontostand ist so lange auszugeben, bis sich die Einlage mindestens verdoppelt hat (siehe Ausgabe unten) oder 10 Jahre abgelaufen sind.

Wie hoch ist die einmalige Einlage? 100
Und wie hoch ist die Rendite (%)? 12
Am Ende des 1. Jahr: 112.00
Am Ende des 2. Jahr: 125.44
Am Ende des 3. Jahr: 140.49
Am Ende des 4. Jahr: 157.35
Am Ende des 5. Jahr: 176.23
Am Ende des 6. Jahr: 197.38
Am Ende des 7. Jahr: 221.07