Die for-Schleife
Die meisten Schleifen, die zählen, haben dieselben drei Teile: eine Variable, die vor der Schleife erstellt wird, eine Bedingung und eine Änderung am Ende des Blocks:
int zahl = 1; // Start
while (zahl <= 5) { // Bedingung
std::cout << zahl << std::endl;
zahl++; // Schritt
}Das Zählen ist so häufig, dass C++ eine Schleife hat, die alle drei Teile in eine Zeile schreibt: for:
for (int i = 1; i <= 5; i++) {
std::cout << i << std::endl;
}Beide Schleifen geben dasselbe aus:
1
2
3
4
5In den runden Klammern nach for stehen die drei Teile, getrennt durch Semikolons (;):
int i = 1ist der Start. Er erstellt die Schleifenvariable und wird nur einmal ausgeführt, vor allem anderen.i <= 5ist die Bedingung. Sie wird vor jedem Durchlauf geprüft. Ist sie falsch, endet die Schleife.i++ist der Schritt. Er wird nach jedem Durchlauf ausgeführt, wenn der Block fertig ist.
Die Reihenfolge ist also: Start, Bedingung, Block, Schritt, Bedingung, Block, Schritt und so weiter. In unserer Schleife ist i gleich 1, 1 <= 5 ist wahr, der Block gibt 1 aus, der Schritt macht i zu 2, 2 <= 5 ist wahr, der Block gibt 2 aus … Nach der Ausgabe von 5 macht der Schritt i zu 6, 6 <= 5 ist falsch, und die Schleife endet.
Die Schleifenvariable heißt oft i, aber jeder Name ist möglich. Sie existiert nur innerhalb der Schleife. Gibst du i nach der Schleife aus, meldet Clang error: use of undeclared identifier 'i'. Dafür kann jede Schleife ihr eigenes i haben.
Rückwärts und in Schritten zählen. Um rückwärts zu zählen, beginne bei der größten Zahl, mache weiter, solange die Variable mindestens so groß wie die kleinste Zahl ist, und verringere sie mit i--:
for (int i = 3; i >= 1; i--) {
std::cout << i << std::endl;
}
std::cout << "Los!" << std::endl;3
2
1
Los!Um in größeren Schritten zu zählen, verwende += oder -= im Schritt. Diese Schleife zählt in Fünferschritten:
for (int i = 0; i <= 20; i += 5) {
std::cout << i << std::endl;
}0
5
10
15
20Achte auf die Bedingung: i < 5 hört bei 4 auf, i <= 5 bei 5. Um eins danebenzuliegen ist der häufigste Fehler bei for. Und trenne die drei Teile durch Semikolons, nicht durch Kommas.
for oder while? Nimm for, wenn du weißt, wie oft die Schleife läuft: von 1 bis 10 oder einmal für jedes Element eines Vektors (das ist die nächste Übung). Nimm while, wenn du es vorher nicht weißt, zum Beispiel wenn du eine Zahl verdoppelst, bis sie größer als 1000 ist:
int zahl = 1;
int verdopplungen = 0;
while (zahl <= 1000) {
zahl = zahl * 2;
verdopplungen++;
}
std::cout << "Verdopplungen: " << verdopplungen << std::endl;
std::cout << "Zahl: " << zahl << std::endl;Verdopplungen: 10
Zahl: 1024So schreibst du es:
Anweisungen
- 1
Schreibe die
while-Schleife im Editor alsfor-Schleife um und lösche diewhile-Schleife. Das Programm gibt weiterhin die Zahlen von 1 bis 5 aus. - 2
Ändere deine Schleife so, dass sie die Zahlen von 1 bis 10 ausgibt, einschließlich der 10.
- 3
Schreibe darunter eine zweite
for-Schleife, die von 20 bis 0 in Fünferschritten rückwärts zählt:20,15,10,5und0, jede Zahl in einer eigenen Zeile. Verwendei -= 5als Schritt.