Przypomnijmy, co już wiemy na temat pętli. Służą one do wielokrotnego wykonywania jednej operacji lub całego zestawu poleceń. Dopóki spełniony jest pewien warunek logiczny, dopóty instrukcje umieszczane wewnątrz pętli są wykonywane. Oto budowa pętli while w języku C++ oraz Java:

Już wiesz
Linia 1. while otwórz nawias okrągły wyrażenie zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. instr podkreślnik 1 średnik. Linia 3. instr podkreślnik 2 średnik. Linia 4. instr podkreślnik 3 średnik. Linia 5. kropka kropka kropka. Linia 6. zamknij nawias klamrowy.

Polecenia instr1, instr2, instr3 wykonywane będą tak długo, dopóki wyrażenie logiczne wyrażenie będzie prawdziwe. Podobnie wygląda pętla do‑while. Różnica polega na tym, że warunek logiczny sprawdzany jest po wykonaniu instrukcji umieszczonej (lub umieszczonych) wewnątrz pętli.

W przypadku języka Python pętla while wygląda tak:

Linia 1. while wyrażenie dwukropek. Linia 2. instr podkreślnik 1. Linia 3. instr podkreślnik 2. Linia 4. kropka kropka kropka.

Polecenia instr_1, instr_2 wykonywane będą tak długo, dopóki wyrażenie będzie prawdziwe. W języku Python pętla do‑while nie występuje.

Przypomnijmy jeszcze budowę pętli for w języku JavaC++:

Linia 1. for otwórz nawias okrągły deklaracja iteratora średnik warunek wykonania pętli średnik zmiana wartości iteratora zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. instr podkreślnik 1 średnik. Linia 3. instr podkreślnik 2 średnik. Linia 4. instr podkreślnik 3 średnik. Linia 5. kropka kropka kropka. Linia 6. zamknij nawias klamrowy.

W tym przypadku używamy wyrażenia inicjującego (deklarację iteratora) jako licznika powtórzeń pętli. Wyrażenie dotyczące warunku pętli to warunek logiczny – jeżeli jest on spełniony, wykonywane są operacje w pętli. Z kolei zmiana wartości iteratora jest instrukcją zmieniającą wartość wyrażenia inicjującego (deklaracja iteratora), po każdej iteracjiiteracjaiteracji.

Natomiast w przypadku języka Python, pseudokod pętli for wygląda następująco:

Linia 1. for i in range otwórz nawias okrągły zakres podkreślnik początek przecinek zakres podkreślnik koniec przecinek krok zamknij nawias okrągły dwukropek. Linia 2. instr podkreślnik 1. Linia 3. instr podkreślnik 2. Linia 4. kropka kropka kropka.

Dla każdej wartości z określonego zakresu (uwzględniając wartość kroku, czyli różnicy pomiędzy kolejnymi wartościami zakresu — domyślnie równej 1) wykonywane są instrukcje zawarte wewnątrz pętli. W zmiennej i, przy kolejnych iteracjach pętli, przechowywane są kolejno liczby całkowite z zakresu <zakres_początek, zakres_koniec).

Instrukcja break

Czasem zdarza się, że chcemy przerwać działanie pętli pomimo tego, że nie zostały wykonane wszystkie umieszczone wewnątrz niej instrukcje. W takiej sytuacji przydaje się polecenie break.

Instrukcji break może towarzyszyć warunek (wyrażenie logiczne). Jeżeli jest on spełniony, pętla zostanie opuszczona. Wyjaśnia to zaprezentowany schemat blokowy. Jeżeli instrukcji break nie towarzyszy warunek, to na pytanie zawarte w bloku „Czy warunek przerwania pętli jest spełniony?” odpowiedź zawsze brzmi „Tak”.

RaPL6FWFV7AVu
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Najpierw sprawdzamy, czy decydujące o wykonaniu pętli wyrażenie logiczne ma wartość true. Jeżeli nie, kończymy działanie pętli. Gdy natomiast wyrażenie jest prawdziwe, wykonywane są operacje opisane wewnątrz pętli. Jeżeli wśród poleceń znajdzie się instrukcja break, to pętla zostanie opuszczona bez wykonywania dalszych operacji. Jeżeli instrukcji break będzie towarzyszyło wyrażenie logiczne, to w przypadku przyjęcia wartości true, pętla także zostanie opuszczona. Jeżeli przyjmie wartość false, wykonywane będą kolejne instrukcje w pętli. Taki mechanizm często stosuje się w przypadku pętli zagnieżdżonychzagnieżdżona pętlapętli zagnieżdżonych. Instrukcja break przerywa wówczas działanie pętli wewnętrznej.

Przykład 1

Przedstawiony program, przy użyciu schematu blokowego, wyświetla wszystkie słowa występujące w liście zdanie (kolejne słowa oddzielone są przecinkami), nie zawierające litery znak. W programie użyto pętli zagnieżdżonych. Przetestuj działanie programu dla następujących danych:

  • n = 4

  • znak = "b"

  • zdanie = "instrukcja,break,i,petle"

Zwróć uwagę, że w programie użyto instrukcji break.

Specyfikacja problemu:

Dane:

  • znak – litera alfabetu łacińskiego

  • zdanie – lista ciągów znaków zawierająca n słów różnej długości rozdzielonych przecinkami

  • n – liczba naturalna; liczba słów w liście zdanie

Wynik:

  • Program wypisze listę zdanie bez słów zawierających literę znak.

RuYS7gUWhXmCp1
Wybierz jedno nowe słowo poznane podczas dzisiejszej lekcji i ułóż z nim zdanie.

Instrukcja continue

Polecenie continue przypomina nieco działanie instrukcji break. Nie służy ono jednak do opuszczenia pętli, lecz do pominięcia kolejnych operacji w bieżącym cyklu. Jeżeli instrukcji continue dodatkowo towarzyszy warunek, schemat blokowy wygląda następująco:

R1TotVsK8VlNU
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

W przypadku pojawienia się instrukcji continue pomijane są kolejne polecenia w pętli. Jeżeli wykonanie instrukcji  continue jest zależne od warunku i jest on spełniony, rozpoczyna się następna iteracja. Natomiast w przypadku, gdy warunek nie jest spełniony, wykonywana jest dalsza część operacji w aktualnej iteracji.

Pętle nieskończone

W przypadku gdy warunek wykonania pętli zawsze jest spełniony, to działanie pętli trwa w nieskończoność. Przykładem jest pętla for, w której w ogóle nie podamy warunku (z punktu widzenia składni C++ nie jest to obowiązkowe), a także odpowiednio zbudowana pętla while lub do‑while. Przykład w języku C++ lub Java:

Linia 1. do otwórz nawias klamrowy. Linia 2. instr podkreślnik 1 średnik. Linia 3. instr podkreślnik 2 średnik. Linia 4. kropka kropka kropka. Linia 5. zamknij nawias klamrowy while otwórz nawias okrągły true zamknij nawias okrągły średnik.

Pętla nieskończona w języku Python:

Linia 1. while True dwukropek. Linia 2. instr podkreślnik 1. Linia 3. instr podkreślnik 2. Linia 4. kropka kropka kropka.

Jedynym sposobem zakończenia takiej pętli jest użycie instrukcji break. Warto wiedzieć, że pętli nieskończonych często używa się podczas programowania mikrokontrolerów.

Instrukcja wyboru wielokrotnego i break

Słowo kluczowe break pojawia się często w znanej ci już instrukcji switch‑case w języku C++ oraz Java. W tym przypadku nie towarzyszy mu wyrażenie logiczne. Polecenie break ma po prostu zakończyć wykonywanie instrukcji wyboru wielokrotnego:

Linia 1. switch otwórz nawias okrągły wartość zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. case przypadek1 dwukropek. Linia 3. instr podkreślnik 1 średnik. Linia 4. break średnik. Linia 5. case przypadek2 dwukropek. Linia 6. instr podkreślnik 2 średnik. Linia 7. break średnik. Linia 8. case przypadek3 dwukropek. Linia 9. instr podkreślnik 3 średnik. Linia 10. break średnik. Linia 11. kropka kropka kropka. Linia 12. zamknij nawias klamrowy.

Słownik

iteracja
iteracja

słowo pochodzące od łacińskiego iteratio (powtarzanie); oznacza powtarzanie w pętli tych samych instrukcji, aż do spełnienia pewnego warunku

zagnieżdżona pętla
zagnieżdżona pętla

pętla umieszczona wewnątrz innej pętli