Kurs: Kurs wstępu do programowania KONKURS

Lekcja: Pętla for i tablice

Część programistyczna: Pętla for i tablice

Prosta pętla for

Wiemy już, że pętle pozwalają nam wielokrotnie wykonywać takie same lub podobne czynności. Jednym z najprostszych przypadków jest sytuacja, gdy chcemy powtórzyć daną czynność i wiemy dokładnie, ile razy chcemy to zrobić. Można do tego celu użyć poznanej już pętli while. Jednak lepiej nadaje się do tego pętla for. W tym nagraniu objaśniamy działanie tej pętli wyjątkowo dokładnie.


Zobacz tekst nagrania

Tablice

Tablice pozwalają przechowywać wiele danych naraz. Świetnie współgrają z pętlą for.


Zobacz tekst nagrania

Dodatek: Ogólna pętla for

Jak dotychczas używaliśmy tylko konkretnego, dosyć prostego schematu pętli for. Teraz opiszemy wygląd pętli for w pełnej ogólności. Pozwoli nam to dokładniej zrozumieć, jak działa ta pętla.

for (instrukcja_początkowa; warunek_stopu; krok_pętli)
    instrukcja;
Mamy tu trzy zasadnicze części:
  • Instrukcja początkowa to instrukcja, która zostaje wykonana na samym początku pętli, niezależnie od wszystkiego. Zazwyczaj jest to instrukcja przypisania, która może wystąpić wraz z deklaracją zmiennej (zmiennych) albo bez, jeśli zmienna (zmienne) są zadeklarowane przed pętlą.
  • Warunek stopu to dowolny warunek logiczny (czyli taki jak w instrukcjach if oraz while). Niespełnienie tego warunku przed wykonaniem danego obrotu pętli powoduje zakończenie pętli.
  • Wreszcie krok pętli to instrukcja, która jest wykonywana po każdym obrocie pętli. Często jest ona używana do zmiany wartości zmiennej (zmiennych) sterujących pętli.
A zatem pętla for działa w następującym cyklu:

instrukcja_początkowa;
sprawdź warunek_stopu - jeśli fałszywy, to koniec
instrukcja;
krok_pętli;
sprawdź warunek_stopu - jeśli fałszywy, to koniec
instrukcja;
krok_pętli;
...
Koniec następuje wtedy, gdy warunek stopu przed kolejnym obrotem pętli staje fałszywy. Jeśli to nigdy nie nastąpi, ma miejsce zapętlenie. Dodajmy jeszcze, że każda z części pętli może być pusta (wtedy po prostu nic tam nie piszemy).

Uwaga: Używając tylko pętli while, można napisać ciąg instrukcji równoważny ogólnej pętli for. (Czy potrafisz to zrobić?) Tak więc często taki sam kod można wyrazić albo za pomocą ogólnej pętli for, albo za pomocą pętli while. Programista ma wtedy zupełną dowolność, której metody użyć. Ot, jak mu będzie wygodniej!

Oto przykład zastosowania ogólnej pętli for do zadania o zliczaniu cyfr z poprzedniej lekcji. Według nas wygląda zdecydowanie mniej czytelnie niż z użyciem pętli while.

#include <iostream>
using namespace std;
 
int main() {
    int n;
    cin >> n;
    int liczba_cyfr = 0;
    if (n == 0)
        liczba_cyfr = 1;
    else
        for (; n > 0; n /= 10)
            liczba_cyfr++;
    cout << liczba_cyfr << endl;
}
W tej lekcji wyjątkowo nie umieszczamy komentarza. Kolejna opowieść profesora Krzysztofa Diksa o programowaniu pojawi się już za tydzień!

Część techniczna: Błędy wykonania i błędne odpowiedzi cz. 3

Część techniczną rozpoczniemy dosyć nietypowo. Wprowadzimy ciąg liczb, który pojawia się nierzadko w matematyce, informatyce, lecz także w biologii, muzyce, a nawet w analizie rynków finansowych. Jest to ciąg liczb Fibonacciego. Pierwsze wyrazy tego ciągu wyglądają tak:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ...

Pierwsze dwie liczby Fibonacciego to 0 i 1. Każda kolejna liczba jest sumą dwóch poprzednich. \(n\)-tą liczbę Fibonacciego oznacza się zazwyczaj jako \(F_n\) lub \(Fib_n\).

Zainteresowanych Czytelników zachęcamy do poszukania w sieci więcej informacji o liczbach Fibonacciego. My tymczasem spróbujemy napisać program, który wyznaczy 50-tą liczbę Fibonacciego (zakładamy, że zerowa liczba Fibonacciego to 0).


Zobacz tekst nagrania

Na koniec dwa pytania do przemyślenia:

  • Czy umiałbyś wyznaczyć pięćdziesiątą liczbę Fibonacciego bez użycia tablicy?
  • Jaką największą liczbę Fibonacciego można wyznaczyć, używając typu long long? A jaką z użyciem typu unsigned long long?