1. Dlaczego komputer jest... "głupi"?
Często myślimy o komputerach jako o potężnych maszynach myślących. Prawda jest jednak brutalna: komputer nie ma ani grama intuicji, nie potrafi się domyślać i nie potrafi improwizować. Jest po prostu ultraszybkim, ale ślepym wykonawcą poleceń.
Aby osiągnąć jakikolwiek rezultat, komputer potrzebuje precyzyjnego planu działania. Ten plan to właśnie algorytm.
Życiowe analogie:
- Przepis na ciasto: Wyobraź sobie przepis, w którym autor napisał: „Dodaj odpowiednią ilość soli i piecz w ciepłym piekarniku”. Człowiek da szczyptę i ustawi 180°C. Komputer? Wsypie całe opakowanie albo zgłosi błąd krytyczny, bo „odpowiednia” nic dla niego nie znaczy.
- Instrukcja z IKEA: Składasz biurko. Jeśli pominiesz krok 3 (włożenie kołków) i od razu przejdziesz do kroku 8 (dokręcenie blatu) - konstrukcja runie. W algorytmie kolejność i jednoznaczność kroków są święte.
W skrócie:
Algorytm to uporządkowany, skończony ciąg jasno zdefiniowanych operacji, który przekształca dane wejściowe (input) w pożądane dane wyjściowe (output).
Pamiętaj: Algorytm to pomysł/strategia, a kod źródłowy w danym języku to tylko jego zapis.
2. Żelazna piątka: Cechy poprawnego algorytmu
Na egzaminie zawodowym pytania o właściwości algorytmu pojawiają się regularnie. Dobry algorytm musi spełniać pięć podstawowych warunków:
- Skończoność - algorytm nie może działać w nieskończoność. Po wykonaniu określonej liczby kroków musi się zatrzymać i zwrócić wynik.
- Jednoznaczność (determinizm) - w każdym momencie wykonania musi być dokładnie wiadomo, co należy zrobić dalej. Dla tych samych danych wejściowych algorytm musi dać identyczny wynik za każdym razem.
- Poprawność - dla poprawnych danych wejściowych algorytm prowadzi do oczekiwanego, bezbłędnego rezultatu.
- Wykonalność - każda pojedyncza instrukcja musi być możliwa do wykonania przez maszynę (np. nie każemy komputerowi dzielić przez zero bez wcześniejszego sprawdzenia warunku).
- Ogólność (masowość) - algorytm nie może służyć tylko do dodania 2 + 2. Powinien radzić sobie z dodaniem dowolnych dwóch liczb a + b.
3. Cztery sposoby zapisu algorytmu - Twoja skrzynka z narzędziami
Projektując oprogramowanie, stajesz przed wyborem: jak zapisać swój pomysł przed zakodowaniem? W zależności od sytuacji wybierzesz inną metodę.
[Jak rozmawiać z...]
|
+----------+----------+
| |
[Z człowiekiem/ [Z programistą/
Klientem] Komputerem]
| |
+-> Lista kroków +-> Pseudokod
+-> Schemat blokowy +-> Schemat blokowy
+-> Drzewo decyzji
A. Lista kroków
To po prostu instrukcja spisana w punktach w języku naturalnym (np. po polsku).
- Kiedy stosować: Na samym początku prac, podczas burzy mózgów lub w rozmowie ze zleceniodawcą, który nie zna programowania.
- Plusy: Każdy ją zrozumie, zero barier technicznych.
- Minusy: Fatalnie sprawdza się przy skomplikowanych pętlach i wielopoziomowych warunkach; język potoczny bywa wieloznaczny.
B. Schemat blokowy
Graficzny standard modelowania procesów. Każda czynność ma przypisany dedykowany kształt geometryczny.
- Must-know z symboliki:
- Owal / Zaokrąglony prostokąt → Start / Stop (początek i koniec algorytmu).
- Równoległobok → Operacje wejścia/wyjścia (I/O, np. Wczytaj dane, Wypisz wynik).
- Prostokąt → Blok operacyjny (obliczenia, przypisania zmiennych, np.
x = a + 5). - Romb → Blok warunkowy (pytanie logiczne, z którego wychodzą dwie drogi: TAK / NIE).
- Kiedy stosować: Do dokumentacji projektowej, przy wizualizacji przepływu sterowania dla zespołu lub klienta.
- Plusy: Błyskawicznie widać strukturę programu i rozgałęzienia logiki.
- Minusy: Przy dużych programach schemat rozrasta się do rozmiarów gigantycznej „pajęczyny”.
C. Drzewo decyzyjne
Hierarchiczna struktura grafowa rozgałęziająca się od korzenia (pytania początkowego) przez gałęzie (kolejne warunki) aż do liści (decyzji końcowych).
- Kiedy stosować: W systemach eksperckich i skomplikowanych regułach biznesowych (np. kalkulator zniżek ubezpieczeń zależny od wieku, liczby kolizji, stażu i mocy auta).
- Plusy: Gwarantuje, że nie pominiesz żadnej kombinacji warunków.
- Minusy: Niemal zupełnie nie nadaje się do zapisu pętli i procesów powtarzalnych.
D. Pseudokod
Złoty środek pomiędzy językiem polskim a kodem źródłowym. Wygląda jak program (używa wcięć, konstrukcji JEŻELI, DOPÓKI), ale nie przejmuje się średnikami, bibliotekami czy zarządzaniem pamięcią.
- Kiedy stosować: Główny sposób zapisu w literaturze naukowej, na egzaminie INF.04 oraz przy bezpośrednim przygotowywaniu algorytmu do wdrożenia w kodzie.
- Plusy: Błyskawiczne przeniesienie do dowolnego języka programowania.
- Minusy: Niezrozumiały dla osób spoza branży IT.
4. Case Study: Jeden problem na 4 sposoby
Zobaczmy, jak w praktyce wygląda ten sam prosty problem:
Sprawdź, czy podana liczba całkowita x jest dodatnia, czy niedodatnia (ujemna lub równa zero).
1. Lista kroków
- Rozpocznij algorytm.
- Pobierz od użytkownika wartość liczby x.
- Jeśli x > 0, wyświetl komunikat: „Liczba jest dodatnia” i przejdź do kroku 5.
- W przeciwnym razie wyświetl komunikat: „Liczba jest ujemna lub równa zero”.
- Zakończ algorytm.
2. Drzewo decyzyjne
[ Czy liczba x jest dodatnia? ]
|
< Czy x > 0? >
/ \
TAK / \ NIE
/ \
[ Wynik: "Dodatnia" ] [ Wynik: "Niedodatnia" ]
3. Pseudokod
START
ZMIENNA x: CAŁKOWITA
CZYTAJ(x)
JEŻELI x > 0 TO
PISZ("Liczba jest dodatnia")
W PRZECIWNYM RAZIE
PISZ("Liczba jest ujemna lub równa zero")
KONIEC JEŻELI
STOP
4. Schemat blokowy

5. Podsumowanie
| Metoda zapisu | Forma | Najlepsze zastosowanie | Czego unikać? |
| Lista kroków | Słowna (punkty) | Rozmowa wstępna z klientem | Złożone pętle i skoki |
| Schemat blokowy | Graficzna (figury) | Prezentacja architektury, dokumentacja | Bardzo duże, zawiłe algorytmy |
| Drzewo decyzyjne | Graficzna (gałęzie) | Wielowariantowe decyzje i klasyfikacja | Procesy powtarzalne (pętle) |
| Pseudokod | Tekstowa (półkod) | Projektowanie logiki przed kodowaniem | Komunikacja z laikiem |