Блок-схемы алгоритмов: понятие и построение
Алгоритм можно рассказать словами: «спроси число, если оно больше нуля - напиши плюс». Можно сразу кодом. А можно нарисовать: прямоугольники, ромбы, стрелки. Блок-схема как раз для этого - чтобы ход мысли был виден глазами, ещё до синтаксиса языка.
Блок-схема алгоритма - графическое представление алгоритма: шаги изображают типовыми блоками, порядок выполнения - линиями со стрелками.
В школе и колледже блок-схемы любят за одно: по рисунку сразу видно, где ветвление, где цикл, где человек ошибся и «забыл выход». Код это тоже покажет, но позже и шумнее.
Зачем рисовать, если есть код
- спроектировать логику до выбора языка;
- объяснить алгоритм другому человеку без споров о скобках;
- найти лишние ветки и тупики;
- оформить ответ на контрольной/экзамене в привычном ГОСТ-стиле.
Минус тоже есть: сложный алгоритм на листе А4 превращается в спагетти. Тогда схему дробят на части или уходят в псевдокод. Для учебных задач на 5-15 блоков блок-схема обычно уместна.
Основные блоки
Терминатор (овал/скруглённый прямоугольник) - начало и конец.
Процесс (прямоугольник) - вычисление, присваивание, обработка.
Ввод/вывод (параллелограмм) - ввести a, вывести результат.
Решение (ромб) - условие; из него обычно два выхода: «да» и «нет».
Модификация / цикл (иногда шестиугольник или пара блоков) - заголовок цикла со счётчиком.
Предопределённый процесс (прямоугольник с двойными вертикальными линиями) - вызов готовой процедуры.
Соединитель (круг) - «перенос» линии на другое место листа.
Подписи внутри блоков пишут коротко: S = S + a, x > 0, вывод S. Роман в ромбе читать никто не будет.
Стрелки показывают направление. Пересечения линий без соединителей - частая причина «я запутался в собственной схеме».
Три базовые структуры
Любой «нормальный» учебный алгоритм собирают из трёх кирпичей (структурное программирование):
- Следование - блоки друг за другом.
- Ветвление - ромб и две ветки (полная или неполная форма «если-то»).
- Цикл - повторение, пока истинно условие (или заданное число раз).
Про типы алгоритмов подробнее - в статье «Понятие и типы алгоритмов». Блок-схема - способ нарисовать эти типы, а не отдельная параллельная вселенная.
Линейная схема
Пример: найти площадь прямоугольника.
- Начало.
- Ввод a, b.
- S = a * b.
- Вывод S.
- Конец.
На схеме: овал → параллелограмм → прямоугольник → параллелограмм → овал. Без ромбов. Если ромб появился «на всякий случай» - вы уже не про линейный алгоритм.
Ветвление на схеме
Пример: по числу x вывести, положительное оно или нет.
После ввода x ставится ромб x > 0. Ветка «да» ведёт к выводу «положительное», ветка «нет» - к «не положительное» (или отдельно проверяют ноль, если требуют три ответа). Затем ветки сходятся и идут к концу.
Правило оформления: обе стрелки из ромба подписать («да»/«нет» или «+»/«−»). Неподписанный ромб на проверке - подарок преподавателю для минуса.
Циклы: пока и для
Цикл с предусловием («пока»): сначала ромб/проверка, потом тело. Если условие сразу ложно - тело не выполнится ни разу.
Цикл с постусловием («до»): тело хотя бы раз, проверка в конце.
Цикл со счётчиком («для»): ясно, сколько повторов или как меняется i от 1 до n.
Пример на сумму: ввести n чисел, накопить S. На схеме будет цикл, внутри - ввод очередного a и S = S + a. Забыли обнулить S до цикла - классическая ошибка и на схеме, и в коде.
Выход из цикла должен быть достижим. Бесконечный цикл на бумаге выглядит «честно», но задачу не закрывает.
Правила «хорошей» учебной схемы
- Один вход в алгоритм, один основной выход (допустимы несколько концов, но лучше сводить к одному).
- Из процесса - один выход; из ромба - два (иногда больше при case, в школе редко).
- Линии по возможности сверху вниз и слева направо.
- Нет обрывов «стрелка в никуда».
- Текст в блоках читаемый, без романов.
ГОСТ 19.701 (ЕСПД) описывает символы строже. На ЕГЭ/ОГЭ и типовых контрольных достаточно узнаваемых фигур и аккуратных стрелок; уточняйте требования учителя, если просят «строго по ГОСТу».
От схемы к программе
Прямоугольник → операторы присваивания и вызовы. Ромб → if. Цикл → while/for/repeat. Параллелограмм → input/print или аналог.
Если схема ясная, а код «не взлетает», чаще виноват синтаксис языка, а не идея. Если код работает, а схема противоречит коду - на защите спросят, чему верить. Лучше держать их синхронно.
Про языки, на которых схему потом воплощают, см. обзор языков программирования.
Частые ошибки
- Ромб с одним выходом.
- Цикл без изменения переменной условия.
- Пересечения линий без соединителей, «паутина».
- Путают ввод/вывод с процессом (всё рисуют прямоугольниками).
- Нет начала или конца.
- Подпись «да» стоит на неверной ветке относительно смысла условия.
Ещё антипаттерн: сначала написать код, потом рисовать схему «для галочки», копируя баги. Схема тогда не инструмент, а декорация.
Краткая шпаргалка
- Блок-схема = блоки + стрелки для визуализации алгоритма.
- Овал - старт/стоп; прямоугольник - действие; параллелограмм - ввод/вывод; ромб - условие.
- База: следование, ветвление, цикл.
- Подписывайте выходы ромба; не оставляйте стрелок в пустоту.
- Схема и программа должны говорить об одном алгоритме.
Для тренировки возьмите задачу из учебника, нарисуйте схему на бумаге, затем перенесите в код. Если без подглядывания получается один и тот же результат - тема усвоена.