В качестве одного из возможных вариантов развития:
----------------------------------------------------------------------------------------------------
Нужно ли ВСЕ маршрутные операторы соединять
линиями логических переходов ?
По мнению Алексея Донского иногда поиск вариантов, при котором линии на схеме
не пересекаются, отнимает больше времени, чем разработка самого алгоритма.
Геннадий Николаевич с ним неявно согласился, введя флажок "разрешить
пересечение лиан".
Рассмотрим обозначение цикла ДЛЯ на рисунке 1.
Вложение:
r1.jpg [ 11.7 КБ | Просмотров: 41456 ]
Слева показано существующее обозначение, а справа такое, каким оно
должно было бы быть с учетом всех возможных для такого цикла логических
переходов.
У меня в при работе с программой dal_vjaz сформировся следующий
взгляд на этот вопрос:
Нужно ввести разделение маршрутных операторов на основные
и дополнительные.
Основные маршрутные операторы:
IF - если (условие), то начать блок
EI - конец блока иначе если (условие), то начать блок
EB - иначе начать блок (на схеме отображается как начало
альтернативной ветки условия)
E - конец блока (на схеме отображается как точка соединения
линий условного блока)
CB - начало цикла
CE - конец цикла
(с учетом вышеприведенных замечаний о цикле ДЛЯ можно было бы
ввести визуальную конструкцию "обобщенный цикл", см. рис. 3)
HD - заголовок ветки силуэта
AD - адрес следующей ветки силуэта
A - действие (action)
RET - конец, возврат из процедуры
Для основных маршрутных операторов линии логических переходов
обозначаются, как это и принято в языке ДРАКОН.
Дополнительные маршрутные операторы:
C? - продолжить цикл по условию: if (usl) continue;
B? - выйти из цикла по условию: if (usl) break;
A? - переход вверх по условию: if (usl) goto m1; // A
--A - действие, к которому выполняется переход вверх по условию
V? - переход вниз по условию: if (usl) goto m2; // V
--V - действие, к которому выполняется переход вниз по условию
ERR? - переход к обработке ошибки по условию: if (err) goto m_err;
ERR - обработка ошибки
RET? - выход из процедуры по условию: if (usl) return;
Дополнительные маршрутные операторы отображаются в виде действия с
сокращением или значком, соответствующим этому маршрутному оператору.
Линии логических переходов для дополнительных маршрутных операторов на
схеме не отображаются.
На схеме дополнительным маршрутным операторам будут соответствовать
следующие значки:
Вложение:
r2.jpg [ 24.34 КБ | Просмотров: 41456 ]
Вот так будут выглядеть с использованием дополнительных маршрутных
операторов конструкции "продолжить цикл" и "выход из цикла":
Вложение:
r3.jpg [ 7.92 КБ | Просмотров: 41456 ]
А вот и более сложная схема:
Вложение:
r4.jpg [ 15.05 КБ | Просмотров: 41456 ]
Кстати "хулиганский" переход от действия 4 к действию 11 в языке ДРАКОН
запрещен.
А вот та же схема, но нарисованная в ИС Дракон.
Вложение:
r5.jpg [ 34.08 КБ | Просмотров: 41456 ]
Я скопировал схему из ИС Дракон в Paint и добавил значки операцией
"вставить из файла".
Конечно все это сильно отдает программированием и для людей, далеких
от программирования, может показаться достаточно непривычным.
Но, возможно, мои предложения заинтересуют людей, имеющих некоторое
отношение к программированию.
Какими должны должны значки и обозначения для дополнительных маршрутных
операторов - выяснится в процессе обсуждения, если оно последует.
Ну и последнее замечание - да, неплохо было бы сделать визуальные
схемы более современными в смысле внешнего вида. Но тут важно
удержаться от излишнего украшательства с финтифлюшками.