Genauso, wie man manchmal verschachtelte if-Anweisungen benötigt, ist es nicht ungewöhnlich auch Schleifen zu verschachteln. Wenn wir beispielsweise zwei Arrays mit Integern haben und jedes der Elemente miteinander multiplizieren wollen – wenn es sich um mathematische Vektoren handelt – dann benutzt man dazu am besten eine verschachtelte Schleife.

Die erste Schleife läuft durch myNums1, während die innere Schleife durch myNums2 läuft.

// nestedLoops.cpp

#include <iostream>

using namespace std;

int main() {
    const int ARRAY1_LEN = 3;
    const int ARRAY2_LEN = 2;

    int myNums1[ARRAY1_LEN] = {35, -3, 0};
    int myNums2[ARRAY2_LEN] = {20, -1};

    cout << "Multiplying each int in myNums1 by each"
         << " im MyNums2:" << endl;

    for(int index1 = 0; index1 < ARRAY1_LEN; ++index1) {
        for(int index2 = 0; index2 < ARRAY2_LEN; ++index2) {
            cout << myNums1[index1] << " X " << myNums2[index2]
                 << " = " << myNums1[index1] * myNums2[index2]
                 << endl;
        }
    }
    return 0;
}
Multiplying each int in myNums1 by each im MyNums2:
35 X 20 = 700
35 X -1 = -35
-3 X 20 = -60
-3 X -1 = 3
0 X 20 = 0
0 X -1 = 0

Die besagten verschachtelten for Schleifen sind in Zeile 17 und 18. Die erste Schleife durchläuft das Array myNums1 und die zweite Schleife durchläuft das Array myNums2. Für jedes Element in myNums1 wird immer die komplette zweite Schleife ausgeführt.

Verschachtelte Schleifen mit mehrdimensionalen Arrays nutzen

Im Folgenden benutzen wir verschachtelte Schleifen, um die Elemente eines mehrdimensionalen Arrays zu durchlaufen.

// nestedLoopsmultDimArray.cpp

#include <iostream>

using namespace std;

int main() {
    const int NUM_ROWS    = 3;
    const int NUM_COLUMNS = 4;

    // 2D array of integers
    int myInts[NUM_ROWS][NUM_COLUMNS] = { {34,  -1,  879,  22},
                                          {24,  365, -101, -1},
                                          {-20, 40,  90,   97} };
    // iterate rows, each array of int
    for (int row = 0; row < NUM_ROWS; ++row) {
        // iterate integers in each row (columns)
        for (int column = 0; column < NUM_COLUMNS; ++column) {
            cout << "Integer[" << row << "][" << column
                 << "] = " << myInts[row][column] << endl;
        }
    }

    return 0;
}
Integer[0][0] = 34
Integer[0][1] = -1
Integer[0][2] = 879
Integer[0][3] = 22
Integer[1][0] = 24
Integer[1][1] = 365
Integer[1][2] = -101
Integer[1][3] = -1
Integer[2][0] = -20
Integer[2][1] = 40
Integer[2][2] = 90
Integer[2][3] = 97

Zeile 16 bis 22 enthalten die zwei for Schleifen, die wir benötigen, um durch das zweidimensionale Array zu laufen. Im Grunde ist das zweidimensionale Array nur ein Array aus Arrays aus Integern.

Verschachtelte Schleifen zum Berechnen der Fibonacci Zahlen

Die berühmten Fibonacci Zahlen sind eine Serie von Zahlen, die mit 0 und 1 beginnen und jede weitere Zahl ist die Summe der beiden vorherigen Zahlen. Die Reihe beginnt also folgendermaßen:

0, 1, 1, 2, 3, 5, 8, … usw.

Das folgende kleine Programm generiert eine Fibonacci Reihe für beliebig viele Zahlen (limitiert von der Kapazität eines Integer-Datentyps).

// fibonacci.cpp

#include <iostream>

using namespace std;

int main() {
    const int numsToCalculate = 5;
    cout << "This programm will calculate " << numsToCalculate
         << " Fibonacci Numbers at a time" << endl;
    
    int num1 = 0, num2 = 1;
    char wantMore = '\0';
    cout << num1 << " " << num2 << " ";

    do {
        for (int counter = 0; counter < numsToCalculate; ++counter) {
            cout << num1 + num2 << " ";

            int num2Temp = num2;
            num2 = num1 + num2;
            num1 = num2Temp;
        }

        cout << endl << "Do you want more numbers (y/n)? ";
        cin >> wantMore;
    } while (wantMore == 'y');

    cout << "Goodbye!" << endl;

    return 0;
}
This programm will calculate 5 Fibonacci Numbers at a time
0 1 1 2 3 5 8
Do you want more numbers (y/n)? y
13 21 34 55 89
Do you want more numbers (y/n)? n
Goodbye!

Die äußere do...while Schleife wird nur wiederholt, wenn der Nutzer weitere Zahlen der Reihe sehen will. Die innere for Schleife ab Zeile 17 berechnet die nächsten Zahlen der Reihe und gibt jeweils 5 Zahlen aus. Wenn der Nutzer ein 'y' eingibt, wird die do...while Schleife erneut ausgeführt und damit auch die innere for Schleife, die dann die nächsten 5 Zahlen berechnet und ausgibt.

Damit wären wir am Ende der Blogposts über die Programmkontrolle mit Entscheidungen und Schleifen. In den nächsten Artikeln geht es dann um Funktionen