Что такое блок-схема
Схема алгоритма — это чертёж программы из стандартных фигур и стрелок: она показывает, какие шаги выполняются, в каком порядке и где алгоритм выбирает путь. Её читают сверху вниз, следуя стрелкам.
Зачем рисовать блок-схему, если можно сразу писать код? Рисунок не зависит от языка программирования. Одну и ту же схему можно перевести в Python, Паскаль или Школьный алгоритмический язык, а программа на конкретном языке понятна только тому, кто его знает. Кроме того, на схеме сразу видно ветвления и повторения — места, где новички чаще всего путаются. Это хорошо видно на примере исследований вычислительного мышления: Джаннетт Винг (J. Wing) описывала его как умение сформулировать задачу так, чтобы её решение мог выполнить исполнитель, а рисунок — один из способов такой формулировки[5]. Ребёнок может нарисовать план карандашом, проверить его пальцем и только потом садиться за компьютер.
В школьном курсе информатики блок-схемы появляются, когда разбирают алгоритмы и их виды: линейные, с ветвлением и с повторением. Федеральная образовательная программа основного общего образования относит ветвления и циклы к темам 8 класса[1], и рисунок помогает понять их до первой строчки кода.
Основные фигуры и что они значат
Для школьных задач хватает 5 фигур: овал, прямоугольник, ромб, параллелограмм и стрелка. У каждой фигуры строго своё значение, и путать их нельзя — иначе схему поймут неправильно.
| Фигура | Что означает | Пример надписи | В Python |
| Овал (скруглённый прямоугольник) | Начало или конец алгоритма | «Начало», «Конец» | первая и последняя строка |
| Прямоугольник | Действие, вычисление | s = a + b | s = a + b |
| Ромб | Условие, проверка | a > b ? | if a > b: |
| Параллелограмм | Ввод или вывод данных | ввод a, вывод s | input(), print() |
| Стрелка | Порядок выполнения | — | переход к следующей строке |
Иногда встречается шестиугольник для цикла с переменной и прямоугольник с двойными боковыми линиями для вызова вспомогательного алгоритма. Учитель обычно говорит, какие обозначения блок-схем использует класс; если не уверены, стройте повторение через ромб — так поймёт любой.
Правила рисования схем
Чтобы схему мог прочитать другой человек, соблюдают 5 правил: один вход в начале, один выход в конце, движение сверху вниз, стрелки без пересечений и ровно два выхода у каждого ромба.
- Одно начало и один конец. Даже если путей несколько, они сходятся к одному овалу «Конец».
- Сверху вниз и слева направо. Стрелки, идущие в этих направлениях, можно рисовать без наконечника; обратные — обязательно со стрелкой.
- У ромба два выхода. Их подписывают «да» и «нет» (или «+» и «−»).
- Одно действие — одна фигура. Не стоит писать в прямоугольнике целый абзац.
- Линии не пересекаются. Если без пересечения не выходит, схему лучше перерисовать.
Эти правила кажутся мелочами, но именно из-за них блок-схема читается однозначно. Нарушать их не стоит даже в черновике: привычка рисовать небрежно потом переходит в код. Схема, где из ромба выходит одна стрелка, не говорит, что делать при ложном условии, — а значит, алгоритм не закончен.
Линейный алгоритм на схеме
Линейная схема — это цепочка фигур одна под другой без развилок: начало, ввод, вычисление, вывод, конец. Каждая фигура выполняется ровно один раз.
Возьмём задачу: найти площадь прямоугольника по двум сторонам. Блок-схема будет такой: овал «Начало» → параллелограмм «ввод a, b» → прямоугольник «s = a * b» → параллелограмм «вывод s» → овал «Конец». Перевод в Python почти дословный:
a = int(input())
b = int(input())
s = a * b
print(s)
Овалы в коде не пишут: начало программы — её первая строка, конец — последняя. Параллелограммы превращаются в input() и print(), прямоугольники — в присваивания. Если ребёнок может по такой цепочке написать программу и обратно — нарисовать фигуры по готовому коду, тема линейных алгоритмов освоена.
Ветвление: ромб с двумя выходами
Ветвление на схеме — это ромб с условием, из которого выходят 2 стрелки: «да» и «нет». Каждая ведёт к своим действиям, а потом ветки снова соединяются в одну линию.
Пример: ввести число и сообщить, чётное оно или нечётное. После параллелограмма «ввод n» стоит ромб «n % 2 == 0?». По стрелке «да» — параллелограмм «вывод "чётное"», по стрелке «нет» — «вывод "нечётное"». Ниже обе стрелки сходятся и идут к овалу «Конец».
n = int(input())
if n % 2 == 0:
print("чётное")
else:
print("нечётное")
Бывает неполное ветвление: на ветке «нет» нет никаких действий, стрелка сразу идёт вниз. В Python это if без else. По ФОП ООО и полное, и неполное ветвление входят в темы 8 класса, поэтому оба варианта стоит уметь рисовать. Важно, что стрелка «нет» всё равно рисуется — без неё схема незакончена. Синтаксис условий подробно разобран в уроке про условия if в Python.
Цикл на схеме
Цикл на схеме узнают по стрелке, которая возвращается вверх, к ромбу с условием. Пока условие верно, исполнитель снова и снова проходит один и тот же участок; когда условие ложно, выходит из петли.
Нарисуем вывод чисел от 1 до 5. Прямоугольник «i = 1», затем ромб «i <= 5?». По «да» — параллелограмм «вывод i», прямоугольник «i = i + 1» и стрелка обратно к ромбу. По «нет» — к концу. Такую петлю называют циклом с предусловием: проверка стоит перед телом.
i = 1
while i <= 5:
print(i)
i = i + 1
Самая частая ошибка на рисунке и в коде одна и та же — забыть прямоугольник «i = i + 1». Тогда петля никогда не закончится. На схеме это видно сразу: внутри петли нет ничего, что меняло бы условие. Как распознать и остановить такую программу, рассказано в статье о бесконечном цикле. Тот же счёт можно записать короче через for i in range(1, 6).
Как перевести блок-схему в код Python
Чтобы перевести схему в программу, идите по стрелкам сверху вниз и заменяйте каждую фигуру одной-двумя строками кода по 4 правилам из таблицы выше.
- Параллелограмм. Ввод —
input()с преобразованием в число, вывод —print(). - Прямоугольник. Присваивание или вычисление.
- Ромб без возврата. Это
if/else; действия веток пишутся с отступом. - Ромб, к которому возвращается стрелка. Это
while; всё внутри петли — тело цикла с отступом.
Отступы в Python — прямой аналог веток и петель на рисунке. Официальная документация Python объясняет, что тело условия и цикла определяется именно отступом[3], а не скобками, как в C++ или Паскале. Всё, что на схеме «внутри» ветки, в коде сдвинуто на 4 пробела, как рекомендует руководство PEP 8[2]. Руководство PEP 8 советует не смешивать табы и пробелы. Если отступ потерян, программа либо не запустится, либо выполнит действие не в той ветке.
Обратный перевод тоже полезен. Возьмите короткую программу из учебника и нарисуйте её фигурами: так проще понять чужой код, а ещё это хорошая подготовка к заданиям, где нужно определить, что выведет программа.
Как читать чужую схему: трассировка
Трассировка — это пошаговое выполнение алгоритма «на бумаге»: вы идёте по стрелкам и записываете в таблицу, как меняются переменные после каждой фигуры.
| Шаг | Фигура | i | Вывод |
| 1 | i = 1 | 1 | — |
| 2 | i <= 3? — да | 1 | 1 |
| 3 | i = i + 1 | 2 | — |
| 4 | i <= 3? — да | 2 | 2 |
| 5 | i = i + 1 | 3 | — |
| 6 | i <= 3? — да, затем i = 4; i <= 3? — нет | 4 | 3 |
Такая таблица помогает найти ошибку, не запуская программу. Брэннан и Резник называют проверку и отладку одной из ключевых практик вычислительного мышления, а трассировка — самый простой её вариант[4]. Без неё ребёнок часто меняет код наугад, и результат не получается. Если на каком-то шаге значение получилось не тем, что вы ждали, ошибка в фигуре прямо перед этой строкой.
Когда схема не нужна
Если программа короче 5–6 строк и в ней нет развилок, рисунок не нужен: код читается быстрее. Вот 4 случая, когда схема скорее мешает.
- Программа из 3 строк — ввод, вычисление, вывод. Схема получится длиннее кода.
- Больше 20 фигур на листе. Такую схему трудно читать; лучше разбить задачу на части или писать псевдокод.
- Проект в Scratch с 5 спрайтами, которые работают одновременно: стрелки не показывают параллельные события.
- Ребёнку 7 лет и он ещё не пишет код. Ему понятнее карточки с командами и игра в робота.
«Настоящие программисты рисуют схему перед каждой программой». Это миф: на практике схемы используют для объяснения и проверки сложных мест, а не для каждой мелкой задачи.
«Если схема нарисована, программа точно заработает». Это не подтверждается: схема проверяет логику, но не опечатки, не типы данных и не отступы — их найдёт только запуск.
Чего делать нельзя
Нельзя путать значения фигур: ромб, нарисованный вместо прямоугольника, превращает действие в условие. Вот 6 правил, которые стоит держать в голове.
- Нельзя оставлять у ромба одну стрелку — второй выход обязателен, даже если там нет действий.
- Не следует писать ввод и вывод в прямоугольнике — для них есть параллелограмм.
- Не стоит рисовать петлю без изменения переменной — получится бесконечный цикл.
- Нельзя заканчивать схему без овала «Конец» — непонятно, где алгоритм останавливается.
- Не допускается пересекать стрелки без крайней необходимости: читатель потеряет путь.
- Не стоит переписывать в фигуры весь код построчно — схема нужна для идеи, а не для копии программы.
Если хочется разобраться, откуда берутся сами алгоритмы, загляните в статью об алгоритмах для детей.
Источники
[1] Приказ Минпросвещения России от 18.05.2023 № 370 «Об утверждении федеральной образовательной программы основного общего образования».
[2] van Rossum G., Warsaw B., Coghlan N. PEP 8 — Style Guide for Python Code. Python Software Foundation, 2001.
[3] The Python Tutorial (официальная документация Python 3). Python Software Foundation.
[4] Brennan K., Resnick M. New frameworks for studying and assessing the development of computational thinking // Proceedings of the 2012 Annual Meeting of the American Educational Research Association. Vancouver, 2012.
[5] Wing J. M. Computational thinking // Communications of the ACM. 2006. Vol. 49, № 3. P. 33–35.
Вопросы и ответы
Чем схема отличается от псевдокода?
Схема рисует алгоритм фигурами и стрелками, псевдокод записывает его словами, похожими на код. Для коротких задач с ветвлениями нагляднее рисунок, для длинных — псевдокод.
В чём лучше рисовать: на бумаге или в программе?
Для школьных задач хватит листа в клетку и карандаша: ошибку легко стереть. Редакторы диаграмм пригодятся, когда рисунок нужно вставить в доклад.
Как на схеме показать цикл for?
Обычно через ромб с проверкой счётчика и стрелку-возврат, как у while. Некоторые учебники используют для этого отдельную фигуру-шестиугольник с заголовком цикла.
Нужно ли подписывать стрелки?
Подписывают только выходы ромба — «да» и «нет». Остальные стрелки понятны без подписей, если идут сверху вниз.
Бывают ли схемы на экзамене?
В заданиях на компьютере программу пишут кодом, поэтому рисовать на экзамене обычно не требуется. Но умение мысленно представить развилки и петли помогает решать задачи быстрее.
Что делать, если схема получилась огромной?
Разбейте задачу на части и нарисуйте каждую отдельно. В коде такие части станут функциями — вспомогательными алгоритмами из программы 9 класса.