Блок-схемы ветвлений (условного оператора) и циклов в Pascal
Создано: 10.04.2026
Блок-схемы используются для наглядного описания алгоритмов решения задач по программированию. Язык блок-схем состоит из различных простых геометрических фигур, каждая из которых обозначает свой тип действий, и соединяющих их однонаправленных стрелок, обозначающих поток выполнения программы.
Блок-схемы можно рисовать от руки на бумаге, в любом графическом редакторе, инструментами рисования офисных приложений. Также существует специализированное программное обеспечение для создания различных типов диаграмм, в том числе блок-схем. Одним из таких является draw.io. Все нижеследующие схемы нарисованы в этом приложении. Разработка и черчение блок-схем требует определенного навыка, поэтому этот урок носит в основном ознакомительный характер.
В блок-схеме всей программы часто встречаются характерные конструкции — это блок-схемы условных операторов (или ветвлений) и циклов. Полезно их изучить отдельно, до того как приступать к "чтению" блок-схем целых программ. Так блок-схема условного оператора if-else будет выглядеть примерно следующим образом:
Верхняя стрелка, направленная в ромб, обозначает вход в условный оператор. На языке блок-схем ромб — это проверка условия. Можно считать, в данном случае это заголовок условного оператора. От него отходят две стрелки. Одна подписана как "правда" и уходит в код тела if, другая — как "ложь" и уходит в код тела ветки else.
Тела веток условного оператора могут содержать не одно, а несколько или множество различных действий. Такие операции как присваивание, арифметические действия обозначаются прямоугольником. Поскольку схема выше обобщенная, то вместо конкретных действий, мы только показываем, что есть два разных блока кода, которые не могут исполняться одновременно. Но какой бы из них не отработал, стрелки из каждого идут в одно и то же место — к какой-то следующей команде после условного оператора, то есть не входящую в него.
В случае сокращенной версии условного оператора, когда тела else просто нет, соответствующая стрелка из ромба сразу уходит в основной поток выполнения программы.
Блок-схема цикла while похожа на таковую условного оператора. Однако из блока тела цикла стрелка уходит не за пределы циклического оператора, а опять в его заголовок, к проверке условия. Выход из цикла возможен только по "ложному пути".
Для цикла с постусловием, который в Паскале представлен оператором repeat...until..., поток выполнения обратный. Стрелка выходит не из условия–ромба и входит в тело–прямоугольник, а наоборот. Стрелка выходит из прямоугольника и входит в ромб. Выход из цикла осуществляется по стрелке "правда".
Блок-схема цикла for почти дублирует while. Однако в заголовке for используется не условие, а скорее задается диапазон значений для переменной счетчика, то есть выполняются подготовительные действия для цикла, что обозначается удлиненным шестиугольником, а не ромбом. Условием продолжения цикла является попадание текущего значения счетчика в заданный диапазон. Уместно сказать "да", если попадает, и "нет", если значение вышло за пределы.
Следует иметь в виду, что блоки схемы можно располагать в пространстве как угодно, ориентируясь на удобство восприятия алгоритма той или иной программы. Например, блок-схему for можно изобразить и так:
Полная блок-схема программы состоит не только из условных операторов и циклов. Поэтому к рассмотренным ранее фигурам (прямоугольнику, ромбу и шестиугольнику) добавляются другие. Так блоки входа в программу и выхода из нее обозначаются овалами, блоки ввода и вывода — скошенными прямоугольниками. Есть и другие фигур для действий, которые нам пока не знакомы. Язык блок-схем имеет вариации, не является строгим. Так ввод и вывод могут обозначаться по-разному.
Если блок-схема разрабатывается для программы на определенном языке программирования, то каждое действие описывается отдельным блоком, то есть в теле составного оператора появляется несколько фигур. В них можно написать сами операции и выражения. Вспомним программу из прошлого урока, которая находит делители числа:
var i, n, q: integer; begin readln(n); q := 0; for i:=2 to n div 2 do if n mod i = 0 then begin write(i, ' '); q := q + 1; end; writeln('(всего делителей: ', q, ')'); end.
165 3 5 11 15 33 55 (всего делителей: 6)
Блок-схема для нее с выражениями на языке Pascal в геометрических примитивах может быть такой:
Здесь показан пример вложения ветвления в цикл. При этом обе ветви условного оператора в конечном итоге возвращаются снова к заголовку цикла.
Изучите представленную ниже блок-схему. В ней имеются некоторые неизвестные, которые обозначены знаком вопроса. Догадайтесь, что там должно быть, и напишите по данной схеме программу.
Задания для дополнительной или самостоятельной работы:
Вспомните программу, которая запрашивает неотрицательное число до тех пор, пока оно не будет введено (исходный вводимый тип данных — строка), после этого вычисляет его квадратный корень. Разработайте блок-схему этой программы.