am Beispiel von Teilbarkeitsüberprüfungen

Im folgenden findet ihr ein Tutorial, indem ich die while-Schleife mittels Debugging genauer erläutere. Das Tutorial legt im ersten Teil den Fokus auf das Debugging und ist hinsichtlich der Erläuterungen zur while-Schleife entsprechend langwieriger.

PLAY

am Beispiel von Fakultäten

Die Fakultät von n ist dadurch definiert, dass alle Zahlen von 1 bis einschließlich n miteinander multipliziert werden:

fakultaet

Um diese Fakultät zu berechnen müssen wird also alle Zahlen von 1 bis n multiplizieren. Das kann der Rechner jedoch nur Schrittweise, also:

1 ⋅ 2 = 2
2 ⋅ 3 = 6
6 ⋅ 4 = 24

Der erste Wert ist eine Art Zwischenwert, den wir immer aus der vorherigen Rechnung übernehmen, der zweite Wert ist die aktuelle Zählvariable und der letzte Wert ist unser Ergebnis der jetzigen Rechnung, also der Zwischenwert für die nächste Rechnung. Dafür müssen wir also das Ergebnis der Rechnung immer wieder zwischenspeichern und mit dem neuen Zähler wieder multiplizieren. Eine Umsetzung mit einer while-Schleife würde so aussehen:

1
2
3
4
5
6
7
8
9
10
11
12
13
// Startwert muss neutral bezüglich der Multiplikation sein

Int64 Zwischenwert = 1;
// Ziel: Fakultät von 5 berechnen

int Ende = 5;
while (Ende >= 1)
{
    // Wird ausgeführt, solange die Schleife durchlaufen wird

    Zwischenwert = Zwischenwert * Ende;

    Ende = Ende - 1; //alternativ Ende--

}
// Fakultät = letztes Zwischenergebnis, ausgeben

Console.WriteLine(Zwischenwert);

Der Schleifen-“Kopf“ while (Ende >= 1) bedeutet, dass die geschweiften Klammern unterhalb des whiles solange ausgeführt werden, wie Ende größer oder gleich 1 ist. Im Schleifen-Körper legen wir fest, dass sich unser neuer Zwischenwert aus der Multiplikation des alten Zwischenwerts mit dem aktuellen Ende ergibt. Danach müssen wir aus zweierlei Gründen das Ende um einen Zähler verringern:

  • Zum einen würde die Schleife unendlich lange weiterlaufen, wenn wir nicht dafür sorgen, dass das Ende irgenwann die Zahl 1 erreicht.
  • Zum anderen würden wir immer wieder unseren Zwischenwert mit Ende multiplizieren, also in unserem Fall mit 5.

Die Schleife berechnet die Fakultät in unserem Beispiel nicht wie oben angegeben, sondern in umgekehrter Reihenfolge, also:

5     ⋅ 4 = 20
20   ⋅ 3 = 60
60   ⋅ 2 = 120
120 ⋅ 1 = 120

Um "Prozessorlast" einzusparen, können wir natürlich while (Ende >= 1) noch durch while (Ende > 1) ersetzen, da wir wissen, dass die Multiplikation mit 1 am Ergebnis der Multiplikation nichts ändert. Und die while-Schleife dadurch nicht mehr das Zwischenergebnis mit 1 multiplizieren würde, da sie vorher abbricht.