Pętle- while - Programowanie jest łatwe

Eat, sleep, code, repeat- mówią niektórzy, nawiązując do popowej piosenki. Maszyny słyną z tego, że potrafią powtarzać wykonywane czynności bez znudzenia i potrzeby przerwy na sen. Pętle to kwintesencja programowania.

Schody Penrose Za pomocą pętli życie staje się łatwiejsze. Raz napisany kod może wykonywać się dowolną, określoną ilość razy, a żeby tego dokonać wystarczy "zamknąć" konkretny fragment kodu za pomocą pętli. Takie "zamykanie" polega na umieszczeniu kodu w bloku instrukcji i opatrzenia go instrukcją, która steruje pętlą. Łatwizna.

Najprostszą do wykonania pętlą jest while. Działa to następująco: dopóki warunek pętli jest prawdziwy, kod w bloku instrukcji będzie się wykonywać. Ma to postać:

while (warunek stopu) {
 // instrukcje do wykonania
}

To, co może sprawić problemy, to tworzenie warunków sterujących pętlą. Jeżeli warunek zostanie źle napisany, pętla może się np. nigdy nie wykonać, albo będzie się wykonywać w nieskończoność, co doprowadzi do zapętlenia się programu. Swoją drogą, w większości przypadków, gdy program nie odpowiada, przyczyną jest właśnie to- nieskończona pętla (ang. infinite loop).

Przykład 1. Pętla, która zwiększa wartość zmiennej o jej aktualną wartość zaczynając od 1. Aby pętla się kiedyś skończyła, stworzę warunek, aby pętla wykonywała się tak długo, dopóki wartość zmiennej jest mniejsza od 100.

int wartosc = 1;

while (wartosc <= 100) {
  wartosc = wartosc + wartosc;
  cout << "wartosc zmiennej: " << wartosc << "\n";
}

Wynikem będzie następująca treść na ekranie:

wartosc zmiennej: 2
wartosc zmiennej: 4
wartosc zmiennej: 8
wartosc zmiennej: 16
wartosc zmiennej: 32
wartosc zmiennej: 64
wartosc zmiennej: 128   

Dodatkowo do pętli dostarczane są jeszcze dwa mechanizmy, pozwalające na sprawniejsze obsługiwanie instrukcji, które mają się wykonać w pętli. Pierwszy mechanizm to break;. Użycie tego słowa kluczowego spowoduje przerwanie się pętli bez znaczenia czy warunek stopu został spełniony.

Przykład 2. Przykład powyższy zmodyfikuję tak, że wewnątrz pętli przerwę ją, gdy wartość zmiennej przekroczy 60.

int wartosc = 1;

while (wartosc <= 100) {
  wartosc = wartosc + wartosc;
  cout << "wartosc zmiennej: " << wartosc << "\n";

  if (wartosc > 60) {
    break;
  }
}

Wynikem będzie następująca treść na ekranie:

wartosc zmiennej: 2
wartosc zmiennej: 4
wartosc zmiennej: 8
wartosc zmiennej: 16
wartosc zmiennej: 32
wartosc zmiennej: 64

Drugi mechanizm, służący do manipulacji wykonywanymi instrukcjami to continue;. To słowo kluczowe powoduje, że po jego wystąpieniu pętla od razu przechodzi do swojego początku, to znaczy do sprawdzenia warunku, a instrukcje, które następują po tym słowie są pomijane.

Przykład 3. Zmodyfikuję kod z przykładu 2 tak, aby pętla nie wyświetlała wartości pomiędzy 10 a 40:

int wartosc = 1;

while (wartosc <= 100) {
  wartosc = wartosc + wartosc;

  if (wartosc >= 10 && wartosc <= 40) {
    continue;
  }
  cout << "wartosc zmiennej: " << wartosc << "\n";

  if (wartosc > 60) {
    break;
  }
}

Wynikem będzie następująca treść na ekranie:

wartosc zmiennej: 2
wartosc zmiennej: 4
wartosc zmiennej: 8
wartosc zmiennej: 64

Ćwiczenia

  1. Co się stanie, gdy w przykładzie 1 warunek zostałby napisany w taki sposób: while (wartosc == 100)?
  2. Jak stworzyć nieskończoną pętlę? Czy da się wyjść z takiej pętli? Do czego taka pętla może służyć?
  3. Napisz pętlę, która wyświetli wartości ciągu Fibonacciego do 200 (wartość kolejnej liczby jest sumą dwóch poprzednich, gdzie pierwsze dwie poprzednie to 0 i 1). Wynikiem powinno być: 1, 2, 3, 5, 8, 13, 21, etc.)

Dodano: 2018-04-06 07:42 przez Piotr Poźniak

ćwiczenia , pętle , while , continue , break ,
Piotr Poźniak
O autorze:

Programuję od ponad 15 lat. Prowadzę software house. Angażuję i zachęcam wszystkich do programowania w ramach inicjatywy Programowanie jest łatwe.