Schleifen in C/C++

Hier geht es um C/C++-Schleifen - für Einsteiger (Anfänger) gut erklärt.

Abweisende Schleifen in C++

For-Schleife

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:


C++-Schleifen - zweiter Teil

Die for-Schleife und die while-Schleife sind in C und C++ sehr ähnlich, so dass sie beinahe austauschbar sind.

while

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.


Nicht-abweisende Schleife

do while

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!


Mehrere Schleifen

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:


Für fortgeschrittene Mitdenker: Schleifen

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++).