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.
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:
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 while
s 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.