ЛОГИЧЕСКАЯ СТРУКТУРА ПРОЦЕДУРЫ и ТАБЛИЦА-СИЛУЭТ
(мысли по дальнейшему развитию программы)
Согласно постулату структурного программирования основными
строительными блоками программы являются действие (присвоение или вызов
процедуры), цикл и сложное условие.
В ДАЛВЯЗ 2 действие (присвоение или вызов процедуры или группа
каких-нибудь операторов языка программирования), обобщенный цикл и
сложное условие являются основными маршрутными операторами, полноценно
отображаемыми на визуальной схеме в виде блоков действий, связанных
между собой линиями логических переходов, и задаваемыми псевдокодом
ПкДАЛВЯЗ в окне ЛСП при создании и редактировании визуальной схемы.
Логическая структура процедуры (ЛСП) - это последовательность основных
маршрутных операторов, укрупненно описывающая логику процедуры
(подробнее см. тему "AB_VJAZ и DAL_VJAZ, 6.04.2012, dalvjaz2_description.pdf).
При считывании исходного кода программа разделяет его на ЛСП и список
соответствующих каждой строке ЛСП действий.
1) Последняя версия ПкДАЛВЯЗ (планируется ее вставка в программу как одного
из первоочередных исправлений при дальнейшем развитии программы)
выглядит следующим образом:
Код:
Назначение операторов английская русская
ПкДАЛВЯЗ мнемоника мнемоника
Начало процедуры HD NA ПР НД (процедура)
Начало блока условия с номером действия IF NA ЕС НД (если )
Дополнительное условие с н. действия EI NA ИЕ НД (иначе если)
Альтернативное условие EL ИН (иначе)
Конец блока условия E К (конец)
Начало цикла с н. действия CB NA НЦ НД (начало цикла)
Конец цикла с н. действия CE NA КЦ НД (конец цикла)
Действие с н. действия А NA Д НД (действие)
Первая ветка блока веток с номером ветки
и н. действия FB NB NA ПВ НВ НД
Следующая ветка блока веток с н. ветки
и н. действия NB NB NA СВ НВ НД
Переход к ветке с н. ветки и н. действия J NB NA П НВ НД
Выход из процедуры с н. действия R NA В НД
Если у начала или у конца цикла нет номера действия, то будет использовано
начало или конец цикла по умолчанию, задаваемое в файле конфигурации,
например для паскаля:
- начало цикла по умолчанию: repeat
- конец цикла по умолчанию: end;
Блок веток по смыслу является блоком условия, в котором проверяется
значение номера ветки. Номер действия ветке и переходу к ветке нужен, т.к.
там записываются действие на языке программирования и комментарий к нему.
Номера действий присваиваются автоматически при считывании процедуры.
При создании новых действий номера действий могут задаваться пользователем
или автоматически.
С целью защиты от внесения ошибок при редактировании ЛСП при изменении
пользователем вручную номера действия или ветки у уже существующего
оператора программа должна требовать подтверждения правильности введенного
нового номера действия или ветки, или блокировать изменение, если введенный
номер является заведомо неверным.
2) Предполагается, что в следующей версии программы ЛСП будет не списком,
а текстом в окне редактирования, который пользователь сможет вводить как
функциональными клавишами, так и с клавиатуры.
В нужные места ЛСП можно будет по Shift+Ins вставлять фрагменты ЛСП,
взятые из файлов шаблонов ЛСП.
Список действий будет представлен как текст в окне редактирования,
находящемся ниже окна ЛСП.
При щелчке мышью по номеру действия в окне ЛСП в окне действий будет
появляться действие с этим номером.
Пара "ЛСП + список действий" будет рассматриваться как текущее состояние
редактирования схемы, все состояния будут сохраняться в каталоге состояний
редактирования схемы, так что после начала редактирования будет возможен
откат к любому из состояний после начала редактирования.
3) Предполагается приблизить формат псевдокода к формату текстовой
инструкции.
Будет считаться, что строка первой или следующей ветки блока веток
обозначается числом, соответствующим номеру ветки, за которым следуют
символы "точка" и "пробел".
Если после текущий ветки сразу же будет выполняться следующая ветка, то
переход к следующей ветке, являющийся последним действием ветки, можно не
ставить. Переход в конце ветки также не нужен, если в теле ветки задается
несколько переходов (например с помощью блока переключателей).
(можно сравнить приводимый ниже текст с текстом алгоритма 4 выше в этой теме
из поста от 3.07.2012 )
Код:
АЛГОРИТМ.4. ТАБЛИЦА-СИЛУЭТ
* ветка := 1
* цикл-силуэт пока (ветка <> 0)
1. описание действий для ветки
* k := 1;
n := 1;
2. описание действий для ветки
* переход к 61
вход в основной режим
* конец
3. описание действий для ветки
* если (n = 2)
* переход к 62
* иначе если (n = 3)
* переход к 63
* иначе если (n = 4)
* переход к 64
* конец
* конец
4. описание действий для ветки
* делаем что-нибудь
5. описание действий для ветки
* делаем что-нибудь
6. описание действий для ветки
* делаем что-нибудь
* конец
7. описание действий для ветки
* делаем что-нибудь
11. описание действий для ветки
* делаем что-нибудь
12. описание действий для ветки
* делаем что-нибудь
* конец
13. описание действий для ветки
* делаем что-нибудь
14. описание действий для ветки
* делаем что-нибудь
15. описание действий для ветки
* делаем что-нибудь
* к := к+1
* конец
16. описание действий для ветки
* если (k < 10)
* переход к 2
* иначе
* переход к 17
* конец
17. описание действий для ветки
* обработка ошибок
* ВЫХОД
* конец
61. описание действий для ветки
* загрузка параметров
* вызов процедуры-обработчика
* обработка ответа процедуры обработчика
получаем значение n
* переход к 3
62. описание действий для ветки
* загрузка параметров
* вызов процедуры-обработчика
* обработка ответа процедуры обработчика
* переход к 4
* конец
63. описание действий для ветки
* загрузка параметров
* вызов процедуры-обработчика
* обработка ответа процедуры обработчика
* переход к 4
64. описание действий для ветки
* загрузка параметров
* вызов процедуры-обработчика
* обработка ответа процедуры обработчика
* переход к 4
* конец
* конец цикла-силуэта
* выход
КОНЕЦ АЛГОРИТМА
4) Предполагается, что для таблицы-силуэта ЛСП может быть двумерной, причем
стандартный цикл-силуэт будет рассматриваться как таблица-силуэт с одной
строкой.
Пример двумерной ЛСП для вышеприведенного алгоритма:
Код:
ПР 1
Д 2
НЦ 3
ПВ 1 4 СВ 2 6
Д 5 П 61 7
К
ПВ 3 8
ЕС 9
П 62 10
ИЕ 11
П 63 12
ИЕ 13
П 64 14
К
К
ПВ 4 15 СВ 5 17 СВ 6 19
Д 16 Д 18 Д 20
К
ПВ 7 21 СВ 11 23 СВ 12 25
Д 22 Д 24 Д 26
К
ПВ 13 27 СВ 14 29 СВ 15 31
Д 28 Д 30 Д 32
Д 33
К
ПВ 16 34 СВ 17 38
ЕС 35 Д 39
П 2 36 П 0 40
ИН
П 17 37
К
К
ПВ 61 41 СВ 62 46
Д 42 Д 47
Д 43 Д 48
Д 44 Д 49
П 3 45 П 4 50
К
ПВ 63 51 СВ 64 56
Д 52 Д 57
Д 53 Д 58
Д 54 Д 59
П 4 55 П 4 60
К
КЦ
В 61
------------------------------------
замечание от 26.07.12 11:10 :
А в пример кода ЛСП вкрались ошибки - т.к. для псевдокода по умолчанию
переход к следующей по порядку ветке мы опускаем, а во внутреннем формате
программы такие переходы должны быть. Поэтому в примере для ЛСП нужно
расставить
П Вслед НД
для веток: 1, 4, 5, 6, 7, 11, 12, 13, 14, 15
------------------------------------
Из вышеприведенного текста алгоритма 4 видно, что таблица-силуэт была
отформатирована так, что ветки с одинаковыми номерами логических строк
(в пределах одного десятка) относятся к разным визуальным строкам
таблицы-силуэта. Это было сделано для удобства отображения схемы на экране.
Кстати, из вышеприведенной ЛСП видно, что введение двумерности для ЛСП
повышает ее читабельность по сравнению с одномерной ЛСП.
5) Предполагается ввести функцию нормализации номеров веток при
редактировании ЛСП. В промежутках между нормализациями номеров веток, если
вдруг потребуется вставить новую ветку между двумя ветками или в начале
логической строки таблицы-силуэта, можно взять для этой ветки максимальный
из свободных номеров для данной логической строки - это может привести
к последовательности номеров веток для логической строки вида:
26, 21, 22, 24, 23, 25.
После нормализации ситуация будет исправлена.
Количество веток для логической строки таблицы-силуэта не должно быть
больше 9 (желательно не создавать больше 7 веток для логической строки), при
необходимости нужно прибегать к декомпозиции с использованием нижних строк
таблицы-силуэта.
6) Предполагается реализовать одновременную работу с псевдокодом и языком
программирования. Программные записи модулей, заданных в конфигурации
как ДОК, будут считаться записями, написанными на псевдокоде, а программные
записи модулей, заданных в конфигурации как КОД - записями, написанными на
исходном коде и, возможно, включающими в себя комментарии, написанные на
псевдокоде.
Из псеводкода можно будет сгенерировать шаблон прцедуры во временный файл,
а затем вставить его в модуль исходного кода и наполнить нужным содержанием.
Аналогично можно будет из программной записи на исходном коде с комментариями
сгенерировать текущий комментарий для этой процедуры на псевдокоде.
Рассмотрим следующий пример:
Код:
(*i*) if (wetka = 3)
(*--- // начало комментариев действия
.. описание действий для ветки
вторая строка описания ---*) // конец комментариев действия
(* какой-нибудь комментарий *)
(*i*) if (n = 2) then begin
(*--- * если (n = 2) ---*)
(*i*) wetka := 62;
(*--- * переход к .. ---*)
(*i*) end else if (n = 3) then begin
(*--- * иначе если (n = 3) ---*)
(*i*) wetka := 63;
(*--- * переход к .. ---*)
(*i*) end else if (n = 4) then begin
(*--- * иначе если (n = 4) ---*)
(*i*) wetka := 64;
(*--- * переход к .. ---*)
(*i*) end;
(*i*) end;
Для него будет сгенерирован следующий псевдокод:
Код:
3. описание действий для ветки
вторая строка описания
* если (n = 2)
* переход к 62
* иначе если (n = 3)
* переход к 63
* иначе если (n = 4)
* переход к 64
* конец
* конец
Из вышеприведенного примера видно, что правильные номера веток в
сгенерированный псевдокод будут подставлены автоматически.
7) Введение комментариев действий в ДАЛВЯЗ 2 позволит при построении
изображения схемы отображать в блоках либо только исходный код, либо
только комментарии, либо исходный код вместе с комментариями.
8 ) Предполагается возможность отображения блоков веток в стиле языка
ДРАКОН. Для таблицы-силуэта это предположительно будет выглядеть
следующим образом:
Вложение:
ts2507.JPG [ 78.26 КБ | Просмотров: 19465 ]
Почему не как в ДМ-О2-схеме у Владислава Жаринова - я посчитал, что
будет более естественно не направлять в одну горизонтальную линию
встречные логические переходы из обратной петли силуэта и из верхней
строки схемы, а сохранить порядок переходов "вниз-вправо".