Алгоритмы и псевдокод
| English | Русский |
|---|---|
| algorithm/ˈælɡərɪθəm/ | алгоритм |
| sequence/ˈsiːkwəns/ | последовательность |
| deterministic/dɪˌtɜːmɪˈnɪstɪk/ | детерминистическое |
| identifier table/aɪˈdentɪfaɪə ˈteɪbl/ | таблица идентификаторов |
| variable/ˈveərɪəbl/ | переменной |
| data type/ˈdeɪtə taɪp/ | тип данных |
| pseudocode/ˈsuːdəʊkəʊd/ | псевдокод |
| assignment/əˈsaɪnmənt/ | присваиванием |
| loop/luːp/ | цикла |
| count-controlled loop/kaʊnt kənˈtrəʊld luːp/ | цикл с числовым управлением |
| pre-condition loop/priː kənˈdɪʃn luːp/ | цикл с предварительным условием |
| post-condition loop/pəʊst kənˈdɪʃn luːp/ | цикл с последующим условием |
| iteration/ˌɪtəˈreɪʃn/ | итерации |
| selection/sɪˈlekʃn/ | выбор |
| flowchart/ˈfləʊtʃɑːt/ | блок-схема |
| stepwise refinement/ˈstepwaɪz rɪˈfaɪnmənt/ | пошаговое уточнение |
Самый дорогой дефис в истории
- 22 июля 1962 года ракета Mariner 1, летевшая к Венере, была уничтожена через 293 секунды после запуска.
- Причиной стал один пропущенный знак над символом в уравнениях навигации. Компьютер точно следовал написанным инструкциям, а написанные инструкции были неверны.
- Компьютер никогда не додумывает за вас. Каждый шаг, который вы ему даете, должен иметь ровно одно значение.
- Именно поэтому этот урок посвящен написанию шагов, которым может следовать машина: алгоритмам.
Что такое алгоритм
- Алгоритм — это решение проблемы, выраженное в виде последовательности определенных шагов.
- Каждый шаг однозначен (имеет одно значение), детерминирован (одинаковый вход → одинаковый выход), конечен (шаги заканчиваются) и эффективен (каждый шаг реально выполним).
- Он говорит что делать, независимо от языка программирования, и каждый следует схеме вход → обработка → выход.

У каждого алгоритма одна и та же структура: вход, обработка, выход
Алгоритм является «детерминированным». Это означает:
Детерминированный = одинаковый вход → одинаковый выход каждый раз. (Конечный = шаги заканчиваются; однозначный = одно значение на шаг.)
Разобранный пример: таблица идентификаторов
- Перед написанием кода перечислите все элементы данных в таблице идентификаторов: имя переменной, тип данных и описание.
- Программа магазина хранит
"Fruit",20/02/2025,12.67иTRUE. В экзамене требуется указать имя и тип для каждого. Category : STRING(категория товара),DateSold : DATE(когда он был продан),ItemCost : REAL(стоимость),InStock : BOOLEAN(есть ли он в наличии?).- Один балл за строку за имя и тип, поэтому пишите тип точно так, как указано в руководстве по псевдокоду:
INTEGER,REAL,STRING,CHAR,BOOLEAN,DATE.

*Таблица идентификаторов называет все элементы данных перед написанием кода
В таблице идентификаторов тип данных для значения 12.67 (стоимость) — это ____.
Число с дробной частью — это REAL (вещественное). INTEGER используется для целых чисел, STRING — для текста, BOOLEAN — для TRUE/FALSE, DATE — для даты.
Три конструкции
IF … THEN … ELSE … ENDIF
- Присваивание сохраняет значение со стрелкой,
Total ← Total + Value;=используется для сравнения.DIV— целочисленное деление, аMOD— остаток, поэтому17 MOD 5 = 2.
INPUT Age # sequence
IF Age >= 18 THEN
# selection
ENDIF
OUTPUT "Adult"
ELSE
OUTPUT "Minor"
ENDIF
FOR Count <- 1 TO 10 # iteration
OUTPUT Count
NEXT Count

*Три строительных блока любого алгоритма
Выбор: следуйте веткам IF / ELSE
Перетащите счет и посмотрите, какая ветка выполняется. Выбор последовательно проверяет каждое условие и выбирает ПЕРВОЕ истинное — именно так работает конструкция IF … ELSE IF … ELSE.
Сопоставьте каждую из трех конструкций программирования с тем, что она делает.
Любой алгоритм состоит всего из трех конструкций — последовательности, выбора и итерации.
В этом псевдокоде какой символ означает присваивание (хранение значения)?
Присваивание использует ← (например, x ← 5); = зарезервирован для сравнения.
Каково значение 17 MOD 5?
MOD возвращает остаток: $17 = 3 \times 5 + 2$, значит 17 MOD 5 = 2. (17 DIV 5 = 3.)
Какой цикл?
FOR … NEXTкогда вы знаете, сколько раз повторять: петля с управляемым счетчиком.WHILE … ENDWHILEпроверяет условие перед каждой итерацией, поэтому тело может выполниться ноль раз: петля с предусловием.REPEAT … UNTILпроверяет после каждой итерации, поэтому тело всегда выполняется как минимум один раз: петля с постусловием. Валидация ввода — классический случай.- Ответ «опишите конструкцию итерации» должен называть петлю, указывать где проверяется условие и приводить последствия.

*Цикл WHILE проверяет до выполнения тела; цикл REPEAT … UNTIL проверяет после него
Как цикл WHILE отличается от цикла REPEAT...UNTIL?
WHILE проверяет сначала (может выполниться 0 раз); REPEAT...UNTIL проверяет после, поэтому всегда выполняется хотя бы один раз.
Цикл FOR управляется счетчиком (он повторяется фиксированное количество раз), тогда как цикл WHILE управляется условием (он повторяется до изменения условия).
Используйте FOR, когда знаете количество проходов; используйте WHILE/REPEAT, когда цикл продолжается до наступления определенного события.
Разобранный пример: от слов к псевдокоду
- Задача: ввести 100 целых чисел, сложить только положительные и вывести итоговую сумму.
- Сначала спланируйте данные:
Count,TotalиNextNumber, всеINTEGER. Затем три конструкции сделают остальное.
DECLARE Count, Total, NextNumber : INTEGER
Total <- 0
FOR Count <- 1 TO 100
INPUT NextNumber
IF NextNumber > 0 THEN
Total <- Total + NextNumber
ENDIF
NEXT Count
OUTPUT Total
- Следующий вопрос просит определить конструкции: итерацию (цикл
FORповторяет ввод 100 раз), выбор (IFрешает, добавляется ли значение) и последовательность (инструкции выполняются по порядку).
Распознавание конструкций в отрывке
- Любимый вопрос показывает пять отрывков псевдокода и просит отметить, какую из присваивания, выбора, итерации использует каждый.
Result ← CalculateTotal()— это присваивание.WHILE IsClosed— это итерация.REPEAT … INPUT Value … UNTIL Sales[4] > Value— это итерация и присваивание (INPUTсохраняет значение). IF Sales[Current] <= 150 THEN Discount ← TRUE ENDIF- Смотрите на каждую строку отрывка, а не только на первую. Строка может требовать двух отметок.
Какие конструкции используются в этом извлечении? REPEAT … INPUT Value … UNTIL Total > 100. Выберите все подходящие варианты.
REPEAT … UNTIL — это итерация, а INPUT Value сохраняет значение, что считается присваиванием. Здесь нет ни IF, ни CASE, значит нет выбора — условие UNTIL управляет циклом, оно не выбирает между ветвями.
Блок-схемы
- Блок-схема иллюстрирует тот же алгоритм, что и псевдокод. Овалы обозначают
STARTиEND, прямоугольники — процессы, параллелограммы —INPUT/OUTPUT, а ромб — условие выбора. - Ромб используется для выбора (условия), а линия потока, идущая вверх по схеме, обозначает цикл.
- На экзамене встречаются оба формата: псевдокод по блок-схеме и блок-схема по псевдокоду или структурированному английскому языку. Каждый нарисованный вами символ должен соответствовать одной строке псевдокода.

Каждый символ блок-схемы соответствует одному типу оператора псевдокода
В блок-схеме что обозначает ромб?
Ромбы используются там, где происходит выбор; ромб, у которого линия потока возвращается вверх, — это проверка цикла. Прямоугольники — процессы, параллелограммы — ввод/вывод, овалы — START и END.
Разбор примера: игра в угадайку
- Программа выбирает случайное целое число от 1 до 100, затем запрашивает попытки, пока пользователь не угадает. Пользователь должен сделать хотя бы одну попытку, поэтому цикл является циклом с
REPEAT … UNTIL.
DECLARE Target, Guess : INTEGER
Target <- INT(RAND(100)) + 1
REPEAT
INPUT Guess
IF Guess < Target THEN
OUTPUT "Too low"
ELSE
IF Guess > Target THEN
OUTPUT "Too high"
ENDIF
ENDIF
UNTIL Guess = Target
OUTPUT "Correct"
- Следуйте по блок-схеме: один ромб условия для проверки цикла, два для подсказок, и все линии потока ведут обратно к
INPUT Guessили кEND.

Игра в угадайку как блок-схема: цикл возвращается к вводу до тех пор, пока попытка не совпадет с ответом
Почему REPEAT … UNTIL подходит для игры в угадывание?
Цикл с проверкой после выполнения всегда выполняет тело один раз перед проверкой, что соответствует игре, требующей как минимум одной попытки. Цикл WHILE потребовал бы попытки до начала цикла, чтобы просто было что проверить.
Пошаговое уточнение
- Пошаговое уточнение означает начало с общего плана и последовательную детализацию каждого шага до более мелких действий снова и снова, пока каждый шаг не можно будет записать напрямую в виде псевдокода.
- «Обработать заказ» → «Получить товары», «Рассчитать итоговую сумму», «Принять оплату» → «Рассчитать итоговую сумму» превращается в «Для каждого товара добавьте цену × количество; примените скидку, если есть».
- Каждый уровень является уточнением предыдущего, и законченные уровни вместе составляют проект. Задание «Опишите пошаговое уточнение» требует изложения плана, его детализации и правила остановки.

Уточняйте каждый шаг до состояния, когда его можно закодировать напрямую
Расставьте этапы пошаговой декомпозиции по порядку.
Сначала составьте план, затем уточняйте уровень за уровнем; остановитесь, когда шаг станет одной строкой псевдокода.
Логические выражения
- Части решения определяются логическими выражениями: условиями, построенными из сравнений (
=,<>,<,>,<=,>=), соединенных операторамиAND,ORиNOT. - Пример корректной оценки:
Mark >= 0 AND Mark <= 100. Скидка применяется, если клиент является членом клуба или тратит более 50:IsMember OR Total > 50. NOT (Mark < 40)означает то же самое, что иMark >= 40. Запишите выражение, а затем протестируйте его со значениями с обеих сторон границы.

Сравнения, соединенные через AND, OR и NOT, образуют условия, необходимые алгоритму
NOT (Mark < 40) истинно ровно для тех же значений Mark, что и Mark >= 40.
Отрицание «меньше 40» дает «40 или больше». Проверьте границу: Mark = 40 делает Mark < 40 ложным, значит NOT от него истинно, и 40 >= 40 также истинно.
Потерянные баллы
←присваивает значение, а=сравнивает.IF Total = 0— это проверка;Total = 0, написанная отдельной строкой, не дает баллов.- Каждая конструкция должна быть закрыта:
ENDIF,ENDWHILE,UNTIL,NEXT,ENDCASE. Отсутствующий закрывающий элемент нарушает структуру оценки. - Объявляйте переменные до их использования и инициализируйте накопительную сумму нулем (
0). - Цикл с
WHILEможет не выполниться ни разу, цикл сREPEATвыполняется всегда хотя бы один раз. Выберите цикл, соответствующий задаче, и объясните выбор, если требуется.
Вы поняли
- Шаги алгоритма должны быть однозначными, детерминированными, конечными, эффективными; данные планируются в таблице идентификаторов.
- Три конструкции: последовательность, выбор (
IF/CASE), итерация (FOR/WHILE/REPEAT);WHILEпроверяет условие до выполнения тела,REPEAT— после. - Блок-схема и псевдокод описывают один и тот же алгоритм; пошаговое уточнение расширяет план до уровня, позволяющего написание кода.
- условия являются логическими выражениями: сравнения, объединённые операторами
AND,OR,NOT