Zagnieżdżone pętle for
to sytuacja, w której jedna pętla działa wewnątrz drugiej. Pozwalają one na realizację bardziej złożonych operacji, takich jak iteracja po macierzach, tworzenie wzorów czy generowanie kombinacji.
1. Składnia zagnieżdżonych pętli for
for (inicjalizacja1; warunek1; krok1) {
for (inicjalizacja2; warunek2; krok2) {
// Kod wykonywany w pętli wewnętrznej
}
// Kod wykonywany po zakończeniu pętli wewnętrznej
}
🔹 Pętla zewnętrzna – kontroluje główny zakres iteracji.
🔹 Pętla wewnętrzna – jest wykonywana całkowicie dla każdej pojedynczej iteracji pętli zewnętrznej.
2. Przykłady praktyczne
Przykład 1: Prosta tabliczka mnożenia
Pętla zewnętrzna iteruje po wierszach, a pętla wewnętrzna po kolumnach.
#include <iostream>
using namespace std;
int main() {
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= 5; j++) {
cout << i * j << "\t";
}
cout << endl;
}
return 0;
}
Wynik:
1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20
5 10 15 20 25
Przykład 2: Generowanie wzoru (piramida liczbowa)
#include <iostream>
using namespace std;
int main() {
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= i; j++) {
cout << j << " ";
}
cout << endl;
}
return 0;
}
Wynik:
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
Przykład 3: Wypełnianie macierzy
Zagnieżdżone pętle często wykorzystuje się do operacji na macierzach (tablicach dwuwymiarowych).
#include <iostream>
using namespace std;
int main() {
const int WIERSZE = 3;
const int KOLUMNY = 3;
int macierz[WIERSZE][KOLUMNY];
// Wypełnianie macierzy
for (int i = 0; i < WIERSZE; i++) {
for (int j = 0; j < KOLUMNY; j++) {
macierz[i][j] = (i + 1) * (j + 1);
}
}
// Wyświetlanie macierzy
for (int i = 0; i < WIERSZE; i++) {
for (int j = 0; j < KOLUMNY; j++) {
cout << macierz[i][j] << "\t";
}
cout << endl;
}
return 0;
}
Wynik:
1 2 3
2 4 6
3 6 9
Przykład 4: Wzór w odwróconej piramidzie
#include <iostream>
using namespace std;
int main() {
for (int i = 5; i >= 1; i--) {
for (int j = 1; j <= i; j++) {
cout << "* ";
}
cout << endl;
}
return 0;
}
Wynik:
* * * * *
* * * *
* * *
* *
*
3. Kluczowe wskazówki i dobre praktyki
✅ Kolejność pętli ma znaczenie – pętla wewnętrzna działa całkowicie w każdej iteracji pętli zewnętrznej.
✅ Uważaj na zbyt dużą liczbę iteracji – zagnieżdżone pętle mogą prowadzić do dużej liczby operacji (np. 1000×1000 iteracji = 1 milion działań).
✅ Wcięcia są kluczowe – poprawne formatowanie kodu zwiększa jego czytelność.
✅ Dobrze opisuj zmienne – zmienne i
i j
są popularne, ale w bardziej złożonych algorytmach warto stosować bardziej opisowe nazwy.
4. Podsumowanie
✅ Zagnieżdżone pętle for
są potężnym narzędziem do przetwarzania danych w wielu wymiarach.
✅ Idealnie sprawdzają się przy macierzach, tabliczkach mnożenia czy rysowaniu wzorów.
✅ Warto zachować optymalizację, aby uniknąć niepotrzebnych iteracji.