Dataczwartek, 13 sierpnia 2026 Czas18:18:10
← Programowanie konsolowe (C#)

Lekcja 22. Metody rozwiązywania problemów — schematy blokowe i pseudokod

Podstawowy

Po 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”.

CSHARP

Zadania do pracy własnej

  1. Narysuj schemat blokowy algorytmu znajdującego największą z trzech podanych liczb.

  2. 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.

  3. 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.