Примеры псевдокода
15 разобранных примеров на псевдокоде Cambridge IGCSE и A-Level, от первого OUTPUT до сортировки пузырьком. У каждого указан вывод, и каждый можно запустить в редакторе ниже.
Как читать эти примеры
Псевдокод описывает шаги программы на структурированном английском, без строгих правил настоящего языка программирования. Все примеры ниже написаны в стиле Cambridge, который используют на экзаменах IGCSE и A-Level: DECLARE для переменных, ← для присваивания, OUTPUT для вывода и блоки, которые закрываются словами ENDIF, NEXT или ENDWHILE.
В каждом примере есть задача, псевдокод, вывод, который он даёт, и объяснение, как он работает. Нажмите «Запустить в редакторе», чтобы загрузить пример в редактор вверху страницы: там его можно пройти строка за строкой и увидеть, как меняются переменные. Синтаксис пока незнаком? В редакторе псевдокода есть кликабельная библиотека всех конструкций.
1. Hello, World
Вывести сообщение на экран.
OUTPUT "Hello, World!"Hello, World!OUTPUT выводит всё, что стоит после него, а текст записывается в двойных кавычках. Эта одна строка уже полноценная программа: псевдокоду не нужны ни функция main, ни импорты.
2. Сложить два числа
Сохранить два целых числа, сложить их и вывести сумму.
DECLARE a : INTEGER
DECLARE b : INTEGER
DECLARE total : INTEGER
a ← 12
b ← 30
total ← a + b
OUTPUT "The total is ", totalThe total is 42Каждая переменная объявляется с именем и типом до того, как её используют. Стрелка ← сохраняет значение, поэтому total ← a + b читается как «total становится равным a плюс b». Запятая в OUTPUT соединяет текст и значение в одной строке.
3. Чётное или нечётное
Определить, чётное число или нечётное.
DECLARE n : INTEGER
n ← 17
IF n MOD 2 = 0 THEN
OUTPUT n, " is even"
ELSE
OUTPUT n, " is odd"
ENDIF17 is oddMOD даёт остаток от деления. Чётное число делится на 2 без остатка, поэтому проверка выглядит как n MOD 2 = 0. IF выбирает одну из двух ветвей, а ENDIF закрывает блок. В псевдокоде одиночный знак = сравнивает два значения и никогда ничего не присваивает.
4. Оценка за тест
Превратить балл из 100 в оценку: A за 80 и выше, B от 60 до 79, C ниже 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 BПроверки идут от самой высокой границы вниз, поэтому балл 74 не проходит первую проверку и проходит вторую. Вложить один IF в ELSE другого: так в псевдокоде Cambridge записывается цепочка else-if. CHAR хранит один символ в одинарных кавычках.
5. Сумма чисел от 1 до 10
Сложить все целые числа от 1 до 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 55Цикл FOR выполняется заданное число раз: i принимает значения 1, 2, 3 и так далее до 10, а NEXT i отмечает конец тела цикла. Накопленная сумма начинается с 0 и растёт на каждом проходе. Ответ, 55, совпадает с формулой n(n + 1) / 2.
6. Таблица умножения
Вывести первые пять строк таблицы умножения на 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 = 35Счётчик цикла i участвует в вычислении, поэтому каждый проход выводит новую строку. OUTPUT может соединять запятыми несколько кусков текста и несколько значений.
7. Обратный отсчёт с циклом WHILE
Отсчитать от 5 до 1, затем вывести финальное сообщение.
DECLARE count : INTEGER
count ← 5
WHILE count > 0 DO
OUTPUT count
count ← count - 1
ENDWHILE
OUTPUT "Liftoff!"5
4
3
2
1
Liftoff!Цикл WHILE проверяет условие перед каждым проходом и останавливается, как только условие становится ложным. Здесь условие count > 0, а тело цикла каждый раз уменьшает count на единицу. Если убрать строку, которая уменьшает значение, цикл никогда не закончится. Используйте WHILE, когда заранее неизвестно, сколько проходов понадобится.
8. Найти наибольшее число в массиве
Найти самое большое значение в списке из шести чисел.
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] объявляет шесть ячеек с номерами от 1 до 6, потому что в Cambridge массивы обычно начинаются с 1. Программа считает первый элемент наибольшим, затем сравнивает с ним каждый следующий и оставляет большее значение. После одного прохода по массиву ответ лежит в largest.
9. Вычислить среднее
Найти среднее значение четырёх оценок за тест.
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.5Цикл прибавляет каждый элемент массива к total, затем программа делит сумму на количество оценок. Оператор / даёт дробный результат, поэтому вывод равен 77.5. Если нужно целочисленное деление, используйте DIV.
10. Линейный поиск
Найти позицию имени Dara в списке имён.
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 4Линейный поиск проверяет элементы по одному с начала списка. Условие WHILE останавливает цикл, когда имя найдено или когда проверены все элементы, а флаг found запоминает, что из этого произошло. Поиск работает и на неотсортированных данных, но на длинном списке может потребовать по одному сравнению на каждый элемент.
11. Сортировка пузырьком
Отсортировать пять чисел по возрастанию.
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
8Сортировка пузырьком сравнивает каждую пару соседних элементов и меняет их местами, если они стоят в неправильном порядке. После каждого прохода внешнего цикла наибольшее из оставшихся значений оказывается в конце, поэтому внутренний цикл каждый раз может останавливаться на один элемент раньше. Для обмена нужна третья переменная, temp, которая держит одно значение, пока на его место копируется другое.
12. Факториал через функцию
Написать функцию, которая возвращает факториал n (n!), и с её помощью вычислить 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 принимает параметры, выполняет свою работу и возвращает значение через RETURN; в её заголовке указан тип возвращаемого значения. Переменные, объявленные внутри, существуют только пока функция выполняется. 5! это 5 × 4 × 3 × 2 × 1, то есть 120.
13. Посчитать гласные в слове
Посчитать, сколько гласных в слове 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 возвращает количество символов в строке, а SUBSTRING(word, i, 1) берёт один символ, начиная с позиции i. Цикл проходит по каждому символу и увеличивает счётчик на единицу, когда встречает A, E, I, O или U.
14. FizzBuzz
Вывести числа от 1 до 15, но вместо чисел, кратных 3, выводить Fizz, вместо кратных 5 выводить Buzz, а вместо кратных и 3, и 5 выводить 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
FizzBuzzПорядок проверок важен. 15 кратно и 3, и 5, поэтому проверка на 15 должна идти первой; иначе программа выведет Fizz и никогда не дойдёт до FizzBuzz. Это классическая разминка на собеседовании, потому что она проверяет именно такое рассуждение.
15. Попытки ввода пароля с REPEAT UNTIL
Проверить до трёх паролей по очереди и открыть доступ, если один из них верный.
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 grantedЦикл REPEAT ... UNTIL проверяет условие в конце, поэтому тело выполняется хотя бы один раз. Цикл останавливается, когда пароль совпал или после третьей попытки. Варианты берутся из массива, чтобы пример работал без ввода с клавиатуры; в ответе на экзамене каждый из них обычно читают через INPUT.
Частые вопросы о примерах псевдокода
Как выглядит пример псевдокода?
Короткий пример решает, сдан ли тест: IF score >= 50 THEN OUTPUT "Pass" ELSE OUTPUT "Fail" ENDIF. Он читается почти как обычный английский текст, но подчиняется строгим правилам, поэтому его можно построчно перевести на Python, Java или любой другой язык. 15 программ на этой странице идут от одной строки до поиска и сортировки.
Как писать псевдокод?
Решите, что должна делать программа, затем запишите шаги по порядку с помощью небольшого набора ключевых слов: DECLARE для переменных, ← для присваивания, IF для решений, FOR или WHILE для повторений и OUTPUT для результатов. Делайте отступ в теле каждого блока, закрывайте блок его завершающим словом и пишите одно действие на строку.
Одинаков ли псевдокод на всех экзаменах?
Нет. Cambridge (IGCSE и A-Level) использует DECLARE и стрелку ←, AQA использует ← без объявлений, язык Exam Reference Language от OCR похож на Python, а Edexcel пишет SET ... TO. Примеры здесь написаны в стиле Cambridge; редактор псевдокода переключается между всеми четырьмя стилями.
Можно ли запустить псевдокод?
Да, прямо на этой странице. Псевдокод не настоящий язык программирования, поэтому официального компилятора нет, но здешний редактор выполняет псевдокод Cambridge в браузере, показывает вывод и проходит его строка за строкой. Нажмите «Запустить в редакторе» под любым примером.
Чем псевдокод отличается от блок-схемы?
Оба описывают алгоритм до того, как его запрограммируют. Блок-схема рисует шаги прямоугольниками и стрелками, это удобно для коротких процессов с парой решений. Псевдокод записывает их структурированным текстом, который подходит и для длинных программ и напрямую переводится в настоящий код.
Нужно ли объявлять переменные в псевдокоде?
В псевдокоде Cambridge да: схемы оценивания ожидают DECLARE name : TYPE до первого использования переменной. В других стилях, например у AQA, объявления пропускают. Объявление к тому же сообщает читателю, какого типа значение хранит переменная.