Справочное руководство по составлении алгоритмов

Что лучше для российского образования: дракон-схемы или блок-схемы по гост 19.701—90?

Многие авторы высказываются в поддержку языка ДРАКОН.

«Визуальный язык ДРАКОН образует наглядную среду для первоначального обучения программированию и мог бы быть весьма полезен при организации школьных курсов информатики» [85].

«Блок-схемы, нарисованные по правилам языка ДРАКОН, отличаются поразительной четкостью, наглядностью и прозрачностью структуры. А наглядность и доходчивость алгоритмов — это именно то, чего так остро недостает школьным учебникам» [86].

«ДРАКОН — это … эргономичный стандарт для графического представления учебной информации… Язык ДРАКОН учит нас, методистов и учителей правильному составлению блок-схем… Насколько я знаю, нет другой литературы, где тому же самому можно научиться настолько просто и даже увлекательно» [87].

«Язык усовершенствованных графических схем ДРАКОН обеспечивает разработку сложных алгоритмов с сохранением наглядности даже для многостраничных схем» [88].

«Алгоритмический язык ДРАКОН … используется в технике, биологии, медицине и образовании. Преимуществом этого языка является то, что схемы легко рисовать и понимать, они очень наглядны» [89].

«Язык ДРАКОН — удобный инструмент для записи и структурирования деятельности в виде алгоритмов…, дает глубокое понимание сложных проблем, позволяет проектировать сложную деятельность, бизнес-процессы, формализовать свои профессиональные знания» [90].

«Использование языка ДРАКОН и гибридных языков может позволить полностью отказаться от традиционного подхода к разработке ПО РК (программного обеспечения робототехнических комплексов — Авт.), снижая интеллектуальную нагрузку на разработчика алгоритма, исключая ошибки толкования исходных данных программистом … Но самое главное — это позволит резко сократить затраты на разработку ПО РК, что сделает роботов более доступными для потребителей самого разного уровня» [91].

Приведем также отзыв рядового пользователя, размещенный в сети Интернет участником с ником dvuugl:

«Если нужно рисовать алгоритм, теперь только и только на Драконе. Считаю, что он должен стать государственным стандартом для блок-схем вместо существующего. Удивительно, что авторы книг продолжают использовать прежние схемы, на которые после Дракона без ужаса смотреть невозможно».

В то же время, несмотря на явное преимущество дракон-схем, в большинстве российских школ и вузов язык ДРАКОН не изучают, предпочитая устаревшие блок-схемы. Причина проста: блок-схемы опираются на авторитет стандартов ГОСТ 19.701—90 и ISO 5807:1985, а дракон-схемы такой поддержки не имеют.

Основные элементы, использующиеся при проектировании блок-схем

Название элемента

Графическое отображение

Функция

1

Терминатор или блок начало-конец

Элемент-терминатор

Обозначает начало или конец программы. Данный блок отделяет границы программы от внешней среды. Как правило, в данный элемент вписывают фразы «Начало», «Старт» или «Конец», «Финиш».

2

Блок команды, процесса, действия

Элемент-процесс

Данный блок отвечает за выполнение одной или нескольких операций. Как правило, в данный элемент блок-схемы вписывают команды, которые меняют данные, значения переменных. Например, арифметическая операция над двумя переменными будет записана в данном блоке.

3

Блок логического условия

Элемент логическое условие

Напомню, что результатом логического условия всегда является одно из двух предопределенных значения: истина или ложь. Внутри данного элемента-ромба записывается логическое условие, а из вершин ромба выходят альтернативные ветви решения. Обязательно следует подписывать ветви словами «Да», «Нет», чтобы не вводить в заблуждение читателя блок-схемы.

4

Предопределенный процесс

Элемент предопределенный процесс

Если ваша программа предусматривает наличие подпрограмм: процедур или функций, то вызов подпрограммы записывается внутри данного элемента.

5

Блок ввода-вывода данных

Элемент данные

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

6

Блок цикла со счетчиком

Блок цикла for

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

7

Парный блок для циклов с пред- и постусловием

Элемент парный блок для циклов

Данный блок состоит из двух частей. Операции тела цикла размещаются между ними. Заголовок цикла и изменения счетчика цикла записываются внутри верхнего или нижнего блока – в зависимости от архитектуры цикла.

8

Соединитель

Элемент-соединитель

Применяется для обрыва линии связи между элементами блок-схемы. Например, если вы строите масштабную блок-схему на листе формата А4, и она не помещается на один лист, то вам придется осуществить перенос блок-схемы на второй лист. В этом случае необходимо будет воспользоваться данным соединителем. Как правило, внутри окружности указываются уникальный идентификатор, который является натуральным числом.

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

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

Основные алгоритмические конструкции

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

Алгоритмы в зависимости от цели, начальных условий задачи, путей ее решения, определения действий исполнителя подразделяются следующим образом:

Линейный алгоритм — набор команд (указаний), выполняемых последовательно друг за другом.

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

Рассмотрим пример. В школьном учебнике математики правила деления обыкновенных дробей описаны так:

  1. Числитель первой дроби умножить на знаменатель второй дроби.
  2. Знаменатель первой дроби умножить на числитель второй дроби.
  3. Записать дробь, числитель которой есть результат выполнения пункта 1, а знаменатель — результат выполнения пункта 2.

В алгебраической форме это выглядит следующим образом:

Построим алгоритм деления дробей для ЭВМ. В этом алгоритме сохраним те же обозначения для переменных, которые использованы в записанной выше формуле. Исходными данными являются целочисленные переменные а, Ь, с, d. Результатом — также целые величины m и n. Блок-схема и текст алгоритма на языке программирования (ЯП) Kotlin приведены ниже.

Формат команды присваивания следующий:

Знак «=» нужно читать как «присвоить».

Команда присваивания обозначает следующие действия, выполняемые компьютером:

  1. Вычисляется выражение.
  2. Полученное значение присваивается переменной.

В приведенном выше алгоритме присутствуют две команды присваивания. В блок-схемах команда присваивания записывается в прямоугольнике. Такой блок называется вычислительным блоком.

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

В приведенном алгоритме присутствуют команды ввода:

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

Полученные компьютером результаты решения задачи должны быть сообщены пользователю. Для этих целей предназначена команда вывода:

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

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

Рассмотрим последовательное выполнение четырех команд присваивания, в которых участвуют две переменные величины a и b.

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

Командаab
a=11
b=a*212
a=b22
b=a b24

Этот пример иллюстрирует три основных свойства команды присваивания:

  • пока переменной не присвоено значение, она остается неопределенной;
  • значение, присвоенное переменной, сохраняется в ней вплоть до выполнения следующей команды присваивания этой переменной;
  • новое значение, присваиваемое переменной, заменяет ее предыдущее значение.

Рассмотрим один очень полезный алгоритм, который приходится часто использовать при программировании. Даны две величины: Х и Y. Требуется произвести между ними обмен значениями. Например, если первоначально было Х=1, Y=2, то после обмена должно стать: Х=2, Y=1.

Хорошей моделью для решения этой задачи является следующая ситуация: имеются два стакана — один с молоком, другой с водой. Требуется произвести обмен их содержимым. Всякому ясно, что в этом случае нужен дополнительный третий пустой стакан. Последовательность действий будет следующей: 1) перелить из первого стакана в третий; 2) перелить из второго в первый;
3) перелить из третьего во второй. Цель достигнута!

По аналогии для обмена значениями двух переменных нужна третья дополнительная переменная. Назовем ее Z. Тогда задача обмена решается последовательным выполнением трех команд присваивания:

КомандаXYZ
ввод X, Y12
Z = X121
X = Y221
Y = Z211

Аналогия со стаканами не совсем точна в том смысле, что при переливании из одного стакана в другой первый становится пустым. В результате же присваивания (Х = Y) переменная, стоящая справа (Y), сохраняет свое значение.

Алгоритм для деления дробей имеет линейную структуру. В нем все команды выполняются в строго однозначной последовательности, каждая по одному разу. Линейный алгоритм составляется из команд присваивания, ввода, вывода и обращения к вспомогательным алгоритмам (об этом позже).

При описании алгоритмов в блок-схемах типы, как правило, не указываются (но подразумеваются). В алгоритмах для всех переменных типы указываются явно. В них используются следующие обозначения типов: Int — целый тип, Float — вещественный тип, String — символьный (литерный) тип, Boolean — логический тип. В алгоритме для деления дробей для всех переменных указан тип Int.

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

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

Составим алгоритм решения квадратного уравнения: ax2 bx c=0

Задача хорошо знакома из математики. Исходными данными здесь являются коэффициенты а, b, с. Решением в общем случае будут два корня х1 и х2, которые вычисляются по формуле:

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

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

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

Решение уравнения зависит от значений коэффициентов а, b, с. Вот анализ рассмотренной выше задачи (ограничиваемся только поиском вещественных корней):

если а = 0, b = 0, с = 0, то любое х — решение уравнения;если а = 0, b = 0, с <> О, то уравнение действительных решений не имеет;если а = 0, b <> О, то это линейное уравнение, которое имеет одно решение х = -c/b;если а<>

Этот же алгоритм на Kotlin:

В этом алгоритме многократно использована структурная команда ветвления. Общий вид команды ветвления в блок-схемах и на ЯП следующий:

Вначале проверяется условие (вычисляется отношение, логическое выражение). Если условие истинно, то выполняется серия 1 — последовательность команд, на которую указывает стрелка с надписью «да» (положительная ветвь). В противном случае выполняется серия 2 (отрицательная ветвь).

Если на ветвях одного ветвления содержатся другие ветвления, то такой алгоритм имеет структуру вложенных ветвлений. Именно такую структуру имеет алгоритм «Корни квадратного уравнения».

Рассмотрим следующую задачу: дано целое положительное число n. Требуется вычислить n! (n-факториал). Вспомним определение факториала:

Ниже приведена блок-схема алгоритма. В нем используются три переменные целого типа: n — аргумент; i — промежуточная переменная; F — результат. Для проверки правильности алгоритма построена трассировочная таблица. В такой таблице для конкретных значений исходных данных по шагам прослеживается изменение переменных, входящих в алгоритм. Данная таблица составлена для случая п = 3.

ШагnFiУсловие
13
21
31
41<=3, да
51
62
72<=3, да
82
93
103<=3, да
116
124
134<=3, нет
14вывод

Трассировка доказывает правильность алгоритма. Теперь запишем этот алгоритм на ЯП.

Этот алгоритм имеет циклическую структуру. В алгоритме использована структурная команда цикл-пока, или цикл с предусловием. Общий вид команды цикл-пока в блок-схемах и в ЯП следующий:

Выполнение серии команд (тела цикла) повторяется, пока условие цикла истинно. Когда условие становится ложным, цикл заканчивает выполнение.

Цикл с предусловием — это основная, но не единственная форма организации циклических алгоритмов. Другим вариантом является цикл с постусловием. Вернемся к алгоритму решения квадратного уравнения. К нему можно подойти с такой позиции:

если а = 0, то это уже не квадратное уравнение и его можно не рассматривать. В таком случае будем считать, что пользователь ошибся при вводе данных, и следует предложить ему повторить ввод. Иначе говоря, в алгоритме будет предусмотрен контроль достоверности исходных данных с предоставлением пользователю возможности исправить ошибку. Наличие такого контроля — еще один признак хорошего качества программы.

В общем виде структурная команда цикл с постусловием или цикл — до представляется так:

Здесь используется условие окончания цикла. Когда оно становится истинным, цикл заканчивает работу.

Составим алгоритм решения следующей задачи: даны два натуральных числа М и N. Требуется вычислить их наибольший общий делитель — НОД(M, N).

Эта задача решается с помощью метода, известного под названием алгоритма Евклида. Его идея основана на том свойстве, что если M>N, то НОД(М, N) = НОД(М-N,N). Другой факт, лежащий в основе алгоритма, тривиален — НОД(М, М) = М. Для «ручного» выполнения этот алгоритм можно описать в форме следующей инструкции:

  1. Если числа равны, то взять их общее значение в качестве ответа; в противном случае продолжить выполнение алгоритма
  2. Определить большее из чисел
  3. Заменить большее число разностью большего и меньшего значений
  4. Вернуться к выполнению пункта 1

Алгоритм имеет структуру цикла с вложенным ветвлением. Проделайте самостоятельно трассировку этого алгоритма для случая М = 18, N = 12. В результате получится НОД = 6, что, очевидно, верно.

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

В качестве примера рассмотрим следующую задачу: требуется составить алгоритм вычисления степенной функции с целым показателем у = хк, где к — целое число, х<>0. В алгебре такая функция определена следующим образом:

Для данной задачи в качестве подзадачи можно рассматривать возведение числа в целую положительную степень.

Учитывая, что 1/х-n = (1/х)-n, запишем основной алгоритм решения этой задачи.

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

В котлине вспомогательные алгоритмы оформляются в виде функций. Запишем функцию stepen.

Заголовок вспомогательного алгоритма начинается с ключевого слова fun, после которого следует имя функции, в скобках — список формальных параметров и после скобок тип результата (не обязателен). В списке параметров перечисляются переменные-аргументы с указанием их типов.

Здесь x и n — формальные параметры-аргументы. Следовательно, процедура stepen производит вычисления по формуле ак. В основном алгоритме «Степенная функция» обращение к процедуре производится путем указания ее имени с последующим в скобках списком фактических параметров. Между формальными и фактическими параметрами процедуры должны выполняться следующие правила соответствия:

  • по количеству (сколько формальных, столько и фактических параметров)
  • по последовательности (первому формальному соответствует первый фактический параметр, второму — второй и т.д.)
  • по типам (типы соответствующих формальных и фактических параметров должны совпадать)

Фактические параметры-аргументы могут быть выражениями соответствующего типа.

Обращение к процедуре инициирует следующие действия:

  1. Значения параметров-аргументов присваиваются соответствующим формальным параметрам.
  2. Выполняется тело процедуры (команды внутри процедуры).
  3. Значение результата возвращается командой return, и происходит переход к выполнению следующей команды основного алгоритма.

В функции stepen нет команд ввода исходных данных и вывода результатов. Здесь присваивание начальных значений аргументам (x, n) производится через передачу параметров-аргументов. А получение результата происходит командой return. Таким образом, передача значений параметров процедур — это третий способ присваивания (наряду с командой присваивания и командой ввода).

Использование процедур позволяет строить сложные алгоритмы методом последовательной детализации.

Анализ вложенного цикла пока (while)

Графическое изображение цикла должно быть удобным, стандартным и легко запоминающимся. В блок-схемах эта проблема не решена: нередко каждый автор изображает цикл по-своему, что запутывает читателей. Язык ДРАКОН предлагает стандартное начертание для каждого типа цикла.

Рис. 7 (слева). Плохая схема. Вложенный цикл ПОКА изображен без учета правил эргономики. Шампур разорван. Рис. 8 (справа). Хорошая (эргономичная) схема. Вложенный цикл ПОКА нарисован по правилам языка ДРАКОН

На рис. 7, 8 изображены блок-схема и дракон-схема вложенного цикла ПОКА (while). Блок-схема взята из учебного пособия.

На блок-схеме (см. рис. 7) можно указать следующие недочеты:

— между иконами E и K имеется разрыв шампура (нарушено правило, согласно которому один из путей, идущих от входа к выходу, должен проходить по главной вертикали); — ниже иконы Е через разрыв шампура проходят две нежелательные горизонтальные линии;— две петли обратной связи циклов ПОКА закручены по часовой стрелке (в дракон-схеме они закручены против часовой стрелки);— используются неудобные ромбы (в дракон-схеме их заменяют эргономичные иконы Вопрос);— используется 8 стрелок, из которых 6 — паразитные (в дракон-схеме всего 2 стрелки);

— имеется 2 избыточных изгиба линии (в блок-схеме 10 изгибов, в дракон-схеме — только 8);— в блок-схемах отсутствует графическая стандартизация циклов. В дракон-схемах стандартизация циклов строго соблюдается. Об этом можно судить по рис. 8. Голубая заливка окружает внутренний цикл ПОКА. Белая заливка окружает внешний цикл ПОКА.

Сравнивая рис. 7 и 8, легко убедиться, что дракон-схемы во всех отношениях лучше, чем блок-схемы.

Блок-схемы алгоритмов по гост 19.701-90

ГОСТ 19.701-90 является действующим, но морально устарел; он не годится для записи алгоритмов, так как не обеспечивает удобочитаемость сложных алгоритмов. Это объясняется тем, что концепция стандарта отстала от жизни и построена без учета идей когнитивной эргономики.

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

(2021) Паронджанов В. Д. Алгоритмические языки и программирование: ДРАКОН : учебное пособие для вузов. — Москва : Издательство Юрайт, 2021. — 436 с. — (Высшее образование). 

(2022) Паронджанов В. Д. Алгоритмы и жизнеритмы на языке ДРАКОН. Разработка алгоритмов. Безошибочные алгоритмы. — М., 2022. — 374 с. — Иллюстраций: 195.

(2022, 2022, 2022) Паронджанов В. Д. Учись писать, читать и понимать алгоритмы. Алгоритмы для правильного мышления. Основы алгоритмизации. — М.: ДМК Пресс, 2022, 2022, 2022. — 520 с.

(2022) Паронджанов В.Д. Почему врачи убивают и калечат пациентов, или Зачем врачу блок-схемы алгоритмов? Иллюстрированные алгоритмы диагностики и лечения — перспективный путь развития медицины. Клиническое мышление высокой точности и безопасность пациентов. / Предисл. члена-корр. РАН Г.В. Порядина. — М.: ДМК Пресс, 2022. — 340 с.

Статья содержит критику стандарта ГОСТ 19.701-90 и обоснование необходимости создания нового стандарта для представления алгоритмов.

Желающие могут посмотреть две статьи на Хабре по языку ДРАКОН: здесь и здесь.

Динамика валентных точек

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

Рассмотрим построение дракон-схемы силуэт (рис. 16).

Рис. 16. Размножение валентных точек (кружки) при проектировании дракон-схемы силуэт

В аксиоме-силуэт (рис. 16, слева) всего 3 валентных точки. После добавления к аксиоме ветки силуэта (рис. 16, в центре) получается уже 5 точек. А после вставки иконы Действие (рис. 16, справа) число точек увеличивается до 6. Дальнейший процесс построения силуэта приводит к монотонному росту числа валентных точек.

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

Все списки (списки валентных точек и списки разрешенных икон и макроикон) хранятся в памяти программы ДРАКОН-конструктор, который осуществляет визуальный логический вывод. Таким образом, описанная операция строго формализована и защищена от многих ошибок.

Дракон-схема алгоритма

Рис. 0. Пример дракон-схемы

На Рис. 0 показана дракон-схема, или дракон-алгоритм. Дракон-схема есть упорядоченная, правильно построенная блок-схема, наглядно показывающая все маршруты алгоритма.

На Рис. 0 хорошо видны особенности дракон-алгоритма:— Иконы Заголовок и Конец находятся на единой вертикали, которая называется шампур. По шампуру проходит главный (наиболее благоприятный) маршрут алгоритма.— Все вертикали (маршруты алгоритма) упорядочены слева направо по принципу “чем правее, тем хуже”.

— Шампур рисуют жирной (highlighted) линией. — Все иконы и соединительные линии расположены справа от шампура. Шампур занимает крайнюю левую вертикаль.— Пересечения линий запрещены.— Икона Заголовок всегда находится на фиксированном месте — вверху алгоритма.

Замечания

  1. Стандарт ГОСТ 19.701—90 не может обеспечить наглядность при вычерчивании сложных алгоритмов, так как концепция стандарта устарела и построена без учета идей когнитивной эргономики.

  2. Дракон-схемы принципиально отличаются от блок-схем тем, что подчиняются когнитивно-эргономическим правилам.

  3. В данной теме указаны эргономические недостатки блок-схем и описаны парные им достоинства дракон-схем.

  4. В зрительно-смысловой структуре алгоритма шампур играет важную роль. Шампур способен быстро и естественно привлечь к себе внимание читателя, правильно сориентировать его в структуре алгоритма.

  5. При отсутствии шампура уничтожается основа для выделения главного маршрута.

  6. Разрыв или отсутствие шампура делает зрительный образ алгоритма «бесформенным», лишенным композиционного центра. Читатель лишается необходимых зрительных ориентиров, что затрудняет чтение алгоритма.

  7. Зрительный образ алгоритма должен быть лаконичным. Все ненужные, лишние детали должны быть исключены.

  8. Схема должна содержать лишь те элементы, которые необходимы читателю для понимания смысла алгоритма и выявления ошибок.

  9. Чтобы схема была удобной для чтения, количество изгибов соединительных линий должно быть минимальным.

  10. Стрелки нужны только как признак цикла Стрелка. Стрелки, показывающие направление потока управления, следует удалить.

  11. Дракон-схемы созданы на основе блок-схем с целью их совершенствования. Дракон-схемы — это упорядоченные блок-схемы.

Ключевые элементы блок-схемы

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

Что такое схема? Схема – графическая интерпретация некоторого термина, события, анализа, действия, в котором применяются различные элементы для отображения данных.

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

Существует популярный ГОСТ, который описывает требования и правила выполнения блок-схем: ГОСТ 19.701-90. Схемы алгоритмов, программ, данных и систем. Условные обозначения и правила выполнения.

Критика блок-схем алгоритмов по гост 19.701-90

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

Образчик подобного мусора представлен на рис. 3. Этот «мусорный» алгоритм можно вылечить и превратить в изящную дракон-схему (рис. 4). Сравним: что было и что стало.

Рис. 3 (слева). Плохая схема. Такие схемы часто рисуют многие уважаемые ученые, забывающие об эргономике Рис. 4 (справа). Хорошая (эргономичная) схема. Она нарисована по правилам языка ДРАКОН

Схема на рис. 3 имеет много изъянов:— слева от иконы Ж есть пересечение линий (в дракон-схеме пересечения запрещены);— возле иконы Е имеется линия под углом 45° (в дракон-схеме наклонные линии не допускаются);— иконы Д, Е и Ж имеют более одного входа (в дракон-схеме это запрещено);

— иконы В, Д, Е, Ж имеют входы сбоку, что придает схеме неряшливый вид. В дракон-схеме вход разрешается только сверху, что упорядочивает алгоритм и создает в нем четкую ориентацию «сверху вниз»;— отсутствует шампур, так как выход иконы Заголовок и вход иконы Конец не лежат на одной вертикали.

Блок-схема на рис. 3, как и схема на Рис. 1, по всем параметрам проигрывает дракон-схеме. Мы убедились, что алгоритмическая красота достигается благодаря совокупному действию многих правил, каждое из которых, взятое по отдельности, выглядит скромным и будничным.

Литература

1. (1995) Паронджанов В. Д. Графический синтаксис языка ДРАКОН // Программирование.  1995, №3. С. 45-62.

2. (1998) Паронджанов В. Д. Как улучшить работу ума. (Новые средства для образного представления знаний, развития интеллекта и взаимопонимания). — М.: Радио и связь, 1998, 1999. — 352 с.

3. (2001) Паронджанов В. Д. Как улучшить работу ума. Алгоритмы без программистов — это очень просто. — М.: Дело, 2001. — 360 с.

4. (2009 (Паронджанов В. Д. Язык Дракон. Краткое описание. — М., 2009. — 124 с.

5. (2022) Паронджанов В. Д. Дружелюбные алгоритмы, понятные каждому. Как улучшить работу ума без лишних хлопот. — М.: ДМК-пресс, 2022, 2022, 2022. — 464 с.

Макроиконы развилка и цикл стрелка

Проведем анализ двух макроикон: Развилка и цикл Стрелка. Обе они содержат только одну икону — икону Вопрос, а также соединительные линии и валентные точки (рис. 19).

Рис. 19. Две макроиконы: Развилка и цикл Стрелка

Цикл Стрелка — пустой оператор, он служит заготовкой для построения реальных циклов с условием. Если заполнить верхнюю валентную точку, получим цикл ДО (do while). Если нижнюю — цикл ПОКА (while). Если обе — цикл do while do.

Макроикона Развилка — тоже пустой оператор. Если заполнить левую валентную точку, получим оператор ЕСЛИ (if). Если обе — оператор ЕСЛИ ТО (if else).

Теориямакроикон позволяет различать опасное и безопасное использование макроикон. Чтобы безопасно построить цикл с условием, следует использовать макроикону цикл Стрелка, но не Развилку.

Недопустимые действия

Опасность появляется тогда, когда пользователь пытается нарушить правила и переделать макроикону Развилка, превратив ее в цикл. Это можно сделать с помощью операции «Пересадка лианы» — нужно оторвать правый выход иконы Вопрос в валентной точке и пересадить его наверх в нужную точку, превратив в стрелку цикла. Однако в языке ДРАКОН так поступать запрещено, так как возникает опасность допустить ошибку.

Почему? Потому что речь идет об образовании нового цикла, аналогичного оператору goto, который реализует переход на оператор, расположенный выше (раньше) на чертеже ДРАКОН-алгоритма. Подобная операция в языке ДРАКОН считается небезопасной и недопустимой. Специалист по надежности программного обеспечения Гленфорд Майерс предостерегает:

«Наихудшим применением оператора goto считается переход на оператор, расположенный выше (раньше) в тексте программы».

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

Как избежать ошибки. В меню программы «ДРАКОН-конструктор» предусмотрена макроикона цикл Стрелка, предназначенная для безопасного создания циклов с условием. При этом угроза ошибок снимается.

Некорректное использование термина “алгоритм” в стандарте гост 19.701–90

Межгосударственный стандарт ГОСТ 19.701—90 (редакция 2022 года) получен методом прямого применения из международного стандарта ISO 5807:1985.

Но вот что удивительно. В оригинале ISO 5807:1985 термин algorithm отсутствует:

«Information processing — Documentation symbols and conventions for data, program and system flowcharts, program network charts and system resources charts»

А при локализации на русском языке термин алгоритм внезапно появляется:

СХЕМЫ АЛГОРИТМОВ, ПРОГРАММ, ДАННЫХ И СИСТЕМ
Обозначения условные и правила выполнения

При этом возникает некорректность (противоречие), так как в тексте стандарта ГОСТ 19.701—90 сказано:

1.3. В настоящем стандарте определены символы, предназначенные для использования в документации по обработке данных, и приведено руководство по условным обозначениям для применения их в:
1) схемах данных;
2) схемах программ;
3) схемах работы системы:
4) схемах взаимодействия программ;
5) схемах ресурсов системы

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

В оргинале противоречия нет, так как пункт 1.3 соответствует английскому тексту международного стандарта ISO 5807:85:

1 Scope and field of application
This International Standard specifies symbols to be used in information processing documentation and gives guidance on conventions for their use to:
a) data flowcharts,
b) program flowcharts,
c) system flowcharts,
d) program network charts,
e) system resources charts.

Алгоритмы — чрезвычайно важный термин и понятие. По моему мнению, необходимо выпустить отдельный самостоятельный стандарт на алгоритмы и убрать упоминание об алгоритмах из ГОСТ 19.701—90.

Пользователю запрещено рисовать соединительные линии

Во избежание ошибок разработчику алгоритма запрещено рисовать какие-либо линии на чертеже алгоритма.

Все линии автоматически рисует программа ДРАКОН-конструктор. Пользователь лишь управляет этим процессом, выбирая из меню нужные иконы (и макроиконы) и указывая на чертеже валентные точки, куда их нужно вставить.

ДРАКОН-конструктор, подчиняясь разумным указаниям пользователя (и отклоняя неразумные) автоматически применяет правила визуального логического вывода.

Тщательно разработанные и теоретически обоснованные правила построения дракон-алгоритма, учитывающие особенности зрительного восприятия, позволяют облегчить и ускорить понимание алгоритма.

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

Попробуйте ДРАКОН-конструктор DrakonHub. Вы убедитесь, что все соединительные линии он выполняет автоматически, причем без пересечений.

Предисловие

Данный материал представляет собой справочное руководство по составлении
алгоритмов, которые являются необходимой составной частью
контрольной и курсовой работы по дисциплине “Информатика”.

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

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

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

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

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

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

Проблема стандартизации представления алгоритмов

Стандарт графического представления алгоритмов (далее стандарт алгоритмов) есть единая система обозначений (единая нотация) для записи алгоритмов. В настоящее время проблема стандартизации алгоритмов не решена. На практике для записи алгоритмов применяются разнообразные средства: псевдокоды, блок-схемы (flowcharts), схемы деятельности (activity diagrams) языка UML, дракон-схемы (drakon-charts).

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

При выпуске документации на алгоритмы действует межгосударственный стандарт ГОСТ 19.701—90, полученный методом прямого применения из международного стандарта ISO 5807:1985. Проблема в том, что стандарты ГОСТ 19.701—90 и ISO 5807:1985 обладают существенными недостатками; они не удовлетворяют требованиям для записи алгоритмов.

Разрыв шампура — серьезная ошибка

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

Рис. 5 (слева). Плохая схема. В ней много эргономических ошибок, что затрудняет понимание алгоритма Рис. 6 (справа). Хорошая (эргономичная) схема. Она нарисована по правилам языка ДРАКОН

На рис. 5 представлена схема, взятая из источника, где она характеризуется как «стандартная блок-схема ANSI». Сравнение этой схемы с эквивалентной дракон-схемой на Рис. 6 позволяет выявить различные дефекты:

— ниже иконы G имеется разрыв шампура (нарушено правило, согласно которому один из путей, идущих от входа к выходу, должен проходить по главной вертикали);— икона G имеет два входа (в дракон-схеме разрешается только один вход);— икона G имеет вход сбоку (в дракон-схеме это запрещено);

— у иконы G выход находится слева (в дракон-схеме он должен быть снизу);— две петли обратной связи цикла находятся слева от шампура и закручены по часовой стрелке (в дракон-схеме они расположены справа от шампура и закручены против часовой стрелки);— используются неудобные ромбы (в дракон-схеме их заменяют эргономичной иконой Вопрос);— ромб L имеет выход слева (в дракон-схеме он должен быть справа);— используется 12 стрелок, из которых 10 — паразитные (в дракон-схеме всего 2 стрелки);— имеется один избыточный изгиб линии (в блок-схеме 9 изгибов, в дракон-схеме — 8).

Таким образом, данная блок-схема, как и предыдущие примеры, проигрывает дракон-схеме.

Следует избегать неоправданных изгибов соединительных линий

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

Сравним две схемы на Рис. 1 и 2. На Рис. 1 показана обычная блок-схема, заимствованная из книги сотрудников IBM. На Рис. 2 изображена эквивалентная дракон-схема.

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

— неоправданно большое число изгибов линий (в блок-схеме 12 изгибов, а в дракон-схеме — только 4);

— большое число паразитных элементов: 14 стрелок и 3 кружка, которые в дракон-схеме отсутствуют (поскольку они совершенно не нужны и представляют собой визуальные помехи, затемняющие суть дела).

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

Сравниваем со стандартом гост 19.701-90

Иконам Действие и Вопрос в стандарте ГОСТ 19.701-90 соответствуют блоки Процесс и Решение (рис. 14).

Рис. 14. ГОСТ 19.701—90 разрешает присоединять линии к блокам Процесс и Решение четырьмя разными способами, т. е. неоднозначно. Язык ДРАКОН устраняет недостаток и предлагает однозначный (единственный) вариант

Легко видеть, что формализация отростков в ГОСТе отсутствует. Действительно, в стандарте для блока Процесс (рис. 14) предусмотрены четыре варианта. Больше того, число вариантов может возрасти вдвое, если учесть, что стандарт ГОСТ 19.701—90 разрешает выполнять чертежи как со стрелками, так и без них:

«При необходимости или для повышения удобочитаемости могут быть добавлены стрелки-указатели».

Для сравнения: в языке ДРАКОН для иконы Действие (рис. 13) предусмотрен всего один чертеж, что исключает путаницу и предотвращает ошибки.

Далее. Для блока Решение (рис. 14) ГОСТ разрешает четыре варианта (или даже восемь — с использованием стрелок и без них).

Сравним с языком ДРАКОН и иконой Вопрос (рис. 13). Для нее задан один-единственный чертеж, что обеспечивает строгую формализацию.

Неоднозначность графики стандарта является прямым следствием указания ГОСТа 19.701—90: «Символы могут быть вычерчены в любой ориентации».

Наличие в стандарте разных способов подключения отростков к блокам говорит об отсутствии формализации соединительных линий в блок-схемах, что является недостатком стандарта ГОСТ 19.701-90.

Сравнительный анализ двух схем

Обратимся снова к Рис. 1 и 2. Мы сделали лишь первый шаг к устранению графических недочетов. На Рис. 1 осталось еще немало огрехов, которые необходимо выявить и исправить.

Итак, продолжим наш критический анализ. Блок-схема на Рис. 1 имеет следующие недостатки:

— для обозначения развилки используется ромб, который занимает слишком много места. Ромб не позволяет поместить внутри необходимое количество удобочитаемого текста, состоящего из строк равной длины. В дракон-схеме верхний и нижний углы ромба отрезаны, поэтому схема становится компактной и удобной как для записи текста, так и для чтения;

— функционально однородные иконы Д, Е, Ж, И хаотично разбросаны по всей площади чертежа, занимая три разных горизонтальных уровня (что запутывает читателя). В дракон-схеме они расположены на одном уровне, что служит для читателя подсказкой об их функциональной однородности;

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

— икона Д и ее вертикаль расположены слева от шампура (в дракон-схеме это запрещено);

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

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

Стандарты, которые отстали от жизни

Проведенный анализ позволяет сделать вывод, что морально устаревший стандарт ISO 5807:1985 (и его калька ГОСТ 19.701—90) препятствуют распространению новых, более удобных и эффективных форм представления визуальных алгоритмов. Указанные стандарты оказывают негативное воздействие на систему среднего и высшего образования России.

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

Это противоречие следует устранить. Учитывая изложенное выше, необходимо при записи алгоритмов отказаться от некачественных стандартов ISO 5807:1985 и ГОСТ 19.701—90 и в качестве государственного стандарта разработать стандарт, основанный на языке ДРАКОН. Как отмечает профессор Я. В. Безель в журнале «Вестник Российской академии наук»:

«при разработке единого стандарта, снабженного компьютерной поддержкой и рассчитанного на постепенное внедрение во всех отраслях и предметных областях, целесообразно взять за основу язык ДРАКОН» [92].

Тезис академика дородницына

Академик А. А. Дородницын четко проводит указанную границу, подчеркивая, что «без алгоритмов предмета информатики не существует» [94]. Более того, он предлагает выделить «алгоритмические средства» как отдельную, самостоятельную сущность:

«…состав информатики — это три неразрывно и существенно связанные части: технические средства, программные средства и алгоритмические средства. Если о первых двух частях никогда не забывают — … они получили специальные термины “hardware” и “software”, — то алгоритмическая часть информатики остается почему-то в тени… об этой важнейшей части информатики просто забывают» [94].

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

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

Теория валентных точек

Валентные точки можно рассматривать как точки размещения икон, или точки ввода икон. Расположение валентных точек на чертеже дракон-алгоритма строго определено. Иконы можно вставлять только в валентных точках, и больше нигде. На рис. 15 белыми кружками показаны валентные точки, находящиеся на отростках икон Действие и Вопрос. Для каждой точки определено, какие иконы и макроиконы можно вводить в данную точку.

Рис. 15. Икона Действие имеет две валентные точки, а икона Вопрос — три

На чертеже дракон-алгоритма валентные точки не изображаются, но подразумеваются. Они визуализируются (на короткое время) только в процессе построения дракон-схемы — при работе инструментальной программы ДРАКОН-конструктор.

Теория отростков

Назначение теории отростков — устранить неоднозначность присоединения отростков к графическим фигурам.

В языке ДРАКОН формализация отростков выполнена так:— иконы заданы не отдельно, а вместе с отростками (рис. 11, 12);— число отростков, тип и направление каждого отростка строго определены.

Рис. 11. Иконы языка ДРАКОН

Рис. 12. Иконы языка ДРАКОН. Окончание

Существуют три типа отростков:— входной,— выходной,— нейтральный.

Входной и выходной отростки направлены сверху вниз и лежат на одной вертикали, причем входной отросток входит в икону сверху, а выходной — исходит из нее снизу. Икона Вопрос имеет не один, а два выхода; второй выходной отросток направлен по горизонтали вправо. Все отростки ориентированы к центру иконы.

На рис. 13 показаны примеры входных и выходных отростков. Нейтральный отросток приведен на рис. 12, пункт 21. Это горизонтальный отросток, соединяющий икону Синхронизатор с иконой-хозяином.

Перечисленные правила задают однозначную привязку отростков к иконам, являясь средством формализации.

Рис. 13. Язык ДРАКОН предлагает однозначный (единственный) вариант присоединения отростков к иконам. Икона Действие имеет два отростка: входной (сверху) и выходной (снизу). Икона Вопрос имеет три отростка: входной (сверху) и два выходных (внизу и справа)

Язык дракон устраняет недостатки блок-схем

ДРАКОН упорядочивает блок-схемы за счет формализации, эргономизации и неклассической структуризации [39, 93]. С появлением дракон-схем (drakon-charts) блок-схемы алгоритмов по ГОСТ 19.701—90 полностью потеряли свое значение, так как они во всех отношениях уступают дракон-схемам [39, с. 32—36, 242—254].

Государственный комитет РФ по высшему образованию в 1996 г. по решению Президиума научно-методического совета по информатике под председательством академика РАН Ю. И. Журавлева включил изучение языка ДРАКОН в Примерную программу дисциплины «Информатика» для бакалавров для направлений:

510000 — Естественные науки и математика;540000 — Образование;550000 — Технические науки;560000 — Сельскохозяйственные науки [38].

А. Н. Степанов в «Курсе информатики для студентов информационно-математических специальностей» (2022) отмечает:

«Существуют близкие к блок-схемам языки визуального программирования, такие как… язык программирования и моделирования ДРАКОН. В этом языке используются графические элементы, аналогичные стандартным элементам блок-схем… Но для обеспечения возможности автоматического преобразования графической программы в машинный язык введены строгие правила задания графических и текстовых элементов такой программы» [37, с. 190].

Далее Степанов излагает концепцию языка ДРАКОН и указывает его преимущества:

«В рамках этого подхода основные управляющие конструкции следования, ветвления и цикла, которые в обычных алгоритмических языках задаются с помощью служебных слов, таких как begin, end, if, then, else, while, do и т. д., заменяются управляющей графикой, похожей на стандартные элементы блок-схем… Язык двумерного структурного программирования ДРАКОН является полным по Тьюрингу и относится к универсальным языкам программирования… Использование гибридных языков позволяет отказаться от текстовых управляющих структур, используемых в обычных языках, и заменить их управляющей графикой языка ДРАКОН.  Написание программы становится более понятным и удобным для человека, повышается производительность труда программистов» [37, с. 1017—1019].

Выводы

1.     Схемы алгоритмов (flowcharts), описанные в ГОСТ 19.701—90 и международном стандарте ISO 5807:1985, обладают серьезными дефектами. Пользоваться ими недопустимо.

2.     Вместо блок-схем для записи алгоритмов следует использовать дракон-схемы (drakon-charts).

3.     Необходимо разработать и выпустить отдельный стандарт, посвященный алгоритмам, на основе языка ДРАКОН.

4.     Государственный комитет РФ по высшему образованию в 1996 г. по решению Президиума научно-методического совета по информатике включил изучение языка ДРАКОН в программу курса «Информатика».

5.     Тем не менее, преподаватели вузов и учителя школ продолжают знакомить студентов и школьников с морально устаревшими блок-схемами, обосновывая такую практику необходимостью ориентироваться на действующий стандарт ГОСТ 19.701—90.

6.     Преподавателям и учителям можно рекомендовать ознакомиться с языком ДРАКОН, убедиться в его преимуществах и организовать изучение языка ДРАКОН на лекциях, уроках, практических занятиях, курсовых и дипломных работах.

Похожее:  Обещанный платеж сибирские сети

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *