Пример блок-схемы с условием: хватит ли листов для печати
Пример блок-схемы с условием: задаём входные данные, рисуем две ветви, проверяем равенство и завершение алгоритма на задаче о листах для односторонней печати.
Андрей
Преподаватель, научный редактор
9 мин чтения
На шесть страниц у меня ровно шесть листов, а алгоритм сообщает: «Не хватает 0 листов». Так я заметил ошибку в сравнении: поставил «больше», хотя требовалось «больше или равно». Этот пример блок схемы с условием разберу полностью: от входных данных до двух исходящих ветвей и проверки завершения. Рисунок здесь начинается с точного правила.
Задача небольшая: определить, достаточно ли бумаги для односторонней печати документа. Если достаточно — сообщить об этом. Если нет — вычислить недостающее количество. На таком примере удобно увидеть, зачем ромбу нужны две подписанные стрелки и почему одного удачного набора чисел мало.
Сначала исправить правило, которое сломалось на равенстве
Обозначу число страниц через N, доступные листы — через M. Печатаем с одной стороны, без дополнительных обложек и пустых разделительных листов. Значит, на N страниц требуется N листов. Двусторонняя печать была бы другой задачей: её нельзя незаметно добавить в середине разбора.
Условия входа задаю сразу. N — целое число не меньше 1, M — целое неотрицательное число. Дробные листы, отрицательный запас и пустой документ в этот образец не входят. Перед запуском предполагаем, что данные соответствуют этим ограничениям. Если программа принимает произвольный ввод пользователя, проверку допустимости нужно проектировать отдельно.
Первое неудачное правило выглядело как M > N. При N = 6 и M = 6 оно ложно. Поэтому алгоритм попадал на ветку нехватки и вычислял N − M = 0. Само вычитание верно; ошибочно выбран переход к нему. Я поправил именно условие, а не стал прятать неудобный ответ дополнительной надписью.
Теперь вопрос в ромбе такой: M ≥ N? Равенство входит в положительную ветвь. Это соответствует задаче: если листов ровно столько, сколько страниц, печатать можно. Мне полезно сначала произнести это обычной фразой, а уже затем выбирать математический знак.
Что значит «условие ложно» в этой задаче?
Ложное условие не означает ошибку программы или недопустимый ввод. При N = 6 и M = 5 данные вполне допустимы: документ существует, листы посчитаны целыми числами. Просто утверждение «запас не меньше потребности» для них неверно. Поэтому выполняется предусмотренная отрицательная ветвь.
Я развожу три ситуации. Недопустимые данные нарушают начальные ограничения, например отрицательный запас. Ложное условие при допустимых данных выбирает обычную ветвь нехватки. Ошибка алгоритма возникает, когда схема не соответствует поставленному правилу, как в исходном варианте со строгим сравнением. Если называть всё это одной «ошибкой», трудно понять, нужно ли исправлять ввод, правило или стрелки.
Названия «Да» и «Нет» относятся только к вопросу в ромбе. Они не оценивают качество решения задачи. На ветке «Нет» алгоритм тоже успешно выполняет свою работу: сообщает, сколько листов нужно добавить. Поэтому я рисую её столь же подробно, как положительный маршрут.
Собрать пример блок-схемы с условием из семи блоков
Для рисунка я беру распространённые обозначения: начало и конец — овалы, ввод и вывод — параллелограммы, вычисление — прямоугольник, проверка — ромб. Это выбранная договорённость чтения схемы. Если в учебном задании задан иной стандарт оформления, согласуй обозначения с преподавателем.
Вот текстовый образец расположения блоков и связей, который можно перенести на бумагу или в редактор схем:
```text
Начало → Ввести N, M → M ≥ N?
├─ Да → Вывести «Листов достаточно» → Конец
└─ Нет → D = N − M
↓
Вывести «Не хватает D листов» → Конец
```
Оба слова «Конец» обозначают один общий конечный блок на рисунке. В него сходятся два маршрута. Всего нужно семь блоков: начало, ввод, условие, положительный вывод, вычисление D, отрицательный вывод и конец. При переносе текста в рисунок сохрани эти семь блоков и связи между ними.
Я сначала размечаю лист карандашом. Вверху ставлю начало, ниже ввод, затем ромб. Положительную ветвь увожу вправо, отрицательную продолжаю вниз. Общий конец размещаю так, чтобы обе стрелки были видимы и не проходили сквозь чужие блоки. Красивую симметрию оставляю на потом.
Внутри ромба нужен вопрос или логическое выражение. «Проверить бумагу» для меня слишком неопределённо: по такой надписи нельзя восстановить границу. Запись M ≥ N? позволяет однозначно выбрать выход для любых допустимых входных значений.
Подписать обе ветви и не потерять вычисление
Из ромба выходят две стрелки с подписями «Да» и «Нет». Подпись ставь рядом с началом соответствующей стрелки, чтобы читатель не гадал, к какому маршруту она относится. Условие может быть истинным или ложным; обе возможности должны вести к предусмотренному действию.
На ветке «Да» сразу выводим сообщение о достаточном запасе. Вычислять нехватку там не нужно. На ветке «Нет» сначала находим D = N − M, затем выводим сообщение с этим значением. Поскольку туда попадаем только при M < N, результат D положителен.
Я проверяю связи по короткому списку:
ввод соединён с условием;
у условия есть оба подписанных выхода;
вычисление D стоит только на ветке нехватки;
сообщение с D следует после вычисления;
каждый вывод ведёт к конечному блоку.
Не соединяй отрицательный вывод с началом только ради красивой замкнутой линии. Такая стрелка создаст повторение, которого в задаче нет. Мы один раз оцениваем запас для заданного документа. Если нужно многократно запрашивать новые данные, это уже цикл с собственным условием выхода.
Также не помещай два разных действия в один ромб. Запись «M ≥ N и вывести ответ» смешивает решение и результат. Я разделяю их, чтобы по схеме можно было восстановить порядок выполнения, а затем написать программу без дополнительных догадок.
У отрицательной ветви есть точное словесное объяснение: запас меньше потребности. Это M < N, а не M ≤ N. Во втором варианте равенство снова окажется описано неверно. Я выписываю рядом обе ситуации: «хватает, включая ровно нужное количество» и «не хватает хотя бы одного листа». Они охватывают все допустимые пары и не противоречат друг другу.
Ещё одна полезная проверка касается переменных. На входе уже должны быть известны оба числа; внутри ромба не нужно заново запрашивать запас. Если читатель доходит до условия и не знает M, на схеме пропущен ввод или не подписано его содержимое. Если в сообщении появляется D, но на выбранном пути его не вычисляли, это другая ошибка порядка. Я прослеживаю появление каждого обозначения от входа до использования, а не только читаю знакомую формулу вычитания.
Проверь себя: пример блок-схемы с условием на границе
Для приёмки я выбрал четыре набора. Они различаются отношением запаса к потребности. В таблице указаны ожидаемые действия алгоритма, рассчитанные по правилу односторонней печати:
N, страниц · M, листов · M ≥ N · Выбранный результат
6 — 6 — Да — Листов достаточно
6 — 5 — Нет — D = 1, не хватает одного листа
6 — 7 — Да — Листов достаточно
1 — 0 — Нет — D = 1, не хватает одного листа
Сначала прохожу строку с равенством. Она ловит исходную ошибку между > и ≥. Затем проверяю нехватку одного листа и излишек одного листа. Последняя строка показывает, что нулевой запас допустим, хотя страниц должно быть хотя бы одна.
Для самостоятельного прохода по рисунку:
Поставь палец на вход и запиши выбранные N и M.
В ромбе реши, истинно ли записанное сравнение.
Иди только по подписанной соответствующим ответом стрелке.
Вычисляй D лишь при попадании в его блок.
Запиши полученное сообщение и отметь достижение конца.
Я отдельно пересчитал эти случаи и дополнительно перебрал положительное число страниц от 1 до 10 при запасе от 0 до 10. При M < N нехватка всегда положительна, а при M ≥ N выбирается сообщение о достаточном запасе.
В ручной трассировке записывай посещённые блоки. Например, для N = 6, M = 5: ввод → ложное условие → вычисление 1 → сообщение о нехватке → конец. Если на рисунке этот маршрут выполнить невозможно, исправлять нужно стрелки, даже когда ответ в голове уже известен.
Дойти до конца, затем выбирать оформление
Алгоритм завершается для каждого допустимого набора данных. В нём нет возвратных стрелок, а после единственного сравнения выполняется одна из двух конечных последовательностей. На положительном пути после условия остаются вывод и конец; на отрицательном добавляется вычисление. Ни одна ветвь не зависает без продолжения.
Если хочешь превратить текстовый образец в изображение через LibraChat, сначала сравни условия для изображений. При оценке читаемости схемы учти: без оплаты доступно упрощённое изображение с водяным знаком, а полный платный тариф позволяет заказать HD-версию без знака. Для схемы всё равно придётся проверять знаки и направление стрелок. Выбор качества этого не отменяет.
Я предпочитаю начинать с разбора логики. Открой чат LibraChat и попробуй поставить задачу так:
Проверь алгоритм: N — положительное целое число страниц, M — целое число доступных листов не меньше нуля. Печать односторонняя. Если M ≥ N, выводим «Листов достаточно», иначе вычисляем D = N − M и выводим нехватку. Пройди N = 6, M = 6 и N = 6, M = 5. Перечисли блоки каждого пути и объясни завершение. Пока нужен текстовый разбор.
Сравни объяснение со своей трассировкой. LibraChat помогает разбирать задачи и формулировки, но ответ не подтверждает автоматически все связи будущего рисунка. После переноса в редактор я снова прохожу обе ветви уже по нарисованным стрелкам.
Вернуться к исходной ошибке одним контрольным проходом
Для следующего этапа пригодится разбор блок-схемы через нейросеть: там продолжается работа с обрывами и оформлением схем. Мой текущий образец можно оставить и в виде аккуратного ручного рисунка. Главное требование к нему уже известно: читать его без устных поправок автора.
Покажи схему человеку и дай ровно шесть листов на шесть страниц. Пусть он выберет выход из ромба и дойдёт до сообщения. Если результат снова требует объяснения «здесь я имел в виду другое», знак или стрелка ещё не передают правило.
Я теперь начинаю проверку с равенства, а не с большого запаса бумаги. На удобном примере неверное сравнение легко выглядит правильным. Граница показывает, что именно алгоритм считает достаточным, и помогает закончить схему до того, как начнётся её оформление.