Pętla while - odpowiedzi - Programowanie jest łatwe

Sprawdź jak sobie radzisz z pętlami. W tym artykule znajdziesz odpowiedzi do ćwiczeń dotyczących while.

Schody Penrose Co się stanie, gdy w przykładzie 1 warunek zostałby napisany w taki sposób: while (wartosc == 100)?

int wartosc = 1;

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

Pętla nie wykonałaby się. Blok while wykonuje się tak długo, dopóki warunek jest spełniony.

  1. Jak stworzyć nieskończoną pętlę? Czy da się wyjść z takiej pętli? Do czego taka pętla może służyć?

Pętla while wykonuje się tak długo, dopóki warunek jest spełniony. W takim razie wystarczy zapewnić, że warunek zawsze będzie prawdziwy, a taki jest wtedy, gdy wartość wyrażenia w warunku jest niezerowa. Czyli wartość np. 1 w warunku pętli spowoduje, że będzie wykonywać się w nieskończoność.

while (1) {
  // wykonywać się będzie bez końca
}

Można pokusić się o bardziej wyrafinowany warunek. Taki, który zapewni nam choć odrobinę kontroli nad pętlą. Do tego celu może służyć zmienna, którą zmienimy w momencie, gdy będziemy chcieli przerwać pętlę.

int koniec = 0;

while (!koniec) {
  // cos tutaj sie dzieje
  // …

  // pobieramy wartosc z klawiatury, jezeli uzytkownik wpisze wartosc niezerowa
  // petla sie przerwie
  cin >> koniec;
}

Takie pętle są przydatne w momencie, gdy nie wiemy jak długo pętla ma się wykonywać. Powiedzmy, że programujemy algorytm, który ma pobierać i przetwarzać dane otrzymane z internetu. Dopóki połączenie jest aktywne i transmituje dane, program będzie je odbierać i przetwarzać.

  1. 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.)

Klasyk ze szkoły/studiów.

    int poprzednia_wartosc = 0;
    int nastepna_wartosc = 1;
    int aktualna_wartosc = 1;

    while ((poprzednia_wartosc + nastepna_wartosc) <= 200) {
        aktualna_wartosc = nastepna_wartosc;
        nastepna_wartosc = poprzednia_wartosc + nastepna_wartosc;
        poprzednia_wartosc = aktualna_wartosc;
        cout << nastepna_wartosc << “,”;
    }

Deklaruję wartość poprzednią i następną nadaję im początkowe wartości 0 i 1. Dodatkowo, aby nie tracić informacji o poprzedniej wartości, deklaruję zmienną, w której będę przechowywać aktualną wartość. Pętla będzie się wykonywać tak długo, dopóki suma wartości poprzedniej i następnej jest mniejsza od 200. Kopiuję wynik następnej wartości po to, aby móc przypisać ją do zmiennej poprzednia_wartosc. Jeżeli tego nie zrobię, przepadnie informacja o tym, jaką ma mieć wartość poprzednia liczba ciągu. Sumuję dwie poprzednie liczby otrzymując kolejną liczbę ciągu a następnie zapisuję wartość poprzedniej liczby do poprzednia_wartosc.


Dodano: 2018-04-13 09:23 przez Piotr Poźniak

ćwiczenia , odpowiedzi , pętle , while ,
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.