Pseudokod – czym jest, do czego służy i jak go użyć?

W przypadku różnych algorytmów można trafić na uproszczony język programowania, czyli tzw. pseudokod. Pojawia się on również w zadaniach maturalnych. Czym on jest i dlaczego się go używa? Odpowiedzi na te pytania znajdziesz w poniższym tekście.

Czym jest pseudokod?

Pseudokod (ang. pseudocode) to uproszczony język programowania, cechujący się dużą czytelnością oraz prostotą. Pomija się w nim kwestię składni, która w pełni zależy od danego języka programowania, dzięki czemu staje się łatwiejszy do zrozumienia, niezależnie od tego, w jakiej technologii stosująca go osoba pracuje. Jako że jest to uproszczony język programowania, to jego struktura przypomina różne języki, ale nie jest ściśle związana z żadnym z nich. W konsekwencji można go przekonwertować bezpośrednio na konkretny język programowania, niezależnie od tego, czy chodzi o Pythona, C++, Javę, czy też o inne technologie (pod względem logiki kodu).

Oczywiście w pseudokodzie można stosować różnego rodzaju formuły matematyczne czy zdania w formie naturalnej. I choć teoretycznie nie ma on uzgodnionej składni, to zarówno w tym artykule, jak i w innych publikowanych na tej stronie stosuje się pseudokod w formie zalecanej na maturze z informatyki.

Pseudokod (standard CKE) – ściągawka

Poniżej znajdziesz uporządkowane wyrażenia oraz operatory z pseudokodu, zaprezentowane przez CKE. Skorzystaj z nich przy projektowaniu pseudokodu, jeśli nie pamiętasz ich dokładnie. W dalszej części artykułu znajdziesz tłumaczenie ich wszystkich.

Wyrażenie/OperatorOpis
+Dodawanie
Odejmowanie
*Mnożenie
/Dzielenie
divDzielenie całkowite
modReszta z dzielenia
Przypisanie
<Mniejszy od
>Większy od
Mniejszy lub równy
Większy lub równy
=Jest równe
Nie jest równe
Instrukcja zamiany (swap)
iIloczyn logiczny
LubSuma logiczna
Jest / nie jestOperatory do tworzenia wyrażenia
PrawdaPrawda logiczna
FałszFałsz logiczny
JeżeliInstrukcja warunkowa (if)
W przeciwnym razieAlternatywa instrukcji warunkowej (else)
WypiszWypisanie tekstu/liczb
WprowadźWprowadzenie wartości do zmiennej
Dopóki … wykonujPętla while
Wykonuj … dopókiPętla do while
Dla … wykonujPętla for
Przerwij pętlęZakończenie w konkretnym momencie pętli
ZakończZakończenie w danym momencie funkcji
Funkcja nazwa_funkcji (argument1, argument2, argument3…., argumentN):Deklaracja funkcji
Tablica [1..500]Deklaracja tablicy

W zadaniach maturalnych zazwyczaj jest zaznaczone, z jakich operatorów oraz wyrażeń można korzystać, jeśli chodzi o pseudokod. Zwracaj na to uwagę przy ich rozwiązywaniu.

ads banner

Zalety i wady pseudokodu

Zalety pseudokodu

  • Możliwość łatwego i intuicyjnego zrozumienia algorytmów,
  • Szybki proces tworzenia,
  • Ułatwienie procesu likwidacji błędów na poziomie logiki programu.

Wady pseudokodu

  • Brak standaryzacji,
  • Nieodpowiedni dla skomplikowanych algorytmów,
  • Brak możliwości bezpośredniego wykonania.

Jak użyć pseudokodu?

Pseudokod pozwala znacznie uprościć proces projektowania algorytmu i uniezależnić go od konkretnego języka programowania. Warto jednak trzymać się określonych zasad, dzięki którym w każdym algorytmie zostanie wprowadzony odpowiedni porządek. Jest to szczególnie istotne, jeśli chodzi o zadania maturalne, w których CKE preferuje konkretny styl pisania pseudokodu.

Jak użyć pseudokodu
Pseudokod jest użytecznym narzędziem na różnych etapach procesu programowania, pomagającym w planowaniu, projektowaniu i testowaniu algorytmu.

Jeśli tworzysz algorytm w pseudokodzie dla siebie, pamiętaj o odpowiednim opisywaniu funkcji i określonych części kodu. Dzięki temu szybko zorientujesz się, do czego służą poszczególne fragmenty, nawet jeśli przez dłuższy czas nie zaglądałeś do algorytmu.

Zmienne

W pseudokodzie nie deklaruje się pamięci ani typów danych. Nie jest też konieczne wcześniejsze zadeklarowanie konkretnych zmiennych, choć jeśli to zrobisz (za pomocą słowa „wprowadź”), to też jest to w porządku. Znakiem przypisania jest w tym przypadku strzałka zwrócona w lewą stronę, choć poza arkuszami maturalnymi może pojawić się też forma: dwukropek i znak równości.

Nazwy zmiennych są dowolne, jednak powinny opisywać swoją zawartość i nie mogą zawierać polskich znaków – wówczas będą mogły być bezpośrednio przenoszone do kodu w danym języku.

Dodatkowo CKE przedstawiło instrukcję zamiany (swap) ↔, która służy do zamiany wartości pomiędzy poszczególnymi zmiennymi.

Należy pamiętać, że niekiedy w zadaniach maturalnych zdarzają się zmienne działające jako typ string, a więc zawierające w sobie napisy. W pseudokodach niewykorzystywanych na maturze często korzysta się z napisów, a przy tym pobiera się poszczególne znaki z napisu poprzez wybranie ich indeksów (jak w przypadku tablic, które zostaną omówione w dalszej części tekstu).

Operatory arytmetyczne, relacyjne i logiczne oraz wartości logiczne

Oczywiście, tak jak w każdym języku programowania, również w pseudokodzie możliwe jest zapisywanie różnego rodzaju operacji obliczeniowych. W przypadku operatorów arytmetycznych mowa o:

  • + (dodawanie),
  •  (odejmowanie),
  • * (mnożenie),
  • / (dzielenie),
  • div (dzielenie całkowite – zwraca tylko liczbę całkowitą bez reszty),
  • mod (reszta z dzielenia – zwraca tylko resztę z dzielenia, bez liczby całkowitej).

Operatory porównania (relacyjne):

  • < (zwraca prawdę, gdy lewa strona jest mniejsza od prawej),
  • > (zwraca prawdę, gdy lewa strona jest większa od prawej),
  • (zwraca prawdę, gdy lewa strona jest mniejsza lub równa prawej),
  • (zwraca prawdę, gdy lewa strona jest większa lub równa prawej),
  • = (zwraca prawdę, gdy wartości po obu stronach są równe),
  • (zwraca prawdę, gdy wartości po obu stronach różnią się od siebie).

Operatory logiczne:

  • i (iloczyn logiczny, zwraca prawdę, gdy wyrażenia po obu stronach są prawdziwe),
  • lub (suma logiczna, zwraca prawdę, gdy wyrażenie przynajmniej z jednej strony lub po obu stronach jest prawdziwe),
  • jest / nie jest (operatory służące do tworzenia warunków lub stanu wyrażenia wspólnie z wartością logiczną).

Wartości logiczne:

  • Prawda (wartość logiczna),
  • Fałsz (wartość logiczna).

Instrukcje warunkowe

Warto zauważyć, że w momencie, gdy warunek w instrukcji warunkowej zostanie spełniony, instrukcje następujące dalej zostaną wypełnione jeden raz. Za pomocą wcięć określa się, które instrukcje mają być wykonywane po spełnieniu warunku. W przypadku zapisu instrukcji warunkowych w pseudokodzie korzysta się z wyrażeń:

  • jeżeli – odpowiednik if, służący do określenia warunku i instrukcji wykonywanych, gdy warunek zostanie spełniony (zwróci prawdę),
  • w przeciwnym razie – odpowiednik else, służący do określenia instrukcji wykonywanych, gdy warunek w instrukcji warunkowej nie został spełniony (zwróci fałsz). Musi być poprzedzony instrukcją „jeżeli”.

Przykład zastosowania instrukcji warunkowej

Jak wspomniano wcześniej, wcięcia określają, które instrukcje mają być wypełniane po spełnieniu warunku. Tworzy się je za pomocą tabulacji (przycisk TAB) lub spacji (zazwyczaj 4 spacje obok siebie).

Przykład zastosowania instrukcji w „przeciwnym razie”

W ramach instrukcji warunkowych stosowane są operatory arytmetyczne, porównania oraz operatory logiczne w celu tworzenia określonych warunków, zależnie od potrzeb danego algorytmu.

Pętle

Pętle w pseudokodzie oraz językach programowania służą do cyklicznego wykonywania określonych instrukcji, dopóki spełniony jest określony warunek.

  • dopóki … wykonuj – odpowiednik while, wykonuje określone instrukcje, dopóki spełniony jest dany warunek,
  • wykonuj … dopóki – odpowiednik do … while, gdzie instrukcje są wykonywane raz (niezależnie od tego, czy warunek jest spełniony), a następnie ponownie są wykonywane, o ile warunek jest spełniony (zwraca prawdę),
  • dla … wykonuj – odpowiednik for, gdzie instrukcje są wykonywane określoną ilość razy,
  • wykonuj – odpowiednik while true, a więc pętli, która wykonuje się bez końca, o ile nie zostanie zakończona wyrażeniem przerwij pętlę (zazwyczaj pojawiającym się po „jeżeli”).

Należy pamiętać o tym, że wcięcia określają, które instrukcje mają być wykonywane cyklicznie w ramach danej pętli.

Poza tym w przypadku każdej pętli można zastosować wyrażenie przerwij pętlę, które sprawia, że pętla natychmiast się kończy, nawet jeśli jej warunek nadal zwraca prawdę.

Przykład zastosowania pętli dopóki … wykonuj (while)

Przykład zastosowania pętli wykonuj … dopóki (do … while)

Przykład zastosowania pętli dla … wykonuj (for)

Przykład zastosowania pętli wykonuj (while true)

Funkcje

Funkcje oraz procedury to wydzielone części kodu, które wykonują określone instrukcje. Jest to wygodne, gdy konkretne instrukcje trzeba powtarzać w określonych miejscach kodu, zmieniając jedynie wprowadzane dane. Warto zauważyć, że funkcje zwracają jakąś wartość, procedury zaś tego nie robią, a poza tym są identyczne.

Przykład zastosowania funkcji

Przykład zastosowania procedury

W miejscu nazwa_funkcji możesz wstawić dowolną nazwę. Powinna ona dobrze opisywać cel danej funkcji, nie może też zawierać polskich znaków (dzięki czemu będzie można przenieść ją bezpośrednio do kodu w danym języku programowania).

Jeśli chodzi o argumenty wstawiane do funkcji, możesz wprowadzić ich dowolną liczbę. Nazwy argumentów również możesz wybierać bez ograniczeń.

Przykład wprowadzania argumentów do funkcji

Na powyższym przykładzie dwa razy wywołuje się funkcję wprowadzanie_argumentow. Przy pierwszym wywołaniu podaje się argumenty 3, 2 oraz 1. Po porównaniu, czy 3 (zmienna1) jest większe od 2 (zmienna2), okazuje się, że tak, więc instrukcja warunkowa jest spełniona. Następnie wykonywana jest instrukcja zwróć zmienna3, więc zwraca się wartość 1 (zmienna3).

Możliwe byłoby w tym przypadku zastosowanie instrukcji takiej jak zmienna_wynik ← przykład (3, 2, 1) lub wypisz przykład (3, 2, 1).

Z kolei w przypadku drugiego wywołania podaje się zmienną przykladowa_zmienna (wartość 5) oraz 2 i 1. Po porównaniu, czy 5 (zmienna1) jest większe od 2 (zmienna2), okazuje się, że tak, więc zwraca wartość 1 (zmienna3).

Tablice

Tablica to kontener, który przechowuje wartości tego samego typu (liczbowe, tekstowe, logiczne oraz inne). Przy deklaracji (utworzeniu) tablicy podaje się zakres indeksów, a więc liczbę pól, do których możesz wprowadzić odpowiednie dane. Następnie możliwe jest pobranie wartości z konkretnego pola poprzez zapisanie nazwy tablicy oraz podanie numeru indeksu.

Przykład deklaracji i użycia tablicy

Co prawda, w przypadku języków programowania indeksy tablic oraz pętli numeruje się od zera, jednak jeśli chodzi o pseudokod oraz schematy blokowe, w standardzie CKE stosuje się zwykle indeksację od liczby 1.

Poza tym możliwe jest wykonywanie tablic wielowymiarowych, a więc takich, które w ramach pojedynczego pola składają się z określonej liczby pól. Prostym przykładem takiej tablicy są tabele składające się z wierszy i kolumn, gdzie w każdej kolumnie jest określona liczba pól, czyli np. kolumna pierwsza składa się z 5 pól.

Przykład deklaracji i użycia tablicy wielowymiarowej

Istnieją dwa typowe błędy, na które trzeba uważać w przypadku tablic, a które często pojawiają się na początku przygody z programowaniem:

  • Brak inicjalizacji tablicy – gdy wykonuje się jakiekolwiek operacje na danych z tablicy lub stosuje się je jako część instrukcji warunkowej, należy pamiętać o tym, żeby wcześniej zadeklarować je w polach tablicy,
  • Wyjście poza zakres tablicy – indeksacja tablic to niezwykle istotny temat. W przypadku pseudokodu stosuje się indeksację od 1 do n, przy 10 elementach od 1 do 10. CKE najczęściej stosuje takie właśnie podejście. Jednak w przypadku standardowych języków programowania najczęściej używa się indeksacji od 0 do n-1, czyli przykładowo przy 10 elementach od 0 do 9.

Poniżej znajdziesz kilka błędnych zastosowań tablicy:

Problemem okazuje się wyjście poza zakres tablicy, bo indeksy kończą się na liczbie 10, a tutaj w czwartej linijce zastosowano powiększanie zmiennej i aż do 11. To pierwszy z błędów. Drugim jest wykorzystanie tablicy w instrukcji warunkowej, gdzie sprawdza się, co jest większe, zmienna i czy tablica [i], ale elementy tablicy nie posiadają jeszcze żadnych wartości, co wywoła błąd lub zwróci nieoczekiwane wyniki. Zatem najpierw należy wykorzystać pętlę z linii 8, a dopiero potem wykorzystać tablicę w instrukcji warunkowej.

Poniżej dla porównania umieszczono prawidłowy kod:

Specyfikacja

W przypadku zadań maturalnych pojawia się specyfikacja, która określa, z jakich wprowadzanych zmiennych korzysta się w ramach programu. Chodzi tu przykładowo o zmienną n, zawierającą w sobie dodatnią liczbą całkowitą, co widać na poniższym obrazku.

Przykład specyfikacji do pseudokodu
Specyfikacja jest przydatna, szczególnie w momencie, gdy tworzy się większą liczbę zmiennych. Pozwala to poprawić czytelność danego pseudokodu.

Często, zamiast korzystać z „wprowadź n”, używa się już stworzonej zmiennej, która została opisana w ramach specyfikacji danego algorytmu.

W przypadku tworzenia pseudokodu dla siebie dobrze jest korzystać z tego typu specyfikacji, co pozwala na łatwe opisanie, do czego służą poszczególne zmienne wprowadzane oraz wynikowe. Poza tym upraszcza to sekcję komentarzy, gdzie opisuje się przede wszystkim stosowaną logikę algorytmu.

Przykłady algorytmów – pseudokod

W ramach pseudokodu można zapisać praktycznie każdy algorytm, choć im bardziej skomplikowane jest dane rozwiązanie, tym mniej się to opłaca pod względem czasu zapisu. Warto brać to pod uwagę przy planowaniu, co w ten sposób zapisać.

Przykłady algorytmów w pseudokodzie
Pseudokod jest bardzo elastycznym narzędziem do opisywania algorytmów i jest używany w różnych dziedzinach, nie tylko w programowaniu.

Poniżej znajdziesz kilka podstawowych wzorów zaprezentowanych w formie pseudokodu, skorzystaj z nich dla lepszego zapoznania się z jego stosowaniem.

Prędkość

Poniższa funkcja prosi o wprowadzenie odległości oraz czasu potrzebnego na przejście drogi, a następnie oblicza prędkość i ją zwraca. W ramach głównego kodu wywołuje się tę funkcję i wypisuje wartość, jaką zwróci.

Średnia arytmetyczna

Średnia arytmetyczna okazuje się podstawowym wzorem wykorzystywanym na co dzień. Poniższa funkcja przyjmuje pojedynczy argument, czyli liczbę wprowadzanych wartości, na bazie których utworzy się średnią arytmetyczną.

Warto zauważyć, że w ramach głównego kodu korzysta się z instrukcji wypisz srednia_arytmetyczna (liczba), która ma za zadanie wypisać wartość, jaką zwróci wykonana funkcja.

Natężenie prądu elektrycznego

W przypadku poniższego programu wykorzystano wzór na natężenie prądu elektrycznego I = Q / t. Algorytm umożliwia obliczenie natężenia i ładunku prądu elektrycznego, a także czasu. Wykorzystuje trzy funkcje, z których każda odpowiada za inne przekształcenie wzoru, a przy tym wykorzystuje instrukcje warunkowe do wybrania odpowiedniej opcji przez użytkownika.

Warto zauważyć, że na maturze zazwyczaj konieczne jest jedynie zwrócenie danej wartości, bez żadnych dodatkowych opisów.

Podsumowanie

Dzięki wykorzystaniu pseudokodu będziesz sprawnie tworzyć kolejne algorytmy. Skorzystaj z niego nie tylko w czasie zadań maturalnych, ale również przy tworzeniu własnych programów. Wcześniejsze obmyślenie algorytmu może zmniejszyć liczbę błędów, które pojawią się w czasie jego implementacji. Pamiętaj, że na maturze CKE często definiuje nowe funkcje oraz operacje dostępne jedynie w danym zadaniu.

ads banner