Hier geht es um C/C++-Schleifen - für Einsteiger (Anfänger) gut erklärt.
Die For-Schleife ist ein Konstrukt, das besonders gut geeignet ist, wenn man eine festgelegte Anzahl von Wiederholungen machen möchte.
Sie hat zwei "Erscheinungsformen": Die erste Form kommt zur Anwendung, wenn die eigentliche Schleife aus nur einer Anweisung besteht.
for (Startausdruck ; Prüfausdruck ; Inkrementausdruck )
Anweisung;
Die zweite Form steht immer dann, wenn mehr als eine Anweisung in der Schleife ist.
for (Startausdruck ; Prüfausdruck ; Inkrementausdruck )
{
Anweisung;
Anweisung;
}
Den Startausdruck nennt man auch Initialisierungsausdruck. Und den Inkrementausdruck nenne ich Erhöhungs- oder Erniedrigungsausdruck, weil es meist eine Erhöhung oder eine Erniedrigung ist. Eine Erhöhung könnte zum Beispiel so etwas sein: i += 2. (Ist: i = i + 2)
Ein Beispiel einer einfachen for-Schleife ist hier zu sehen:
for (int i = 0; i < 8; i++)
{
cout << i;
cout << endl;
}
Außerdem gehört die For-Schleife zu den Schleifen, die unter bestimmten Umständen auch gar nicht abgearbeitet werden. Dann nämlich, wenn der Prüfausdruck, d. h. die Abbruchbedingung beim ersten Lauf schon falsch ist.
Dieses lauf++ bedeutet: lauf = lauf + 1.
Beispiel: for (lauf = 0; lauf < 10; lauf++)
Startausdruck Prüfausdruck Erhöhung
Mach Dir das YouTube-Fenster groß!
Im folgenden Video kommt der Ausdruck vor: schritt++. Das bedeutet: schritt = schritt + 1.
Hier folgt ein kleines Programm mit einer for-Schleife. Es ist eine Gewohnheit von Programmierern, die for-Schleife im ersten Teil (= Initialisierungsausdruck) mit 0 (Null) zu
beginnen.
//elegant.cpp
#include <iostream> //cout<<
#include <conio.h> //getch()
using namespace std;
int main()
{
for (int schritt=0; schritt<8; schritt++)//Wiederhole 8 mal
{
cout <<endl<< "Schritt " << schritt + 1 << ". Taste bitte!";
getch();
} //for-Ende
cout <<endl<< "Ende des Programms. Taste bitte!";
getch();
return 0;
} //main-Ende
Es gibt dann noch so kleine Besonderheitten wie mehrere for-Schleifen, die ineinander geschachtelt sind. Hier ein solches Beispiel:
Noch eine for-Schleife in einer for-Schleife:
Die for-Schleife und die while-Schleife sind in C und C++ sehr ähnlich, so dass sie beinahe austauschbar sind.
Die While-Schleife ist eine Schleifen-"Konstruktion", die besonders gut geeignet ist, wenn man eine nicht festgelegte Anzahl von Wiederholungen machen möchte.
while ( Prüfausdruck )
Anweisung;
Oder (bei zwei oder mehr Anweisungen):
while ( Prüfausdruck )
{
Anweisung;
Anweisung;
}
Außerdem gehört diese Schleife wie die for-Schleife zu denjenigen, die unter bestimmten Umständen auch gar nicht abgearbeitet werden. Dann nämlich, wenn die Abbruchbedingung beim ersten Lauf schon falsch ist.
Das Programm "fibo.cpp":
//fibo.cpp
//nach Lafore S. 142
#include <iostream>
using namespace std;
int main()
{
const unsigned long loi = 2971999990;
unsigned long next = 0;
unsigned long last = 1;
while ( next < loi/2 )
{//while
cout << last << " ";
long summe = next+last;
next = last;
last = summe;
}//while
cin.get();
return 0;
}
Tipp: Halt an bei 5:34 oder bei 5:35, damit Du das Programm in C++ ganz siehst.
do while ist dem repeat until in Pascal sehr ähnlich. Das (repeat until) ist auch eine nicht-abweisende Schleife. Die Do-Schleife, wie wir sie auch nennen können, wird mindestens einmal bearbeitet.
do
Anweisung;
while (Prüfausdruck);
Oder bei zwei oder mehr Anweisungen:
do
{
Anweisung;
Anweisung;
} while (Prüfausdruck);
//janein.cpp
#include <iostream>
using namespace std;
int main()
{
char janein;
cout << "Bitte entscheide dich ...";
cout << endl << "Ja oder nein (j oder n eingeben!) ? ";
do
cin >> janein;
while (janein!='j' && janein!='n');
cout << endl << "Du hast " << janein << " getippt.";
cout << endl;
system("pause");
return 0;
}
Hier unten folgt ein ähnliches Programm:
//euler.cpp
#include <iostream>
using namespace std;
int main()
{
double eulerGuess;
cout << "Kleines Eulerspiel";
cout << endl << "Bitte tippen Sie die Eulerkonstante mit Punkt statt Komma";
cout << endl << "und mit genau 5 Nachkommastellen ein: ";
do
cin >> eulerGuess;
while (eulerGuess != 0.57721);
cout << endl << "Sehr gut geraten!";
return 0;
}
Zur Erklärung: Normalerweise schreibt man diese Schleife mit den geschweiften Klammern { und }. Aber wenn - wie im obigen Programm - nur eine einzige Anweisung in der Schleife steht (cin >> eulerGuess;), geht es auch ohne die zwei geschweiften Klammern!
Bei dem folgenden Programm ist zu beachten: Die int prim[m] sind weiter hinten bei Vektor erklärt.
Die if-Anweisung wird hier unter Bedingung kurz beschrieben.
//prim.cpp
#include <iostream>
#include <conio.h>
using namespace std;
const int m = 1000;
int prim[m];
int main()
{
int z=0;
int p;
int k;
cout << "Primzahlen bis 2003:";
cout <<endl<< "2 ";
for(int i=0; i<=m; i++)
{ prim[i] = 1; }
for(int j=0; j<=m; j++)
{
if (prim[j])//wenn prim[j] == 1
{
p = j + j + 3;
k = j + p;
z++;
cout << " " << p << " ";
while (k <= m)
{
prim[k] = 0;
k += p;
}//while
}//if
} //for j
cout <<endl<< "Es wurden " << z << " Primzahlen gefunden.";
getch();
return 0;
} //main()
Ein Ausschnitt dieses Programms:
In diesem Bild kommt zuerst die while-Schleife, dann die do-while-Schleife und zuletzt die for-Schleife dran.
for_init_statement ist hier besonders zu erwähnen. Hier kann der for-Schleifen-Teil stehen:
int i=0; (mit Semikolon). Ein Beispiel dazu heißt: for (int i=0; i<10; i++).