Блок-схема

Материал из Википедии — свободной энциклопедии
(перенаправлено с «Блок-схема алгоритма»)
Перейти к навигации Перейти к поиску
Пример блок-схемы расчета факториала с использованием цикла
Пример блок-схемы расчета факториала с использованием цикла

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

Основные элементы схем алгоритма

[править | править код]

При начертании элементов рекомендуется придерживаться строгих размеров, определяемых двумя значениями a и b. Значение a выбирается из ряда 15, 20, 25.. мм, b рассчитывается из соотношения 2⋅a = 3⋅b. Определение размеров несёт рекомендательный характер, однако, при соблюдении выполнения размеров блок-схемы имеют более аккуратный вид.

Символ отображает функцию обработки данных любого вида (выполнение определённой операции или группы операций, приводящее к изменению значения, формы или размещения информации или к определению, по которому из нескольких направлений потока следует двигаться).

Данные (ввод-вывод)

[править | править код]

Символ отображает данные, носитель данных не определён.

Преобразование данных в форму, пригодную для обработки (ввода) или отображения результатов обработки (вывода). Данный символ не определяет носителя данных (для указания типа носителя данных используются специфические символы).

Предопределённый процесс (функция)

[править | править код]

Символ отображает предопределённый процесс, состоящий из одной или нескольких операций или шагов программы, которые определены в другом месте (в подпрограмме, модуле). Например, в программировании − вызов процедуры или функции.

Вопрос (условие или решение)

[править | править код]

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

Отображает решение или функцию переключательного типа с одним входом и двумя или более альтернативными выходами, из которых только один может быть выбран после вычисления условий, определённых внутри этого элемента. Вход в элемент обозначается линией, входящей обычно в верхнюю вершину элемента. Если выходов два или три, то обычно каждый выход обозначается линией, выходящей из оставшихся вершин (боковых и нижней). Если выходов больше трёх, то их следует показывать одной линией, выходящей из вершины (чаще нижней) элемента, которая затем разветвляется. Соответствующие результаты вычислений могут записываться рядом с линиями, отображающими эти пути. Примеры решения: в общем случае — сравнение (три выхода: >, <, =); в программировании — условные операторы if (два выхода: true, false) и case (множество выходов).

Ограничитель

[править | править код]

Символ отображает вход из внешней среды и выход во внешнюю среду (начало или конец схемы программы, внешнее использование и источник или пункт назначения данных).

На практике имеют смысл следующие описания ограничителей: начало/конец, запуск/останов, перезапуск (подразумевает перезапуск данной блок-схемы), ошибка (подразумевает завершение алгоритма с ошибкой), исключение (подразумевает исполнение программного исключения)

Проверка введенных данных с возможной ошибкой
Проверка введенных данных с возможной ошибкой

Символ, состоящий из двух частей, отображает начало и конец цикла. Обе части символа имеют один и тот же идентификатор. Условия для инициализации, приращения, завершения и т. д. помещаются внутри символа в начале или в конце в зависимости от расположения операции, проверяющей условие.

Пример блок-схемы расчёта факториала с использованием цикла

[править | править код]
Пример блок-схемы расчета факториала с использованием цикла Арсений Мажарцев.
Пример блок-схемы расчета факториала с использованием цикла Арсений Мажарцев.

Пример вложенных циклов

[править | править код]
Пример вложенных циклов в блок-схемах
Пример вложенных циклов в блок-схемах

Соединитель

[править | править код]

Символ отображает выход в часть схемы и вход из другой части этой схемы и используется для обрыва линии и продолжения её в другом месте. Соответствующие символы-соединители должны содержать одно и то же уникальное обозначение.

Разделение алгоритма на две части с использованием соединителей

[править | править код]

var s1, s2: string; i:=1; e:=0; begin

  writeln('Регистрация нового пользователя');
  while i<>4 do begin
  e:=0;
     write('Введите ');
     case i of
       1: writeln('Фамилию');
       2: writeln('Имя');
       3: writeln('Отчество');
     end;
     readln(s1);
     if Length(s1)=1 then begin
       writeln('Ошибка: Длина слова меньше 2х букв');
       continue
     end;
     if (Ord(s1[1])<192) or (Ord(s1[1])>223) then begin
       writeln('Ошибка: Слово должно начинаться с русской заглавной буквы');
       continue
     end;
     for var j:=2 to Length(s1) do begin
       if (Ord(s1[j])<223) or (Ord(s1[j])>255) then begin
         writeln('Ошибка: Встречен неверный знак ',s1[j]);
         e:=1;
         break
       end;
     end;
     if e<>0 then continue;
     i:=i+1;
     s2:=s2+s1+' ';
  end;
  writeln('Здравствуйте, ',s2);

end.

Комментарий

[править | править код]

Символ используют для добавления описательных комментариев или пояснительных записей в целях объяснения или примечаний. Пунктирные линии в символе комментария связаны с соответствующим символом или могут обводить группу символов. Текст комментариев или примечаний должен быть помещён около ограничивающей фигуры.

Также символ комментария следует использовать в тех случаях, когда объём текста, помещаемого внутри некоего символа (например, символ процесса, символ данных и др.), превышает размер самого этого символа. Комментарии используют совместно с терминаторами для описания входных аргументов алгоритма при описании функций.

var s1, s2: string; i:=1; e:=0; begin

  writeln('Регистрация нового пользователя');
  while i<>4 do begin
  e:=0;
     write('Введите ');
     case i of
       1: writeln('Фамилию');
       2: writeln('Имя');
       3: writeln('Отчество');
     end;
     readln(s1);
     if Length(s1)=1 then begin
       writeln('Ошибка: Длина слова меньше 2х букв');
       continue
     end;
     if (Ord(s1[1])<192) or (Ord(s1[1])>223) then begin
       writeln('Ошибка: Слово должно начинаться с русской заглавной буквы');
       continue
     end;
     for var j:=2 to Length(s1) do begin
       if (Ord(s1[j])<223) or (Ord(s1[j])>255) then begin
         writeln('Ошибка: Встречен неверный знак ',s1[j]);
         e:=1;
         break
       end;
     end;
     if e<>0 then continue;
     i:=i+1;
     s2:=s2+s1+' ';
  end;
  writeln('Здравствуйте, ',s2);

end.

Параллельные действия

[править | править код]

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

Параллельные действия могут быть использованы для асинхронных процессов или для процессов, последовательность которых не важна. В представленном примере стоит обратить внимание, что созданные в одних параллельных линиях процессы не обязаны также параллельно заканчиваться.

Описание других элементов схем можно найти в соответствующих ГОСТ[1]. Среди элементов существуют:

  • Запоминаемые данные
  • Документ
  • Ручной ввод
  • Карта
  • Дисплей
  • Передача управления
  • Альтернативная связь между двумя или более символами
  • и др.

Представление алгоритмов в виде графов

[править | править код]

Порядок выполнения действий задаётся путём соединения вершин дугами, что позволяет рассматривать блок-схемы не только как наглядную интерпретацию алгоритма, удобную для восприятия человеком, но и как ориентированный граф (т. н. граф-схема алгоритма, ГСА). Подобное представление алгоритмов используется при построении систем логического управления, реализующих заданные управляющие алгоритмы, в задачах распараллеливания вычислений и так далее.

Распространённой и ошибочной практикой является попытка использования блок-схем для иллюстрации алгоритма на низком уровне (на уровне кода) — то есть попытка вписывать в блоки схемы фрагменты кода на каком-либо искусственном языке. Такой подход применим только к программам, организованным согласно структурному подходу, и не может отразить, к примеру, алгоритм, который реализуется во взаимодействии абстракций при объектно-ориентированном подходе. Для целей описания алгоритмов, взаимодействия частей системы и иллюстрации многих других сопутствующих вещей существует нотация UML [источник не указан 1495 дней].

Примечания

[править | править код]