Trzy języki algorytmów

🎯 Po co Ci to?

Ten sam utwór można zapisać nutami, tabulaturą albo nagrać ze słuchu. Muzyka ta sama — zapisy różne, każdy wygodny do czego innego. Z algorytmami jest identycznie: pomysł jest jeden, a zapisów kilka. Umiejętność przechodzenia między nimi to nie sztuka dla sztuki — na maturze dostaniesz algorytm w pseudokodzie i polecenie „zapisz schematem blokowym" (albo odwrotnie), a w pracy zespołowej schemat bywa jedynym językiem, który rozumieją wszyscy: programista, testerka i klient.

✅ Czego się nauczysz

Po tej jednostce potrafisz:

  • zapisać algorytm listą kroków, schematem blokowym i pseudokodem;
  • przetłumaczyć algorytm z jednego zapisu na inny bez zmiany działania;
  • czytać schemat blokowy „palcem", śledząc drogę konkretnych danych.

📘 Wyjaśnienie

Weźmy jeden algorytm i obejrzyjmy go w trzech strojach. Problem: dane — liczba całkowita $n$; wynik — informacja, czy $n$ jest parzysta.

Zapis 1: lista kroków. Znasz go z poprzedniej jednostki — zdania w języku naturalnym, ponumerowane:

  1. Wczytaj $n$.
  2. Oblicz resztę z dzielenia $n$ przez 2.
  3. Jeżeli reszta jest równa 0, wypisz „parzysta"; w przeciwnym razie wypisz „nieparzysta".
  4. Zakończ.

Zaleta: czyta go każdy. Wada: język naturalny kusi nieprecyzyjnością, a przy dłuższych algorytmach (zwłaszcza z powtórzeniami) robi się nieczytelny.

Zapis 2: schemat blokowy. Rysunek, w którym kształt bloku mówi, co się w nim dzieje, a strzałki wyznaczają kolejność:

  • owal — start i stop;
  • równoległobok — wczytanie danych lub wypisanie wyniku;
  • prostokąt — operacja (obliczenie, przypisanie);
  • romb — warunek: z rombu wychodzą dwie strzałki, opisane TAK i NIE.
Startwczytaj nr ← n mod 2r = 0 ?TAKwypisz „parzysta”NIEwypisz „nieparzysta”Stop
Schemat blokowy algorytmu sprawdzania parzystości: Start, wczytaj n, prostokąt r ← reszta z n:2, romb r = 0? — strzałka TAK do „wypisz parzysta", strzałka NIE do „wypisz nieparzysta", oba do Stop. · rys. własny

Schemat czyta się palcem: stawiasz go na Starcie i przesuwasz wzdłuż strzałek, wykonując bloki. Przy rombie wybierasz strzałkę zgodną z odpowiedzią na pytanie. Ta fizyczna czynność — palec na papierze — to najprostsza forma śledzenia algorytmu i będziemy jej używać nieustannie.

Zapis 3: pseudokod. Zapis „prawie-programistyczny": ma zmienne i słowa kluczowe jak prawdziwy język, ale nie przejmuje się średnikami i szczegółami składni. Umowa notacyjna, której będziemy używać w całej książce (celowo blisko konwencji arkuszy maturalnych):

wczytaj n
r ← n mod 2
jeżeli r = 0
    wypisz "parzysta"
w przeciwnym razie
    wypisz "nieparzysta"

Trzy elementy wymagają słowa. Strzałka ← oznacza przypisanie: „policz prawą stronę i zapamiętaj pod nazwą z lewej" (piszemy r ← n mod 2, nie r = n mod 2, żeby odróżnić przypisanie od pytania o równość). mod to reszta z dzielenia: $14 \bmod 4 = 2$, bo $14 = 3 \cdot 4 + 2$. Wcięcia pokazują, co należy do gałęzi „jeżeli", a co jest już poza nią.

💭 Pomyśl: Prześledź pseudokod dla $n = 7$: jaka wartość trafia do $r$ i co zostanie wypisane? A dla $n = 0$?

Sprawdź odpowiedź

Dla $n=7$: $r = 7 \bmod 2 = 1$, warunek $r=0$ fałszywy → „nieparzysta". Dla $n=0$: $r = 0 \bmod 2 = 0$, warunek prawdziwy → „parzysta". I słusznie: zero jest parzyste (dzieli się przez 2 bez reszty), choć wielu ludzi waha się przy tej odpowiedzi. Algorytm się nie waha — to jego urok.

Który zapis wybrać? Listę kroków — gdy tłumaczysz pomysł komuś nietechnicznemu. Schemat blokowy — gdy algorytm się rozgałęzia i chcesz zobaczyć wszystkie drogi (świetny do szukania dziur: gałąź bez strzałki od razu rzuca się w oczy). Pseudokod — gdy algorytm jest dłuższy albo za chwilę stanie się programem. Biegły informatyk nie wybiera raz na zawsze; tłumaczy w obie strony, jak dwujęzyczny człowiek.

🧮 Prześledź

Poniższy pseudokod dostaje trzy liczby. Prześledź go dla danych $a=4$, $b=9$, $c=6$, uzupełniając tabelkę — dopiero potem zajrzyj do odpowiedzi.

wczytaj a, b, c
w ← a
jeżeli b > w
    w ← b
jeżeli c > w
    w ← c
wypisz w
krok $a$ $b$ $c$ $w$ co się dzieje
wczytanie 4 9 6 — …
w ← a 4 9 6 ? …
jeżeli b > w 4 9 6 ? warunek: ?
jeżeli c > w 4 9 6 ? warunek: ?
wypisz w ? wynik: ?
Sprawdź odpowiedź

Po w ← a: $w=4$. Warunek $b>w$ to $9>4$ — prawda, więc $w \leftarrow 9$. Warunek $c>w$ to $6>9$ — fałsz, $w$ bez zmian. Wypisane: 9. Poznajesz? To „największa z trzech" z jednostki 1.2 — ten sam algorytm, trzeci strój. Kandydat z listy kroków nazywa się teraz $w$.

⚠️ Uwaga, pułapka

W schemacie blokowym z rombu muszą wychodzić dokładnie dwie strzałki (TAK i NIE) i każda droga musi prowadzić do Stopu. Najczęstszy błąd na sprawdzianach: gałąź NIE urwana w powietrzu — czyli algorytm, który dla części danych „nie wie, co dalej". Rysując schemat, na końcu przejedź palcem każdą możliwą drogą od Startu do Stopu; jeśli któraś się urywa, schemat jest zły, choćby wyglądał pięknie.

🛠️ Teraz Ty

Algorytm roku przestępnego (ułożyłeś go w jednostce 1.2) zapisz w pozostałych dwóch strojach: narysuj schemat blokowy (uwaga: będą dwa lub trzy romby — zaplanuj kolejność pytań o dzielniki 4, 100, 400, zanim zaczniesz rysować) i zapisz pseudokod z zagnieżdżonymi „jeżeli". Sprawdź oba zapisy palcem dla lat 2000 i 1900.

📐 Definicje tej lekcji

  • Schemat blokowy — graficzny zapis algorytmu: owal (start/stop), równoległobok (wejście/wyjście), prostokąt (operacja), romb (warunek z wyjściami TAK/NIE).
  • Pseudokod — półformalny zapis algorytmu ze zmiennymi i słowami kluczowymi, bez rygorów składni konkretnego języka.
  • Przypisanie (←) — zapamiętanie wartości pod nazwą zmiennej: w ← b znaczy „od teraz $w$ ma wartość $b$".

📌 Najważniejsze w pigułce

  • Jeden algorytm, trzy zapisy: lista kroków (dla ludzi), schemat blokowy (widać drogi), pseudokod (blisko programu).
  • Schemat czyta się palcem; każda droga musi kończyć się Stopem.
  • ← to przypisanie, mod to reszta z dzielenia — dwa klocki, z których zbudujemy setki algorytmów.

🎒 Zadania

  1. Prześledź pseudokod parzystości dla $n = -3$. Co wypisze? Czy wynik jest zgodny z matematyką?
Wskazówka i odpowiedź

$-3 \bmod 2$ — reszta z dzielenia $-3$ przez 2. W matematyce (i w naszym pseudokodzie) reszta jest nieujemna: $-3 = (-2)\cdot 2 + 1$, więc reszta to 1 → „nieparzysta". Zgadza się. Ciekawostka na przyszłość: różne języki programowania różnie liczą resztę z liczb ujemnych — w Pythonie -3 % 2 daje 1, ale są języki, które dadzą -1. Wrócimy do tego, gdy zaczniemy programować.

  1. Narysuj schemat blokowy algorytmu: wczytaj dwie liczby $a$, $b$; jeśli $a = b$, wypisz „remis"; w przeciwnym razie wypisz większą z nich. Ile rombów potrzebujesz?
Wskazówka i odpowiedź

Dwa romby wystarczą: pierwszy pyta $a = b$? (TAK → „remis" → Stop), drugi — na gałęzi NIE — pyta $a > b$? (TAK → wypisz $a$, NIE → wypisz $b$). Wszystkie trzy drogi muszą dojść do Stopu. Jeśli narysowałeś trzy romby — też może być poprawnie, ale porównaj: mniej pytań to prostszy schemat, a prostota jest w informatyce walutą.

  1. Przetłumacz na pseudokod: „wczytaj cenę zakupów; jeśli przekracza 200 zł, udziel 10% rabatu; wypisz cenę końcową".
Wskazówka i odpowiedź
wczytaj cena
jeżeli cena > 200
    cena ← cena · 0,9
wypisz cena

Zwróć uwagę: nie ma gałęzi „w przeciwnym razie" — gdy warunek jest fałszywy, po prostu nic się nie dzieje i program idzie dalej. I drugi smaczek: cena występuje po obu stronach ←. To legalne i bardzo częste: „nowa cena to stara cena razy 0,9".

🔍 Sprawdź, czy umiesz

  • Wymienić cztery kształty bloków schematu i ich role.
  • Prześledzić palcem cudzy schemat blokowy dla konkretnych danych.
  • Przetłumaczyć krótki pseudokod na schemat blokowy i odwrotnie.

Ucz się tej jednostki z asystentem