Die do-while Schleife unterscheidet sich von der while-Schleife, dadurch, dass die Abbruchbedingung nicht am Anfang, sondern am Ende jedes Schleifendurchlaufs geprüft wird. Die Anweisung wird somit zumindest einmal durchlaufen.
a) Schreibe ein Programm, welches die Fakultät einer Zahl berechnet.
Hinweis: Die Fakultät (!) einer Zahl ist folgendermaßen definiert: n!=n*(n-1)*(n-2)* …3*2*1
b) Erweitere das Programm, sodass auch der Sonderfall 0! = 1 beachtet wird.
Beispiel eines Ablaufdiagramms für a)
|--------------------------|
|fakultaet=1; | //initialisiere mit Wert 1!!!!
|cin>>n; | //Lese Benutzereingabe ein!
|--------------------------| //do-while Schleife
|do{ |
| |----------------------|
| |fakultaet=fakultaet*n;| //Multipl. aktuellen Wert von Fak. mit n
| |----------------------|
| |n--; | //Dekrementiere n;
| |----------------------|
| } |
|while(n>0) | //Laufbedingung
|--------------------------|
|cout<<Ergebnis; | //Ausgabe
|--------------------------|
do Anweisung; while(Ausdruck); //Schleifenaustrittsbedingung do { Anweisung1; Anweisung2; ...; } while(Ausdruck); //Schleifenaustrittsbedingung
do leitet die do-while-Anweisung ein.while und darauf der auszuwertende Ausdruck. Der Ausdruck wird in Klammern ( ) eingeschlossen. Bei Rückgabe des Wertes true wird der Schleifenkörper erneut ausgeführt. Liefert der Ausdruck false zurück, wird die Programmausführung mit den Anweisungen, die der Schleife folgen fortgesetzt. Gegeben ist eine positive Zahl n (z.B. 123). Gesucht ist die Ausgabe der Ziffern dieser Zahl in umgekehrter Reihenfolge (also 321).
Hinweis für die Lösungsidee: Spalte jeweils die letzte Ziffer mit Hilfe des Modulo-Operators und der Division durch 10 ab!
Skizziere zuerst deine Lösungsidee in einem Ablaufdiagramm und beginne erst dann mit dem eigentlichen Programmieren.