Przeczytaj
Zapisywanie algorytmów za pomocą pseudokodu
Poznaliśmy metodę zapisywania algorytmów za pomocą schematów blokowychschematów blokowych oraz listy krokówlisty kroków. Pseudokod, czyli kolejny sposób zapisu, ma podobną strukturę, jednak pomijane są w nim kwestie semantycznesemantyczne oraz składnioweskładniowe na rzecz prostoty i czytelności.
Pseudokod przypomina języki programowania – można go więc konwertować na kod. Należy przy tym pamiętać, że pseudokod powinien być pisany bez wskazania na konkretny język. Można w nim stosować formuły matematyczne lub zdania w języku naturalnym, jeśli nie zaburza to czytelności.
Pseudokod nie ma jednego standardu zapisu – zazwyczaj korzysta się ze składni, która opiera się na składni istniejących języków programowania. W tym e‑materiale posłużymy się zapisem, który pojawia się w arkuszach maturalnych.
Wszystkie formy zapisu pseudokodu (z wyjątkiem tablic) przedstawione w tym materiale, są zaczerpnięte ze sprawozdania z egzaminu maturalnego Centralnej Komisji Egzaminacyjnej
Wprowadzanie zmiennych
W pseudokodzie nie deklaruje się zmiennych i nie alokuje się jawnie żadnej pamięci, dlatego nowe zmienne mogą pojawiać się bez wcześniejszych zapowiedzi.
W arkuszach maturalnych przypisanie oznaczone jest odwróconą strzałką. Zdarza się też zapis przypisania za pomocą dwukropka i znaku równości.
Operatory arytmetyczne, relacyjne, logiczne, wartości logiczne
W pseudokodzie możliwe jest zapisywanie operacji arytmetycznych. W tym celu stosuje się następujące operatory arytmetyczne:
operator dodawania,
operator odejmowania,
operator mnożenia,
operator dzielenia,
div
dzielenie liczb całkowitych,mod
dzielenie modulo (reszta z dzielenia), wyłącznie dla liczb całkowitych.
Operatorami porównania (relacyjnymi) używanymi przy zapisie pseudokodu są:
logiczny operator relacji między dwoma wyrażeniami, zwraca wartość prawdziwą, gdy wartość wyrażenia po lewej stronie operatora jest mniejsza od wartości wyrażenia po jego prawej stronie,
logiczny operator relacji między dwoma wartościami, zwraca wartość prawdziwą, gdy wartość po lewej stronie operatora jest większa od wartości po jego prawej stronie,
logiczny operator relacji między dwoma wartościami, zwraca wartość prawdziwą, gdy wartość wyrażenia po lewej stronie operatora jest mniejsza lub równa wartości wyrażenia po jego prawej stronie,
logiczny operator relacji między dwoma wartościami, zwraca wartość prawdziwą, gdy wartość wyrażenia po lewej stronie operatora jest większa lub równa wartości wyrażenia po jego prawej stronie,
logiczny operator relacji między dwoma wartościami, zwraca wartość prawdziwą, gdy wartości wyrażeń po obu jego stronach są sobie równe,
logiczny operator relacji między dwoma wartościami, zwraca wartość prawdziwą, gdy wartości wyrażeń po obu jego stronach są różne od siebie.
Operatory logiczne używane są przy zapisie pseudokodu w formie słów:
i
– iloczyn logiczny, zwraca wartość prawdziwą, gdy wyrażenia po obu stronach tego operatora są prawdziwe,lub
– suma logiczna, zwraca wartość prawdziwą, gdy prawdziwe jest co najmniej jedno z wyrażeń, na których użyto operatora,jest/nie jest
– operatory pozwalające na tworzenie wyrażenia, często wykorzystywane są do określenia stanu wyrażenia razem z wartościami logicznymi lub do tworzenia warunków opartych na stanie obiektu.
Wartości logiczne używane w pseudokodzie:
prawda
– wartość logiczna określająca prawdziwość zdania logicznego,fałsz
– wartość logiczna określająca fałszywość zdania logicznego.
Instrukcje warunkowe
Podstawowe słowa kluczowe używane w pseudokodzie przy zapisie instrukcji warunkowych:
jeżeli
– odpowiednikif
w językach programowania,w przeciwnym wypadku
– odpowiednikelse
w językach programowania.
Słowo kluczowe jeżeli
sprawia, że blok kodu, który następuje po tym słowie, będzie wykonany raz, jeżeli warunek występujący po tym słowie będzie spełniony.
Wcięcia w linijkach 3‑5 wyznaczają zakres bloku, który podporządkowany jest słowu kluczowemu jeżeli
. Kod tam się znajdujący zostanie wykonany, jeśli będzie spełniony warunek przy słowie kluczowym.
Zwrot w przeciwnym wypadku
oznacza alternatywę dla kodu wykonywanego w przypadku spełnienia warunku zapisanego przy słowie kluczowym jeżeli
. Jest wykonywany w przypadku niespełnienia tego warunku. Analogicznie jak instrukcja else
jest umieszczana po instrukcji if
, tak instrukcja w przeciwnym razie
musi być umieszczona w instrukcji jeżeli
.
Wcięcia w linijkach 3‑5 wyznaczają zakres bloku, który podporządkowany jest słowu kluczowemu jeżeli
. Kod tam się znajdujący zostanie wykonany, jeśli spełniono warunek przy słowie kluczowym.
Wcięcia w linijkach 7‑9 wyznaczają zakres bloku, który podporządkowany jest zwrotowi w przeciwnym razie
. Kod ten zostanie wykonany, gdy nie będzie spełniony warunek po słowie kluczowym jeżeli
.
Instrukcje warunkowe, zgodnie z nazwą, sugerują zawieranie warunku, od którego zależy ich wykonanie. Te warunki to zdania logiczne, wykorzystujące operatory porównania i operatory logiczne.
Pętle
Pętla jest to konstrukcja pozwalająca na cykliczne wykonywanie zawartego w niej fragmentu kodu, tak długo jak długo spełniony jest zawarty w niej warunek. W pseudokodzie podstawowymi słowami występującymi przy zapisie pętli są:
dopóki
– instrukcja powtarzania, odpowiednik poleceniawhile
w językach programowania, w połączeniu z warunkiem i słowem kluczowymwykonaj
pozwala na powtarzalne wykonywanie sparowanego z nim kodu, tak długo jak długo spełniony jest warunek,wykonuj
– instrukcja powtarzania, może być wykorzystana jak poleceniedo
w językach programowania, wraz ze słowem kluczowymdopóki
i warunkiem pozwala na zapisanie pętli odpowiadającej pętlido ... while
w językach programowania; instrukcja służy do sygnalizowania, jaki fragment kodu jest zawarty w pętli,dla
– instrukcja iteracji, słowo kluczowe do stworzenia pętli odpowiadającej pętlifor
w językach programowania, pozwala na wykonanie zawartego w pętli kodu określoną liczbę razy.
Słowo kluczowe dopóki
powoduje, że blok, który po nim następuje, będzie wykonywany, dopóki warunek zapisany po słowie kluczowym pozostaje spełniony.
Wcięcia w linijkach 3‑5 wyznaczają zakres bloku kodu, który podporządkowany jest słowu kluczowemu dopóki
i który będzie wykonywany tak długo, jak długo pozostanie spełniony warunek podany w tej konstrukcji.
Słowo kluczowe wykonuj
może być wykorzystane do stworzenia kolejnego rodzaju pętli, która zawsze wykona się co najmniej raz i będzie powtarzana tak długo, jak długo będzie spełniony warunek (w językach programowania to pętla do ... while
). Jej konstrukcja jest podobna do poprzedniej z przedstawianych pętli, jednak blok kodu znajduje się między słowami kluczowymi wykonuj
oraz dopóki
.
Blok kodu zawarty w pętli (linie 3‑4) zawsze wykona się co najmniej raz, niezależnie od wartości logicznej zawartego w niej warunku. Od spełnienia warunku zależeć będą kolejne powtórzenia pętli
Słowo kluczowe dla
pozwala na stworzenie pętli pozwalającej na powtórzenie zawartego w niej kodu określoną liczbę razy (pętla for
w językach programowania). Pętla ta zamiast warunku zawiera zmienną, której przypisujemy dozwolony zakres wartości i ustalamy, w jaki sposób ma zmieniać swoje wartości (np. rosnąć o 1, wzrastać dwukrotnie i tak dalej). Warto zwrócić uwagę, że w instrukcji dla
wartość przypisujemy znakiem =
.
Funkcje
Kolejną istotną notacjąnotacją jest sposób zapisu funkcji. Funkcje i procedury to wydzielone części programu wykonujące jakieś operacje, które mogą zostać wywołane podczas działania programu. Mogą one przyjmować argumenty i zwracać wartości. W pseudokodzie będziemy je zapisywać następująco:
W miejsce elementu nazwa
wpisujemy nazwę funkcji, której chcemy użyć. Argumentów może być nieskończenie wiele – taka notacja stanowi alternatywę dla pisania wprowadź a, wprowadź b, wprowadź...
. Oto przykładowa funkcja zapisana w pseudokodzie:
Załóżmy, że jej argumentami są liczby naturalne:
Funkcję wywołamy następująco:
W pierwszym kroku sprawdzamy, czy 1 jest większe od 2. Nie jest, więc pomijamy instrukcję zawartą w linijce 3.
Od razu przechodzimy do linijek 4 oraz 5, zwracamy zatem liczbę 2.
Tablice
Tablica jest to kontener przechowujący dane tego samego typu, w których dane dostępne są za pomocą indeksów, najczęściej przyjmujące wartości liczbowe. Zapisując pseudokod przy nazwie tablicy w nawiasach kwadratowych, musimy zapisać zakres indeksów, czyli od jakiego indeksu zaczyna się numeracja elementów tablicy i na jakim się kończy. Odczyt elementu z tablicy zapisujemy w postaci nazwy tablicy i wybranego indeksu w nawiasach kwadratowych.
W pseudokodzie indeksy tablicy zazwyczaj zaczynają się od 1, ale coraz częściej numeruje się od 0, co jest zgodne z językami programowania, których wykorzystanie jest dopuszczone na egzaminie maturalnym.
W ten sam sposób można też w pseudokodzie zapisać inne struktury o dostępie swobodnym, w razie potrzeby zastępując indeks wybranym kluczem.
Konstrukcje przedstawione są zgodnie ze sprawozdaniem z egzaminu maturalnego sporządzonym przez CKE, jednak nie są to wszystkie polecenia potrzebne do zapisania bardziej złożonych algorytmów. Problem ten jest rozwiązywany dzięki temu, że w pseudokodzie rezygnuje się ze ścisłych reguł składniowych i zezwala na opisywanie bardziej skomplikowanych instrukcji (które nie zostały przedstawione w tym e‑materiale) oraz kroków algorytmów w języku naturalnym.
Przykłady
Potrafimy już zapisać algorytmy za pomocą listy kroków oraz schematu blokowego, pora więc na przeprowadzenie ich konwersji do pseudokodu.
Algorytm liniowy
Zapoznajmy się ze specyfikacją algorytmuspecyfikacją algorytmu, który oblicza czas potrzebny na pokonanie drogi s2
na podstawie tego, ile czasu (t1
) zajęło pokonanie drogi s1.
Zakładamy, że droga pokonywana jest z taką samą prędkością.
Specyfikacja problemu:
Dane:
t1
– liczba rzeczywista; czas przebycia poprzedniej drogi wyrażony w godzinachs1
– liczba rzeczywista; długość wcześniejszej drogi wyrażona w kilometrachs2
– liczba rzeczywista; długość drogi wyrażona w kilometrach
Wynik:
t2
– liczba rzeczywista; czas przebycia drogi wyrażony w godzinach
Gdy podamy niezbędne dane, musimy obliczyć prędkość, z jaką poruszano się przy pokonywaniu drogi s1
. Prędkość obliczamy, dzieląc pokonaną drogę przez czas potrzebny na jej pokonanie. Korzystamy tu ze wzoru na prędkość:
gdzie:
to prędkość wyrażona w kilometrach na godzinę
to czas wyrażony w godzinach
to długość drogi wyrażona w kilometrach
Przekształcamy ten wzór, aby uzyskać wzór na czas potrzebny na pokonanie danej drogi:
Podstawiamy odpowiednie wartości do wzoru i obliczamy wynik.
Lista kroków
Podaj
t1
.Podaj
s1
.Podaj
s2
.Przypisz zmiennej
V
wynik dzielenias1
przezt1
.Przypisz zmiennej
t2
wynik dzielenias2
przezV
.Wyświetl wartość zmiennej
t2
.Zakończ działanie algorytmu.
Pseudokod
Algorytm rozgałęziony
Zapoznajmy się ze specyfikacją algorytmu sprawdzającego, czy dana liczba jest liczbą dodatnią.
Specyfikacja problemu:
Dane:
liczba
– liczba rzeczywista
Wynik:
komunikat
Liczba nie jest dodatnia
lubLiczba jest dodatnia
Zakładamy, że 0 nie jest liczbą dodatnią.
Schemat blokowy
Pseudokod
Algorytm z pętlą
Zapoznajmy się z przykładowym algorytmem obliczania sumy liczb naturalnych w danym przedziale. Zakładamy, że liczba1
jest mniejsza od liczba2
.
Specyfikacja problemu:
Dane:
liczba1
– liczba naturalna; początek przedziału;liczba1 < liczba2
liczba2
– liczba naturalna; koniec przedziału;liczba2 > liczba1
Wynik:
suma
– liczba naturalna; suma liczb naturalnych w danym przedziale
Lista kroków
Podaj
liczba1
.Podaj
liczba2
.Przypisz zmiennej
i
wartośćliczba1
.Przypisz zmiennej
suma
wartośćliczba1
.Zwiększ wartość zmiennej
i
o 1.Dodaj do zmiennej
suma
wartość zmienneji
.Jeżeli:
i
jest równaliczba2
przejdź do kroku 8.
i
jest różna odliczba2
wróć do kroku 5.
Wyświetl wartość zmiennej
suma
.Zakończ działanie algorytmu.
Pseudokod
Algorytm z tablicą
Zapoznajmy się z przykładowym algorytmem sortującym liczby przechowywane w tablicy niemalejąco. Algorytm wykorzystuje również pętle i instrukcje warunkowe. Więcej o tym algorytmie możesz przeczytać w materiale dotyczącym sortowania bąbelkowegobąbelkowego.
Specyfikacja problemu:
Dane:
n
– liczba naturalna; liczba elementów tablicytablica
tablica
–n
-elementowa tablica nieposortowanych liczb rzeczywistych
Wynik:
tablica
–n
-elementowa tablica posortowanych niemalejąco liczb rzeczywistych
Pseudokod
Słownik
inaczej podprogram, czyli ciąg instrukcji zawartych w bloku, który może być wielokrotnie wykorzystywany w różnych miejscach programu; funkcja zwyczajowo zwraca wartość, a procedura nie zwraca
ustalony sposób zapisu
dziedzina nauki zajmująca się znaczeniem wyrazów oraz badaniem związków zachodzących między wyrażeniami języka a przedmiotami, do których się odnoszą
nauka zajmująca się budową wypowiedzeń (zdań); bada funkcje elementów zdania i zależności między nimi
(specyfikacja problemu) opisanie problemu przez podanie danych, z których korzysta algorytm oraz określenie wyniku, który ma być efektem działania algorytmu