Как нарисовать схему алгоритма и перевести её в код на Python

Информатикаобновлено 07.10.202610 мин чтения

Блок-схема — это рисунок алгоритма, где каждое действие стоит в своей фигуре, а стрелки показывают порядок. Овал обозначает начало и конец, прямоугольник — действие, ромб — условие, параллелограмм — ввод и вывод. По такой схеме легко проверить план до того, как писать код.

Что такое блок-схема

Схема алгоритма — это чертёж программы из стандартных фигур и стрелок: она показывает, какие шаги выполняются, в каком порядке и где алгоритм выбирает путь. Её читают сверху вниз, следуя стрелкам.

Зачем рисовать блок-схему, если можно сразу писать код? Рисунок не зависит от языка программирования. Одну и ту же схему можно перевести в Python, Паскаль или Школьный алгоритмический язык, а программа на конкретном языке понятна только тому, кто его знает. Кроме того, на схеме сразу видно ветвления и повторения — места, где новички чаще всего путаются. Это хорошо видно на примере исследований вычислительного мышления: Джаннетт Винг (J. Wing) описывала его как умение сформулировать задачу так, чтобы её решение мог выполнить исполнитель, а рисунок — один из способов такой формулировки[5]. Ребёнок может нарисовать план карандашом, проверить его пальцем и только потом садиться за компьютер.

В школьном курсе информатики блок-схемы появляются, когда разбирают алгоритмы и их виды: линейные, с ветвлением и с повторением. Федеральная образовательная программа основного общего образования относит ветвления и циклы к темам 8 класса[1], и рисунок помогает понять их до первой строчки кода.

Основные фигуры и что они значат

Для школьных задач хватает 5 фигур: овал, прямоугольник, ромб, параллелограмм и стрелка. У каждой фигуры строго своё значение, и путать их нельзя — иначе схему поймут неправильно.

ФигураЧто означаетПример надписиВ Python
Овал (скруглённый прямоугольник)Начало или конец алгоритма«Начало», «Конец»первая и последняя строка
ПрямоугольникДействие, вычислениеs = a + bs = a + b
РомбУсловие, проверкаa > b ?if a > b:
ПараллелограммВвод или вывод данныхввод a, вывод sinput(), print()
СтрелкаПорядок выполнения—переход к следующей строке

Иногда встречается шестиугольник для цикла с переменной и прямоугольник с двойными боковыми линиями для вызова вспомогательного алгоритма. Учитель обычно говорит, какие обозначения блок-схем использует класс; если не уверены, стройте повторение через ромб — так поймёт любой.

Правила рисования схем

Чтобы схему мог прочитать другой человек, соблюдают 5 правил: один вход в начале, один выход в конце, движение сверху вниз, стрелки без пересечений и ровно два выхода у каждого ромба.

  1. Одно начало и один конец. Даже если путей несколько, они сходятся к одному овалу «Конец».
  2. Сверху вниз и слева направо. Стрелки, идущие в этих направлениях, можно рисовать без наконечника; обратные — обязательно со стрелкой.
  3. У ромба два выхода. Их подписывают «да» и «нет» (или «+» и «−»).
  4. Одно действие — одна фигура. Не стоит писать в прямоугольнике целый абзац.
  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 правилам из таблицы выше.

  1. Параллелограмм. Ввод — input() с преобразованием в число, вывод — print().
  2. Прямоугольник. Присваивание или вычисление.
  3. Ромб без возврата. Это if/else; действия веток пишутся с отступом.
  4. Ромб, к которому возвращается стрелка. Это while; всё внутри петли — тело цикла с отступом.

Отступы в Python — прямой аналог веток и петель на рисунке. Официальная документация Python объясняет, что тело условия и цикла определяется именно отступом[3], а не скобками, как в C++ или Паскале. Всё, что на схеме «внутри» ветки, в коде сдвинуто на 4 пробела, как рекомендует руководство PEP 8[2]. Руководство PEP 8 советует не смешивать табы и пробелы. Если отступ потерян, программа либо не запустится, либо выполнит действие не в той ветке.

Обратный перевод тоже полезен. Возьмите короткую программу из учебника и нарисуйте её фигурами: так проще понять чужой код, а ещё это хорошая подготовка к заданиям, где нужно определить, что выведет программа.

Как читать чужую схему: трассировка

Трассировка — это пошаговое выполнение алгоритма «на бумаге»: вы идёте по стрелкам и записываете в таблицу, как меняются переменные после каждой фигуры.

ШагФигураiВывод
1i = 11—
2i <= 3? — да11
3i = i + 12—
4i <= 3? — да22
5i = i + 13—
6i <= 3? — да, затем i = 4; i <= 3? — нет43

Такая таблица помогает найти ошибку, не запуская программу. Брэннан и Резник называют проверку и отладку одной из ключевых практик вычислительного мышления, а трассировка — самый простой её вариант[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 класса.