Pętla FOR
Pętla (instrukcja) for: jest stosowana do wielokrotnego wykonania zestawu instrukcji zawartych w nawiasach klamrowych. Typowo wykorzystuje się ją z licznikiem, który służy do sterowania ilością iteracji pętli poprzez jego inkrementację lub dekrementację. Instrukcja for znajduje zastosowanie w różnorodnych sytuacjach wymagających powtarzania określonych czynności, często w kontekście pracy z tablicami, co pozwala na efektywne przetwarzanie zbiorów danych lub manipulację stanem wielu wejść/wyjść.
Podstawowa składnia pętli for w Arduino wygląda następująco (Kod_001):
1 2 3 4 5 |
// Składnia pętli for: for (inicjalizacja; warunek kontynuacji; zmiana wartości licznika) { // Kod do wykonania na każdym kroku pętli } |
Inicjalizacja: Ustawia początkowy stan pętli, zwykle przez zadeklarowanie i przypisanie wartości początkowej do zmiennej licznika.
Warunek kontynuacji: Określa warunek kontynuowania pętli. Pętla wykonuje się dopóki warunek jest spełniony (dopóki zwraca wartość “prawda” czyli true).
Zmiana wartości licznika: Modyfikuje stan zmiennej licznika na końcu każdego cyklu pętli, zazwyczaj przez inkrementację (zwiększenie) lub dekrementację (zmniejszenie).
Przykład 1
Załóżmy, że naszym celem jest wyświetlenie na konsoli szeregowej serii numerów od 0 do 10, wraz ze słowem Numer na początku każdej linii (Symulacja_1).
W powyższej symulacji, pętla for skonfigurowana jest do wykonywania iteracji od wartości początkowej i = 0 do wartości końcowej i = 10 włącznie, zwiększając zmienną i o jeden (i=i+1) po każdej iteracji.
Składniki pętli for opisane są poniżej:
- Inicjalizacja: int i = 0 ustanawia zmienną lokalną i jako licznik pętli i inicjalizuje ją wartością 0 przed pierwszą iteracją pętli.
- Warunek kontynuacji: i <= 10 to warunek, który jest sprawdzany przed każdą iteracją pętli. Dopóki wartość i jest mniejsza lub równa 10, pętla będzie kontynuowana.
- Inkrementacja: i=i+1 zwiększa wartość i o jeden po każdej iteracji pętli. To samo można osiągnąć za pomocą bardziej zwięzłej formy i
++
(zobacz: Operatory inkrementacji i dekrementacji).
Efekt działania programu na monitorze portu szeregowego:
1 2 3 4 5 6 7 8 9 10 11 |
Numer: 0 Numer: 1 Numer: 2 Numer: 3 Numer: 4 Numer: 5 Numer: 6 Numer: 7 Numer: 8 Numer: 9 Numer: 10 |
Przykład 2
Pętle for mogą być używane nie tylko do inkrementacji, ale także do dekrementacji (zmniejszania wartości), co jest przydatne np. podczas odliczania od końca do początku.
Tym razem załóżmy, że naszym celem jest wyświetlenie na konsoli szeregowej serii numerów od 10 do 0, wraz ze słowem Numer na początku każdej linii (Symulacja_2).
W powyższej symulacji pętla for skonfigurowana jest do wykonywania iteracji od wartości początkowej i = 10 do wartości końcowej i = 0 włącznie, zmniejszając zmienną i o jeden (i = i – 1) po każdej iteracji.
Składniki pętli for opisane są poniżej:
- Inicjalizacja: int i = 10 ustanawia zmienną lokalną i jako licznik pętli i inicjalizuje ją wartością 10 przed pierwszą iteracją pętli.
- Warunek kontynuacji: i >= 0 to warunek, który jest sprawdzany przed każdą iteracją pętli. Dopóki wartość i jest większa lub równa 0, pętla będzie kontynuowana.
- Dekrementacja: i = i – 1 zmniejsza wartość i o jeden po każdej iteracji pętli. To samo można osiągnąć za pomocą bardziej zwięzłej formy i
--
(zobacz: Operatory inkrementacji i dekrementacji).
Efekt działania programu na monitorze portu szeregowego:
1 2 3 4 5 6 7 8 9 10 11 |
Numer: 10 Numer: 9 Numer: 8 Numer: 7 Numer: 6 Numer: 5 Numer: 4 Numer: 3 Numer: 2 Numer: 1 Numer: 0 |
Instrukcja CONTINUE w pętli FOR
Instrukcja continue służy do natychmiastowego przejścia do kolejnej iteracji pętli, pomijając pozostałą część kodu w bieżącej iteracji.
Jest to przydatne, gdy chcemy, aby pętla pomijała pewne wartości i kontynuowała działanie bez wykonywania kodu znajdującego się poniżej instrukcji continue.
Przykład 3
Poniżej znajduje się przykład (Symulacja_3) użycia instrukcji continue w praktyce.
W tym przykładzie, gdy zmienna i osiągnie wartość 5, zostanie wykonana instrukcja continue. Oznacza to, że program pominie dalsze instrukcje w ciele pętli dla tej konkretnej iteracji – czyli nie zostanie wypisany tekst “Numer: 5”.
Zamiast tego pętla natychmiast przejdzie do kolejnej wartości zmiennej i.
W rezultacie na konsoli zostaną wypisane wszystkie liczby od 0 do 10, z wyjątkiem liczby 5, która została pominięta. Jest to przydatne, gdy chcemy celowo pominąć określone przypadki, ale nie przerywać całej pętli.
Efekt działania programu na monitorze portu szeregowego:
1 2 3 4 5 6 7 8 9 10 |
Numer: 0 Numer: 1 Numer: 2 Numer: 3 Numer: 4 Numer: 6 Numer: 7 Numer: 8 Numer: 9 Numer: 10 |
Instrukcja BREAK w pętli FOR
Instrukcja break natomiast służy do natychmiastowego zakończenia pętli, niezależnie od jej pierwotnie zaplanowanego zakresu działania. Instrukcja break “wychodzi” z pętli, co oznacza, że żadne kolejne
iteracje już się nie wykonają, a program kontynuuje działanie od instrukcji znajdującej się bezpośrednio po zakończonej pętli.
Przykład 4
Poniżej znajduje się przykład (Symulacja_4) użycia instrukcji break w praktyce.
W tym przykładzie, gdy zmienna i przekroczy wartość 5, zostanie wykonana instrukcja break. Oznacza to, że program natychmiast zakończy działanie całej pętli for, niezależnie od tego, ile iteracji jeszcze pozostało.
W rezultacie na konsoli zostaną wypisane jedynie liczby od 0 do 5. Po osiągnięciu wartości 6, warunek i > 5 zostaje spełniony, więc pętla zostaje przerwana i dalsze wypisywanie numerów nie następuje. Jest to przydatne, gdy chcemy zakończyć pętlę wcześniej, np. po znalezieniu konkretnej wartości lub spełnieniu określonego warunku.
Efekt działania programu na monitorze portu szeregowego:
1 2 3 4 5 6 |
Numer: 0 Numer: 1 Numer: 2 Numer: 3 Numer: 4 Numer: 5 |
Instrukcje continue i break są często używane w pętlach sterujących przebiegiem programu. Choć działają w różny sposób, obie pozwalają wpływać na przebieg iteracji – jedna je pomija, druga przerywa.
Podstawowe różnice między tymi instrukcjami zostały zestawione w tabeli poniżej (Tab.1):
Instrukcja | Działanie |
---|---|
continue | Pomija pozostałą część kodu w bieżącej iteracji i przechodzi do następnej. |
break | Natychmiast kończy działanie całej pętli. |
Przykład pętli FOR z krokiem innym niż 1
Pętlę for można łatwo modyfikować, zmieniając wielkość kroku – czyli sposób, w jaki zmienna sterująca zmienia swoją wartość po każdej iteracji.
Zwiększając krok, możemy np. pomijać niektóre wartości. Jest to przydatne, gdy chcemy przetwarzać co drugi element tablicy, wypisywać tylko liczby parzyste lub wykonywać operacje w większych odstępach.
Przykład 5
Poniżej znajduje się przykład (Symulacja_5) działania pętli for z krokiem równym 2:
W powyższym przykładzie zmienna i zaczyna od 0 i zwiększa się o 2 po każdej iteracji. Dzięki temu na konsoli wypisane zostaną tylko liczby parzyste: Numer: 0, 2, 4, …, 20.
Efekt działania programu na monitorze portu szeregowego:
1 2 3 4 5 6 7 8 9 10 11 |
Numer: 0 Numer: 2 Numer: 4 Numer: 6 Numer: 8 Numer: 10 Numer: 12 Numer: 14 Numer: 16 Numer: 18 Numer: 20 |
Zagnieżdżanie pętli FOR
Zagnieżdżone pętle for pozwalają wykonywać powtarzalne czynności w układzie wierszy i kolumn, gdzie jedna pętla znajduje się wewnątrz drugiej.
To bardzo przydatne narzędzie, gdy chcemy np. wypisywać wielokrotnie dane, przetwarzać dane w dwóch wymiarach (np. macierze), tworzyć proste kształty z symboli, budować tabliczki mnożenia itp. .
Poniżej przedstawiono kilka przykładów wykorzystania zagnieżdżonych pętli for:
Przykład 6
W poniższym przykładzie (Symulacja_6) zastosowano zagnieżdżoną pętlę for, czyli pętlę umieszczoną wewnątrz innej pętli. Takie rozwiązanie pozwala wykonać jeden zestaw instrukcji wielokrotnie – w tym przypadku odliczanie od 5 do 0 jest powtarzane dla każdej z trzech linii.
Następnie uruchamiana jest pętla zewnętrzna, która wykonuje się trzy razy – dla wartości i = 0, i = 1 oraz i = 2. Każda iteracja odpowiada jednej linii tekstu wyświetlanej na konsoli. Na początku każdej linii wypisywany jest numer linii oraz tekst „odliczam”.
Wewnątrz tej pętli znajduje się pętla wewnętrzna, odpowiedzialna za odliczanie wstecz od 5 do 0. Dla każdej iteracji tej pętli wypisywana jest jedna liczba: 5, 4, 3, 2, 1, 0.
Po zakończeniu pętli wewnętrznej wykonywana jest instrukcja Serial.println(), która kończy bieżącą linię tekstu i przechodzi do kolejnej, przygotowując miejsce na nowy wiersz odliczania.
Efekt działania programu na monitorze portu szeregowego:
1 2 3 |
nr linii: 0 odliczam: 543210 nr linii: 1 odliczam: 543210 nr linii: 2 odliczam: 543210 |
Przykład 7 – tabliczka mnożenia
Zagnieżdżone pętle for świetnie nadają się do wykonywania powtarzalnych obliczeń w układzie wierszy i kolumn. W tym przykładzie (Symulacja_7) za ich pomocą generowana jest prosta tabliczka mnożenia dla liczb od 1 do 3.
Następnie działa pętla zewnętrzna, która przechodzi przez liczby od 1 do 3. Dla każdej z tych liczb uruchamiana jest pętla wewnętrzna, również wykonująca iteracje od 1 do 3.
W każdej iteracji pętli wewnętrznej wykonywane jest obliczenie i × j, a następnie wynik jest wypisywany w formacie:
„1 x 1 = 1”, „1 x 2 = 2”, itd.
Po każdej serii wyników dla jednej liczby i, wypisywana jest pusta linia w celu oddzielenia bloków.
Efekt działania programu na monitorze portu szeregowego:
1 2 3 4 5 6 7 8 9 10 11 |
1 x 1 = 1 1 x 2 = 2 1 x 3 = 3 2 x 1 = 2 2 x 2 = 4 2 x 3 = 6 3 x 1 = 3 3 x 2 = 6 3 x 3 = 9 |
Przykład 8 – rysowanie trójkąta z gwiazdek
Zagnieżdżone pętle for można wykorzystać nie tylko do obliczeń, ale także do tworzenia prostych wzorów tekstowych, takich jak trójkąty, prostokąty czy inne figury zbudowane ze znaków.
W tym przykładzie (Symulacja_8) przy ich pomocy tworzony jest trójkąt prostokątny złożony z gwiazdek.
Na początku uruchamiana jest pętla zewnętrzna, która odpowiada za pięć kolejnych wierszy. W każdej iteracji tej pętli liczba gwiazdek zależy od wartości zmiennej i – czyli numeru aktualnego wiersza.
Wewnątrz pętli zewnętrznej znajduje się pętla wewnętrzna, która wypisuje kolejne znaki *
. Liczba tych znaków zwiększa się z każdą linią:
- w pierwszym wierszu wypisana jest 1 gwiazdka,
- w drugim – 2 gwiazdki,
- w trzecim – 3 gwiazdki,
- i tak dalej, aż do 5.
Po zakończeniu pętli wewnętrznej wykonywana jest instrukcja Serial.println(), która przechodzi do nowej linii.
Efekt działania programu na monitorze portu szeregowego:
1 2 3 4 5 |
* ** *** **** ***** |
Przykład 9 – zagnieżdżanie pętli for wraz z instrukcją continue
Ten przykład (Symulacja_9) pokazuje, jak za pomocą zagnieżdżonych pętli for i instrukcji continue można tworzyć powtarzalne wzorce z filtrowaniem danych.
Wypisywane są tylko linie o parzystym numerze od 0 do 10, a w każdej z nich – parzyste liczby od 10 do 0.
Program wykorzystuje zagnieżdżone pętle for, aby wypisać kilka linii z odliczaniem wstecz.
Wypisywane są tylko te linie, których numer jest parzysty (0, 2, 4, 6, 8, 10), a w każdej z nich odliczane są tylko parzyste liczby od 10 do 0.
Aby sprawdzić, czy liczba jest parzysta, program używa operatora modulo (%), który zwraca resztę z dzielenia. Jeśli reszta z dzielenia przez 2 jest różna od zera (j % 2 != 0), oznacza to, że liczba jest nieparzysta – wtedy program używa instrukcji continue, aby pominąć jej wypisanie.
Efekt działania programu na monitorze portu szeregowego:
1 2 3 4 5 6 |
nr linii: 0 parzyste odliczanie: 10 8 6 4 2 0 nr linii: 2 parzyste odliczanie: 10 8 6 4 2 0 nr linii: 4 parzyste odliczanie: 10 8 6 4 2 0 nr linii: 6 parzyste odliczanie: 10 8 6 4 2 0 nr linii: 8 parzyste odliczanie: 10 8 6 4 2 0 nr linii: 10 parzyste odliczanie: 10 8 6 4 2 0 |
Przykład 10 – zagnieżdżanie pętli for wraz z instrukcją break
Instrukcja break pozwala na natychmiastowe przerwanie działania pętli, gdy zostanie spełniony określony warunek.
W tym przykładzie (Symulacja_10) program odlicza od 10 do 0 w kolejnych liniach i przerywa odliczanie w danej linii, gdy natrafi na liczbę 4.
Program wypisuje kolejne linie z numerami od 0 do 4. W każdej z nich następuje odliczanie wstecz od 10 do 0.
Jednak gdy tylko zostanie napotkana liczba 4, instrukcja break powoduje natychmiastowe zakończenie pętli wewnętrznej – dlatego liczby 4 i mniejsze nie są wypisywane.
Warunek sprawdzany jest za pomocą porównania j ==
4. Gdy warunek zostanie spełniony, dalsze liczby nie są już przetwarzane, a program przechodzi do kolejnej linii.
Efekt działania programu na monitorze portu szeregowego:
1 2 3 4 5 |
nr linii: 0 odliczanie do 4: 10 9 8 7 6 5 nr linii: 1 odliczanie do 4: 10 9 8 7 6 5 nr linii: 2 odliczanie do 4: 10 9 8 7 6 5 nr linii: 3 odliczanie do 4: 10 9 8 7 6 5 nr linii: 4 odliczanie do 4: 10 9 8 7 6 5 |
Asystent Arduinowo_AI

Asystent Arduinowo_AI zgłębił powyższy zakres wiedzy i z przyjemnością wszystko Ci wyjaśni.
