Łapka LogoŁapka Infa
🌐
Algorytmy

C++ (2/4): Pętle for i while

Budowa legendarnej pętli 'for' w języku C++. Definiowanie startu, warunku i kroku.

Pętle w C++ (2/4)

Automatyzacja procesów – przechodzenie przez elementy, liczenie potęg, budowanie ciągów. Na maturze to twoje codzienne narzędzie pracy.

1. Klasyczna pętla while (Dopóki...)

Działa prosto i bezpośrednio. Ocenia warunek w okrągłym nawiasie przed wejściem, tak samo jak zwykły if. Zmiana polega na tym, że zamiast wejść raz, wraca zawsze do góry, póki warunek jest Prawdą.

#include <iostream>
using namespace std;

int main() {
    int i = 1;
    
    while (i <= 5) {
        cout << "Pętla numer: " << i << endl;
        i++; // Tajemny, kultowy skrót C++, odpowiednik i = i + 1;
    }
    
    return 0;
}

Pułapka nieskończoności 🪤: Pamiętaj by na dole powiększać zmienną i. Zapomnij, a pętla będzie pisać rzędy jedynek w nieskończoność aż zablokujesz Windowsa.

2. Pętla for (Najpopularniejsza)

W C++ pętla ta wygląda na pierwszy rzut oka przerażająco, ale jest genialna w swoim uporządkowaniu. Cały warunek (start, granica, iteracja) umieszczony jest w jednym okrągłym nawiasie, przedzielony dwoma średnikami.

for (ZMIENNA STARTOWA; KIEDY MA SKOŃCZYĆ; O ILE MA UROSNĄĆ) { ... }

#include <iostream>
using namespace std;

int main() {
    
    // Zauważ, że zaczynamy liczyć standardowo od zera.
    // Zatrzymujemy się tuż przed dziesiątką (i < 10)
    for (int i = 0; i < 10; i++) {
        cout << "Okrążenie: " << i << endl;
    }
    
    return 0;
}

Dlaczego liczymy od zera, aż "ostro" do granicy?

Zwróć uwagę, dlaczego niemal każdy informatyk pisze pętlę do potęgowania jako (int i = 0; i < 5; i++), a nie np. (int i = 1; i <= 5; i++). Głównym powodem są Tablice, o których przeczytasz w kolejnej lekcji. W świecie C++ pamięć maszynowa nie rozumie pokoju pierwszego. Zawsze buduje system jako przesunięcie. "Pierwszy element to przesunięcie równe 0 względem początku".

3. Przechodzenie Pętlą For po Stringu (Napisie)

Co roku na maturze każe Ci się rozbić wyraz na części i np. zamienić w nim literki z małych na duże, albo sprawdzić szyfr (np. Szyfr Cezara). W C++ traktujemy słowo string dokładnie jak ciąg małych elementów zwanych typem char (Characters / Znaki). A one są przydzielone właśnie w Tablicy startującej od Zera!

#include <iostream>
#include <string>
using namespace std;

int main() {
    string slowo = "MATURA";
    int licznik = 0;
    
    // slowo.length() zwraca informację, ile liter ma napis. W tym wypadku 6.
    // Skoro ma 6, to indeksy idą od 0 do 5!
    for (int i = 0; i < slowo.length(); i++) {
        
        // Pytamy słowo o indeks i
        if (slowo[i] == 'A') {
            licznik++;
        }
    }
    
    cout << "Znalazlem liter A: " << licznik << endl;
    
    return 0;
}

PUŁAPKA (Cudzysłów a Apostrof!) 🪤 Spójrz na kod wyżej: użyłem "MATURA" (Podwójne uszy), ale w ifie zapytałem o 'A' (Pojedynczy). To BARDZO ważna zasada w C++.

  • "Napis" - to wielki pakiet znaków, cały string.
  • 'A' - to samotna, biedna literka. Typ char. Kiedy rozbiliśmy pętlą string na atomy (indeksy), wyciągaliśmy pojedyncze chary. Oznacza to, że nie możemy ich przyrównywać do dwu-usznego stringa! (Wywali błąd w konsoli przy budowaniu).