Блок-схема
![Пример блок-схемы расчета факториала с использованием цикла](http://upload.wikimedia.org/wikipedia/commons/thumb/b/bb/%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80_-_%D0%A0%D0%B0%D1%81%D1%87%D0%B5%D1%82_%D1%84%D0%B0%D0%BA%D1%82%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D0%B0.svg/250px-%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80_-_%D0%A0%D0%B0%D1%81%D1%87%D0%B5%D1%82_%D1%84%D0%B0%D0%BA%D1%82%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D0%B0.svg.png)
Схе́ма — графическое представление определения, анализа или метода решения задачи, в котором используются символы для отображения данных, потока, оборудования и т. д.[1]
Блок-схема — распространенный тип схем (графических моделей), описывающих алгоритмы или процессы, в которых отдельные шаги изображаются в виде блоков различной формы, соединенных между собой линиями, указывающими направление последовательности. Правила выполнения регламентируются ГОСТ 19.701-90 «Схемы алгоритмов, программ, данных и систем. Условные обозначения и правила выполнения»[1]. Стандарт в частности регулирует способы построения схем и внешний вид их элементов.
Содержание
1 Основные элементы схем алгоритма
1.1 Действие
1.2 Данные
1.3 Предопределенный процесс
1.4 Вопрос
1.5 Ограничитель
1.6 Цикл
1.6.1 Пример блок-схемы расчета факториала с использованием цикла
1.6.2 Пример вложенных циклов
1.7 Соединитель
1.7.1 Разделение алгоритма на две части с использованием соединителей
1.8 Комментарий
1.9 Параллельные действия
2 Представление алгоритмов в виде графов
3 Критика
4 См. также
5 Примечания
Основные элементы схем алгоритма |
При начертании элементов рекомендуется придерживаться строгих размеров, определяемых двумя значениями a и b. Значение a выбирается из ряда 15, 20, 25.. мм, b рассчитывается из соотношения 2a = 3b. Определение размеров несет рекомендательный характер, однако, стоит отметить, что при соблюдении выполнения размеров блок-схемы имеют более аккуратный вид.
Действие |
Символ отображает функцию обработки данных любого вида (выполнение определенной операции или группы операций, приводящее к изменению значения, формы или размещения информации или к определению, по которому из нескольких направлений потока следует двигаться).
![Элементы - Процесс.svg](http://upload.wikimedia.org/wikipedia/commons/thumb/d/dc/%D0%AD%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B_-_%D0%9F%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81.svg/350px-%D0%AD%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B_-_%D0%9F%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81.svg.png)
Данные |
Символ отображает данные, носитель данных не определен.
![Элементы - Данные.svg](http://upload.wikimedia.org/wikipedia/commons/thumb/7/7c/%D0%AD%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B_-_%D0%94%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5.svg/350px-%D0%AD%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B_-_%D0%94%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5.svg.png)
Преобразование данных в форму, пригодную для обработки (ввод) или отображения результатов обработки (вывод). Данный символ не определяет носителя данных (для указания типа носителя данных используются специфические символы).
Предопределенный процесс |
Символ отображает предопределенный процесс, состоящий из одной или нескольких операций или шагов программы, которые определены в другом месте (в подпрограмме, модуле). Например, в программировании − вызов процедуры или функции.
![Элементы - Подпрограмма.svg](http://upload.wikimedia.org/wikipedia/commons/thumb/a/a9/%D0%AD%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B_-_%D0%9F%D0%BE%D0%B4%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0.svg/350px-%D0%AD%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B_-_%D0%9F%D0%BE%D0%B4%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0.svg.png)
Вопрос |
Символ отображает решение или функцию переключательного типа, имеющую один вход и ряд альтернативных выходов, один и только один из которых может быть активизирован после вычисления условий, определенных внутри этого символа. Соответствующие результаты вычисления могут быть записаны по соседству с линиями, отображающими эти пути.
![Элементы - Условие.svg](http://upload.wikimedia.org/wikipedia/commons/thumb/4/4e/%D0%AD%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B_-_%D0%A3%D1%81%D0%BB%D0%BE%D0%B2%D0%B8%D0%B5.svg/625px-%D0%AD%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B_-_%D0%A3%D1%81%D0%BB%D0%BE%D0%B2%D0%B8%D0%B5.svg.png)
Отображает решение или функцию переключательного типа с одним входом и двумя или более альтернативными выходами, из которых только один может быть выбран после вычисления условий, определенных внутри этого элемента. Вход в элемент обозначается линией, входящей обычно в верхнюю вершину элемента. Если выходов два или три, то обычно каждый выход обозначается линией, выходящей из оставшихся вершин (боковых и нижней). Если выходов больше трех, то их следует показывать одной линией, выходящей из вершины (чаще нижней) элемента, которая затем разветвляется. Соответствующие результаты вычислений могут записываться рядом с линиями, отображающими эти пути. Примеры решения: в общем случае − сравнение (три выхода: >
, <
, =
); в программировании − условные операторы if
(два выхода: true
, false
) и case
(множество выходов).
Ограничитель |
Символ отображает вход из внешней среды и выход во внешнюю среду (начало или конец схемы программы, внешнее использование и источник или пункт назначения данных).
![Элементы - Терминатор.svg](http://upload.wikimedia.org/wikipedia/commons/thumb/f/f7/%D0%AD%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B_-_%D0%A2%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%B0%D1%82%D0%BE%D1%80.svg/350px-%D0%AD%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B_-_%D0%A2%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%B0%D1%82%D0%BE%D1%80.svg.png)
На практике имеют смысл следующие описания ограничителей: начало/конец, запуск/останов, перезапуск (подразумевает перезапуск данной блок-схемы), ошибка (подразумевает завершение алгоритма с ошибкой), исключение (подразумевает исполнение программного исключения)
![Проверка введенных данных с возможной ошибкой](http://upload.wikimedia.org/wikipedia/commons/thumb/f/fe/%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80_-_%D0%A2%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%B0%D1%82%D0%BE%D1%80%D1%8B_-_%D0%9F%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85.svg/250px-%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80_-_%D0%A2%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%B0%D1%82%D0%BE%D1%80%D1%8B_-_%D0%9F%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85.svg.png)
Цикл |
Символ, состоящий из двух частей, отображает начало и конец цикла. Обе части символа имеют один и тот же идентификатор. Условия для инициализации, приращения, завершения и т. д. помещаются внутри символа в начале или в конце в зависимости от расположения операции, проверяющей условие.
![Элементы - Цикл.svg](http://upload.wikimedia.org/wikipedia/commons/thumb/f/f6/%D0%AD%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B_-_%D0%A6%D0%B8%D0%BA%D0%BB.svg/350px-%D0%AD%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B_-_%D0%A6%D0%B8%D0%BA%D0%BB.svg.png)
Пример блок-схемы расчета факториала с использованием цикла |
![Пример блок-схемы расчета факториала с использованием цикла](http://upload.wikimedia.org/wikipedia/commons/thumb/b/bb/%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80_-_%D0%A0%D0%B0%D1%81%D1%87%D0%B5%D1%82_%D1%84%D0%B0%D0%BA%D1%82%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D0%B0.svg/250px-%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80_-_%D0%A0%D0%B0%D1%81%D1%87%D0%B5%D1%82_%D1%84%D0%B0%D0%BA%D1%82%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D0%B0.svg.png)
Пример вложенных циклов |
![Пример вложенных циклов в блок-схемах](http://upload.wikimedia.org/wikipedia/commons/thumb/7/78/%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80_-_%D0%92%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D1%86%D0%B8%D0%BA%D0%BB%D1%8B.svg/250px-%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80_-_%D0%92%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D1%86%D0%B8%D0%BA%D0%BB%D1%8B.svg.png)
Соединитель |
Символ отображает выход в часть схемы и вход из другой части этой схемы и используется для обрыва линии и продолжения ее в другом месте. Соответствующие символы-соединители должны содержать одно и то же уникальное обозначение.
![Элементы - Соединитель.svg](http://upload.wikimedia.org/wikipedia/commons/thumb/8/88/%D0%AD%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B_-_%D0%A1%D0%BE%D0%B5%D0%B4%D0%B8%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C.svg/475px-%D0%AD%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B_-_%D0%A1%D0%BE%D0%B5%D0%B4%D0%B8%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C.svg.png)
Разделение алгоритма на две части с использованием соединителей |
![Пример - Применение соединителей.svg](http://upload.wikimedia.org/wikipedia/commons/thumb/b/bb/%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80_-_%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81%D0%BE%D0%B5%D0%B4%D0%B8%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%B9.svg/250px-%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80_-_%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81%D0%BE%D0%B5%D0%B4%D0%B8%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%B9.svg.png)
Комментарий |
Символ используют для добавления описательных комментариев или пояснительных записей в целях объяснения или примечаний. Пунктирные линии в символе комментария связаны с соответствующим символом или могут обводить группу символов. Текст комментариев или примечаний должен быть помещен около ограничивающей фигуры.
![Элементы - Комментарий.svg](http://upload.wikimedia.org/wikipedia/commons/thumb/6/62/%D0%AD%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B_-_%D0%9A%D0%BE%D0%BC%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%80%D0%B8%D0%B9.svg/425px-%D0%AD%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B_-_%D0%9A%D0%BE%D0%BC%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%80%D0%B8%D0%B9.svg.png)
Также символ комментария следует использовать в тех случаях, когда объём текста, помещаемого внутри некоего символа (например, символ процесса, символ данных и др.), превышает размер самого этого символа.
Комментарии используют совместно с терминаторами для описания входных аргументов алгоритма при описании функций
![Пример - Входные переменные.svg](http://upload.wikimedia.org/wikipedia/commons/thumb/f/f3/%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80_-_%D0%92%D1%85%D0%BE%D0%B4%D0%BD%D1%8B%D0%B5_%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5.svg/350px-%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80_-_%D0%92%D1%85%D0%BE%D0%B4%D0%BD%D1%8B%D0%B5_%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5.svg.png)
Параллельные действия |
Символ представляется двумя параллельными линиями, отображает синхронизацию двух или более параллельных операций. В случае входа нескольких операций в параллельные линии, выполнение алгоритма будет продолжено только в случае окончания всех входящих процессов.
![Пример - Параллельные действия.svg](http://upload.wikimedia.org/wikipedia/commons/thumb/5/56/%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80_-_%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B4%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%B8%D1%8F.svg/500px-%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80_-_%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B4%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%B8%D1%8F.svg.png)
Параллельные действия могут быть использованы для асинхронных процессов или для процессов, последовательность которых не важна. В представленном примере стоит обратить внимание, что созданные в одних параллельных линиях процессы не обязаны также параллельно заканчиваться.
Описание других элементов схем можно найти в соответствующих ГОСТ[1]. Среди элементов существуют:
- Запоминаемые данные
- Документ
- Ручной ввод
- Карта
- Дисплей
- Ручная операция
- Передача управления
- Альтернативная связь между двумя или более символами
- и др.
Представление алгоритмов в виде графов |
Порядок выполнения действий задается путём соединения вершин дугами, что позволяет рассматривать блок-схемы не только как наглядную интерпретацию алгоритма, удобную для восприятия человеком, но и как взвешенный ориентированный граф (т. н. граф-схема алгоритма, ГСА). Подобное представление алгоритмов используется при построении систем логического управления, реализующих заданные управляющие алгоритмы, в задачах распараллеливания вычислений и т. д.
Критика |
Распространённой и ошибочной практикой является попытка использования блок-схем для иллюстрации алгоритма на низком уровне (на уровне кода) — то есть, попытка вписывать в блоки схемы фрагменты кода на каком-либо искусственном языке. Такой подход применим только к программам, организованным согласно структурному подходу, и не может отразить, к примеру, алгоритм, который реализуется во взаимодействии абстракций при объектно-ориентированном подходе. Для целей описания алгоритмов, взаимодействия частей системы и иллюстрации многих других сопутствующих вещей существует нотация UML.
См. также |
.mw-parser-output .ts-Родственные_проекты{background:#f8f9fa;border:1px solid #a2a9b1;clear:right;float:right;font-size:90%;margin:0 0 1em 1em;padding:.5em .75em}.mw-parser-output .ts-Родственные_проекты th,.mw-parser-output .ts-Родственные_проекты td{padding:.25em 0;vertical-align:middle}.mw-parser-output .ts-Родственные_проекты td{padding-left:.5em}
![]() | Блок-схема на Викискладе |
---|
- Диаграмма Насси — Шнейдермана
- Диаграмма связей
- Псевдокод (язык описания алгоритмов)
Примечания |
↑ 123 ГОСТ 19.701-90. Схемы алгоритмов, программ, данных и систем. Условные обозначения и правила выполнения
![]() | Это заготовка статьи о компьютерах. Вы можете помочь проекту, дополнив её. Это примечание по возможности следует заменить более точным. |
![]() | Для улучшения этой статьи по информационным технологиям желательно: |