Pseudokod: przykłady
15 rozwiązanych przykładów w pseudokodzie Cambridge IGCSE i A-Level, od pierwszego OUTPUT po sortowanie bąbelkowe. Każdy pokazuje swój wynik, a każdy możesz uruchomić w edytorze poniżej.
Jak czytać te przykłady
Pseudokod opisuje kroki programu ustrukturyzowanym angielskim, bez ścisłych reguł prawdziwego języka programowania. Wszystkie przykłady poniżej używają stylu Cambridge, którego wymagają egzaminy IGCSE i A-Level: DECLARE dla zmiennych, ← do przypisania, OUTPUT do wypisywania, a bloki zamyka się słowami ENDIF, NEXT lub ENDWHILE.
Każdy przykład przedstawia problem, podaje pseudokod, pokazuje wynik, jaki daje, i wyjaśnia, jak działa. Kliknij Uruchom w edytorze, aby wczytać dowolny przykład do edytora na górze strony, gdzie możesz przejść przez niego linia po linii i obserwować, jak zmieniają się zmienne. Nie znasz jeszcze składni? Edytor pseudokodu ma klikalną bibliotekę wszystkich konstrukcji.
1. Hello, World
Wyświetl komunikat na ekranie.
OUTPUT "Hello, World!"Hello, World!OUTPUT wypisuje to, co następuje po nim, a tekst zapisuje się w podwójnych cudzysłowach. Ta jedna linia to kompletny program: pseudokod nie potrzebuje funkcji głównej ani importów.
2. Dodaj dwie liczby
Zapisz dwie liczby całkowite, dodaj je i wypisz sumę.
DECLARE a : INTEGER
DECLARE b : INTEGER
DECLARE total : INTEGER
a ← 12
b ← 30
total ← a + b
OUTPUT "The total is ", totalThe total is 42Każdą zmienną deklaruje się z nazwą i typem, zanim zostanie użyta. Strzałka ← zapisuje wartość, więc total ← a + b czytaj jako „total przyjmuje wartość a plus b”. Przecinek w OUTPUT łączy tekst i wartość w jednej linii.
3. Parzysta czy nieparzysta
Sprawdź, czy liczba jest parzysta, czy nieparzysta.
DECLARE n : INTEGER
n ← 17
IF n MOD 2 = 0 THEN
OUTPUT n, " is even"
ELSE
OUTPUT n, " is odd"
ENDIF17 is oddMOD zwraca resztę z dzielenia. Liczba parzysta nie daje reszty przy dzieleniu przez 2, więc testem jest n MOD 2 = 0. IF wybiera jedną z dwóch gałęzi, a ENDIF zamyka blok. W pseudokodzie pojedynczy znak = porównuje dwie wartości; nigdy nie przypisuje.
4. Wystaw ocenę za test
Zamień wynik na 100 punktów na ocenę: A od 80 w górę, B od 60 do 79, C poniżej 60.
DECLARE score : INTEGER
DECLARE grade : CHAR
score ← 74
IF score >= 80 THEN
grade ← 'A'
ELSE
IF score >= 60 THEN
grade ← 'B'
ELSE
grade ← 'C'
ENDIF
ENDIF
OUTPUT "Score ", score, " gets grade ", gradeScore 74 gets grade BWarunki sprawdza się od najwyższego progu w dół, więc wynik 74 nie przechodzi pierwszego testu, ale przechodzi drugi. W pseudokodzie Cambridge łańcuch else-if zapisuje się, umieszczając jeden IF wewnątrz ELSE drugiego. CHAR przechowuje pojedynczy znak w apostrofach.
5. Zsumuj liczby od 1 do 10
Dodaj do siebie wszystkie liczby całkowite od 1 do 10.
DECLARE total : INTEGER
DECLARE i : INTEGER
total ← 0
FOR i ← 1 TO 10
total ← total + i
NEXT i
OUTPUT "Sum of 1 to 10 is ", totalSum of 1 to 10 is 55Pętla FOR wykonuje się określoną liczbę razy: i przyjmuje wartości 1, 2, 3 i tak dalej aż do 10, a NEXT i oznacza koniec ciała pętli. Suma bieżąca zaczyna się od 0 i rośnie w każdym obiegu. Wynik, 55, zgadza się ze wzorem n(n + 1) / 2.
6. Wypisz tabliczkę mnożenia
Wypisz pierwsze pięć linii tabliczki mnożenia przez 7.
DECLARE i : INTEGER
FOR i ← 1 TO 5
OUTPUT "7 x ", i, " = ", 7 * i
NEXT i7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35Licznik pętli i jest używany w obliczeniu, więc każdy obieg wypisuje inną linię. OUTPUT może łączyć przecinkami kilka fragmentów tekstu i kilka wartości.
7. Odliczanie z pętlą WHILE
Odlicz od 5 do 1, a potem wypisz komunikat końcowy.
DECLARE count : INTEGER
count ← 5
WHILE count > 0 DO
OUTPUT count
count ← count - 1
ENDWHILE
OUTPUT "Liftoff!"5
4
3
2
1
Liftoff!Pętla WHILE sprawdza warunek przed każdym obiegiem i zatrzymuje się, gdy tylko warunek staje się fałszywy. Tutaj warunkiem jest count > 0, a ciało pętli za każdym razem zmniejsza count o jeden. Bez linii, która go zmniejsza, pętla nigdy się nie kończy. Używaj WHILE, gdy nie wiesz z góry, ile obiegów będzie potrzebnych.
8. Znajdź największą liczbę w tablicy
Znajdź największą wartość na liście sześciu liczb.
DECLARE nums : ARRAY[1:6] OF INTEGER
DECLARE i : INTEGER
DECLARE largest : INTEGER
nums[1] ← 14
nums[2] ← 3
nums[3] ← 27
nums[4] ← 9
nums[5] ← 21
nums[6] ← 6
largest ← nums[1]
FOR i ← 2 TO 6
IF nums[i] > largest THEN
largest ← nums[i]
ENDIF
NEXT i
OUTPUT "The largest number is ", largestThe largest number is 27ARRAY[1:6] deklaruje sześć miejsc ponumerowanych od 1 do 6, bo tablice w stylu Cambridge zwykle zaczynają się od 1. Program zakłada, że pierwszy element jest największy, potem porównuje z nim każdy kolejny element i zachowuje ten większy. Po jednym przejściu przez tablicę largest zawiera odpowiedź.
9. Oblicz średnią
Oblicz średnią z czterech ocen z testu.
DECLARE marks : ARRAY[1:4] OF INTEGER
DECLARE i : INTEGER
DECLARE total : INTEGER
marks[1] ← 70
marks[2] ← 85
marks[3] ← 64
marks[4] ← 91
total ← 0
FOR i ← 1 TO 4
total ← total + marks[i]
NEXT i
OUTPUT "Average mark: ", total / 4Average mark: 77.5Pętla dodaje każdy element tablicy do total, a potem program dzieli wynik przez liczbę ocen. Operator / daje wynik dziesiętny, dlatego na wyjściu jest 77.5. Gdy potrzebne jest dzielenie całkowite, użyj DIV.
10. Wyszukiwanie liniowe
Znajdź pozycję imienia Dara na liście imion.
DECLARE names : ARRAY[1:5] OF STRING
DECLARE i : INTEGER
DECLARE found : BOOLEAN
names[1] ← "Ana"
names[2] ← "Ben"
names[3] ← "Chen"
names[4] ← "Dara"
names[5] ← "Eli"
found ← FALSE
i ← 1
WHILE i <= 5 AND found = FALSE DO
IF names[i] = "Dara" THEN
found ← TRUE
ELSE
i ← i + 1
ENDIF
ENDWHILE
IF found = TRUE THEN
OUTPUT "Dara is at position ", i
ELSE
OUTPUT "Not found"
ENDIFDara is at position 4Wyszukiwanie liniowe sprawdza elementy jeden po drugim od początku. Warunek WHILE zatrzymuje pętlę, gdy imię zostanie znalezione albo gdy wszystkie elementy są już sprawdzone, a flaga found zapisuje, która z tych dwóch sytuacji zaszła. Działa na nieposortowanych danych, ale na długiej liście może wymagać jednego porównania na każdy element.
11. Sortowanie bąbelkowe
Posortuj pięć liczb rosnąco.
DECLARE nums : ARRAY[1:5] OF INTEGER
DECLARE i : INTEGER
DECLARE j : INTEGER
DECLARE temp : INTEGER
nums[1] ← 5
nums[2] ← 1
nums[3] ← 4
nums[4] ← 2
nums[5] ← 8
FOR i ← 1 TO 4
FOR j ← 1 TO 5 - i
IF nums[j] > nums[j + 1] THEN
temp ← nums[j]
nums[j] ← nums[j + 1]
nums[j + 1] ← temp
ENDIF
NEXT j
NEXT i
FOR i ← 1 TO 5
OUTPUT nums[i]
NEXT i1
2
4
5
8Sortowanie bąbelkowe porównuje każdą parę sąsiadów i zamienia je miejscami, gdy stoją w złej kolejności. Po każdym obiegu zewnętrznej pętli największa z pozostałych wartości trafia na koniec, więc wewnętrzna pętla może za każdym razem kończyć się o jeden element wcześniej. Zamiana wymaga trzeciej zmiennej, temp, która przechowuje jedną wartość, gdy druga jest kopiowana na jej miejsce.
12. Silnia za pomocą funkcji
Napisz funkcję, która zwraca silnię n (n!), a potem użyj jej, aby obliczyć 5!.
FUNCTION Factorial(n : INTEGER) RETURNS INTEGER
DECLARE result : INTEGER
DECLARE i : INTEGER
result ← 1
FOR i ← 2 TO n
result ← result * i
NEXT i
RETURN result
ENDFUNCTION
OUTPUT "5! = ", Factorial(5)5! = 120FUNCTION przyjmuje parametry, wykonuje swoją pracę i oddaje wartość za pomocą RETURN; jej nagłówek podaje typ zwracanej wartości. Zmienne zadeklarowane w jej wnętrzu istnieją tylko w czasie jej działania. 5! to 5 × 4 × 3 × 2 × 1, czyli 120.
13. Policz samogłoski w słowie
Policz, ile samogłosek zawiera słowo PSEUDOCODE.
DECLARE word : STRING
DECLARE letter : CHAR
DECLARE vowels : INTEGER
DECLARE i : INTEGER
word ← "PSEUDOCODE"
vowels ← 0
FOR i ← 1 TO LENGTH(word)
letter ← SUBSTRING(word, i, 1)
IF letter = 'A' OR letter = 'E' OR letter = 'I' OR letter = 'O' OR letter = 'U' THEN
vowels ← vowels + 1
ENDIF
NEXT i
OUTPUT word, " has ", vowels, " vowels"PSEUDOCODE has 5 vowelsLENGTH zwraca liczbę znaków w napisie, a SUBSTRING(word, i, 1) pobiera jeden znak, zaczynając od pozycji i. Pętla odwiedza każdy znak i dodaje jeden do licznika, gdy jest to A, E, I, O lub U.
14. FizzBuzz
Wypisz liczby od 1 do 15, ale zamiast wielokrotności 3 wypisz Fizz, zamiast wielokrotności 5 wypisz Buzz, a zamiast wielokrotności obu wypisz FizzBuzz.
DECLARE i : INTEGER
FOR i ← 1 TO 15
IF i MOD 15 = 0 THEN
OUTPUT "FizzBuzz"
ELSE
IF i MOD 3 = 0 THEN
OUTPUT "Fizz"
ELSE
IF i MOD 5 = 0 THEN
OUTPUT "Buzz"
ELSE
OUTPUT i
ENDIF
ENDIF
ENDIF
NEXT i1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzzKolejność sprawdzeń ma znaczenie. 15 jest wielokrotnością zarówno 3, jak i 5, więc test dla 15 musi być pierwszy; w przeciwnym razie program wypisałby Fizz i nigdy nie doszedłby do FizzBuzz. To klasyczna rozgrzewka na rozmowach kwalifikacyjnych, bo sprawdza właśnie taki sposób myślenia.
15. Próby hasła z REPEAT UNTIL
Wypróbuj po kolei maksymalnie trzy hasła i przyznaj dostęp, jeśli któreś z nich jest poprawne.
DECLARE attempts : ARRAY[1:3] OF STRING
DECLARE tries : INTEGER
DECLARE guess : STRING
attempts[1] ← "hunter1"
attempts[2] ← "letmein"
attempts[3] ← "open sesame"
tries ← 0
REPEAT
tries ← tries + 1
guess ← attempts[tries]
OUTPUT "Try ", tries, ": ", guess
UNTIL guess = "open sesame" OR tries = 3
IF guess = "open sesame" THEN
OUTPUT "Access granted"
ELSE
OUTPUT "Locked out"
ENDIFTry 1: hunter1
Try 2: letmein
Try 3: open sesame
Access grantedPętla REPEAT ... UNTIL sprawdza warunek na końcu, więc jej ciało zawsze wykonuje się co najmniej raz. Zatrzymuje się, gdy hasło się zgadza, albo po trzeciej próbie. Kolejne hasła pochodzą z tablicy, dzięki czemu przykład działa bez wpisywania czegokolwiek; w odpowiedzi na egzaminie zwykle wczytuje się każdą z nich za pomocą INPUT.
Pseudokod w przykładach: najczęstsze pytania
Jak wygląda przykład pseudokodu?
Krótki przykład sprawdza, czy test jest zaliczony: IF score >= 50 THEN OUTPUT "Pass" ELSE OUTPUT "Fail" ENDIF. Czyta się go prawie jak angielski, ale ma stałe reguły, więc można go linia po linii przełożyć na Pythona, Javę lub dowolny inny język. 15 programów na tej stronie prowadzi od jednej linii aż po wyszukiwanie i sortowanie.
Jak pisać pseudokod?
Ustal, co program ma robić, a potem zapisz kroki po kolei, używając niewielkiego zestawu słów kluczowych: DECLARE dla zmiennych, ← do przypisania, IF do decyzji, FOR lub WHILE do powtórzeń i OUTPUT do wyników. Wcinaj ciało każdego bloku, zamykaj go odpowiednim słowem kończącym i zapisuj jedną czynność w linii.
Czy pseudokod jest taki sam na każdym egzaminie?
Nie. Cambridge (IGCSE i A-Level) używa DECLARE i strzałki ←, AQA używa ← bez deklaracji, Exam Reference Language od OCR przypomina Pythona, a Edexcel zapisuje SET ... TO. Przykłady na tej stronie używają stylu Cambridge; edytor pseudokodu przełącza się między wszystkimi czterema stylami.
Czy pseudokod można uruchomić?
Tak, na tej stronie. Pseudokod nie jest prawdziwym językiem programowania, więc nie ma oficjalnego kompilatora, ale ten edytor uruchamia pseudokod Cambridge w przeglądarce, pokazuje wynik i przechodzi przez kod linia po linii. Kliknij Uruchom w edytorze pod dowolnym przykładem.
Czym różni się pseudokod od schematu blokowego?
Oba opisują algorytm, zanim powstanie kod. Schemat blokowy rysuje kroki jako bloki i strzałki, co sprawdza się w krótkich procesach z kilkoma decyzjami. Pseudokod zapisuje je jako ustrukturyzowany tekst, który lepiej skaluje się do dłuższych programów i łatwiej przekłada się na prawdziwy kod.
Czy w pseudokodzie trzeba deklarować zmienne?
W pseudokodzie Cambridge tak: klucze oceniania wymagają DECLARE name : TYPE, zanim zmienna zostanie użyta. Inne style, na przykład AQA, pomijają deklaracje. Deklaracja mówi też czytelnikowi, jakiego typu wartość przechowuje zmienna.