Lekcja 22. Metody rozwiązywania problemów — schematy blokowe i pseudokod
PodstawowyPo co się tego uczymy?
Zanim napiszesz linijkę kodu, warto rozrysować rozwiązanie na kartce. Schemat blokowy i pseudokod to dwa uniwersalne "języki", w których zapiszesz algorytm niezależnie od tego, czy potem zaimplementujesz go w C#, Pythonie czy jakimkolwiek innym języku. Podstawa programowa (INF.04.3.3) wymaga wprost umiejętności zapisu algorytmu w tej postaci — to też świetne narzędzie do planowania własnych programów, zanim zgubisz się w składni.
Teoria
Schemat blokowy to graficzny zapis algorytmu za pomocą znormalizowanych symboli połączonych strzałkami pokazującymi kolejność wykonania:
- owal — początek lub koniec algorytmu;
- prostokąt — pojedyncza operacja/działanie (np. przypisanie zmiennej, obliczenie);
- romb — decyzja/warunek, zawsze z dwoma możliwymi wyjściami (tak/nie, prawda/fałsz);
- równoległobok — wejście lub wyjście danych (wczytanie z klawiatury, wypisanie na ekran).
Pseudokod to z kolei zapis tekstowy, "prawie jak kod", ale bez trzymania się składni konkretnego języka — używasz słów typu "jeżeli", "dopóki", "dla każdego", zapisując logikę tak, żeby każdy programista (niezależnie od używanego języka) mógł to zrozumieć i przepisać na swój język.
Drzewo decyzyjne to sposób przedstawienia sekwencji decyzji, gdzie każdy węzeł to pytanie/warunek, a gałęzie prowadzą do kolejnych pytań albo do ostatecznego wyniku — przydatne, gdy trzeba rozpisać wiele warunków zależnych od siebie (np. kwalifikacja klienta do rabatu na podstawie kilku kryteriów).
Wszystkie trzy metody służą temu samemu celowi: rozbiciu problemu na małe, jednoznaczne kroki, zanim zacznie się pisać kod w konkretnym języku programowania.
Schemat
Schemat blokowy: "Czy liczba jest parzysta?"
┌─────────────┐
│ START │
└──────┬──────┘
│
┌──────▼──────┐
│ Wczytaj │
│ liczbę n │
└──────┬──────┘
│
┌──────▼──────┐
│ n % 2 == 0? │◄── to jest ROMB = decyzja (warunek)
└──┬───────┬──┘
TAK │ │ NIE
┌───────▼──┐ ┌──▼────────┐
│ Wypisz │ │ Wypisz │
│ "parzysta"│ │"nieparzysta"│
└───────┬──┘ └──┬────────┘
│ │
┌──▼───────▼──┐
│ KONIEC │
└─────────────┘
Symbole: owal = start/koniec, prostokąt = działanie/operacja,
romb = decyzja (warunek, zawsze z dwoma wyjściami: tak/nie),
równoległobok = wejście/wyjście danych.
Przykład z życia
Instrukcja obsługi bankomatu, procedura reklamacyjna w sklepie, a nawet przepis kulinarny — to wszystko algorytmy, które dałoby się rozrysować jako schemat blokowy: "sprawdź czy karta jest ważna → jeśli tak, poproś o PIN → jeśli PIN poprawny, pokaż menu → jeśli nie, po 3 próbach zablokuj kartę". Firmy projektujące procesy (np. obsługę zamówień w sklepie internetowym) często najpierw rysują taki diagram, żeby wychwycić brakujące przypadki, zanim ktokolwiek napisze kod.
Kod (C#)
using System;
class Program
{
// Ten sam algorytm co na schemacie blokowym powyżej,
// zapisany najpierw jako pseudokod (w komentarzu), a potem w C#:
//
// PSEUDOKOD:
// 1. wczytaj liczbę n
// 2. jeżeli n podzielne przez 2 bez reszty:
// wypisz "parzysta"
// w przeciwnym razie:
// wypisz "nieparzysta"
static void Main()
{
Console.Write("Podaj liczbę całkowitą: ");
int n = int.Parse(Console.ReadLine());
if (n % 2 == )
{
Console.WriteLine("Liczba parzysta");
}
else
{
Console.WriteLine("Liczba nieparzysta");
}
}
}
Komentarz i wyjaśnienie kodu
Zwróć uwagę, że pseudokod w komentarzu i schemat blokowy z sekcji "Schemat" opisują dokładnie ten sam algorytm co finalny kod C# — tylko na trzy różne sposoby. To celowe: chodzi o pokazanie, że "myślenie algorytmiczne" jest niezależne od języka programowania. Romb ze schematu (n % 2 == 0?) to dokładnie ten sam warunek, co if (n % 2 == 0) w kodzie.
Ćwiczenie samodzielne
Rozpisz na kartce (albo w edytorze tekstu) pseudokod algorytmu sprawdzającego, czy podana liczba jest liczbą pierwszą. Nie pisz jeszcze kodu C# — najpierw sam pseudokod, krok po kroku.
Plac zabaw — wypróbuj online
Poniższy kod wykonuje się od razu w Twojej przeglądarce — nic nie trzeba instalować. Zmień kod i kliknij „Uruchom”.
Zadania do pracy własnej
Narysuj schemat blokowy algorytmu znajdującego największą z trzech podanych liczb.
Zapisz w pseudokodzie, a potem zaimplementuj w C#, algorytm sprawdzający siłę hasła (np. czy ma min. 8 znaków, przynajmniej jedną cyfrę i jedną wielką literę) — rozpisz to najpierw jako drzewo decyzyjne z warunkami.
Zaprojektuj (schemat blokowy + pseudokod) algorytm systemu kolejkowego w przychodni: pacjent bez skierowania czeka, pacjent ze skierowaniem ma pierwszeństwo, przypadek nagły (czerwony) wchodzi od razu. Dopiero po narysowaniu schematu zaimplementuj to w C#.
Typowe błędy
Pomijanie etapu planowania i pisanie kodu "na żywioł" — dla prostych zadań to działa, ale przy bardziej złożonej logice (dużo warunków zależnych od siebie) łatwo o pominięty przypadek. Schemat blokowy wymusza przemyślenie WSZYSTKICH gałęzi (każdy romb musi mieć dokładnie dwa wyjścia).
Zbyt szczegółowy pseudokod — pseudokod nie powinien zawierać składni konkretnego języka (średniki, nawiasy klamrowe). Jeśli pseudokod wygląda jak gotowy kod C#, to już nie jest pseudokod.
Romb z jednym wyjściem — częsty błąd na rysowanych schematach: warunek musi mieć ZAWSZE dwie strzałki wychodzące (tak/nie), nawet jeśli w gałęzi "nie" nic się nie dzieje poza przejściem dalej.
Nawiązanie do egzaminu zawodowego
To bezpośrednia realizacja INF.04.3.3 — "stosuje metody rozwiązywania problemów za pomocą algorytmów: schematy blokowe, listy kroków, drzewa decyzyjne, pseudokod". Na egzaminie może pojawić się polecenie "przedstaw algorytm w postaci schematu blokowego" albo "zapisz w pseudokodzie" — obie formy trzeba znać, nie tylko finalny kod.