
- •Глава 1. Анализ процессов проектирования алгоритмов
- •1.1. Актуальность создания системы проектирования алгоритмов
- •1.2. Анализ форм представления алгоритмов
- •1.3. Анализ процесса проектирования алгоритмов
- •1.4. Документы описания алгоритма
- •1.5. Определение системы программирования татра
- •Раздел 2. Языки описания алгоритмов
- •4.1. Язык заполнения сводной документа описания признаков
- •4.2. Язык описания правил выбора решений (язык описания таблицы предикатов)
- •4.3. Язык описания решений задачи
- •5. Дополнительные возможности описания алгоритмов
- •5.1. Оптимизация объема памяти, занимаемой алгоритмом (язык описания таблицы предикатов)
- •5.2. Язык заполнения таблицы признаков
- •5.3. Язык описания правил выбора решений без ссылки на сводный документ описания признакового пространства
- •6. Организация ввода алгоритмов в базу данных
- •6.1. Ввод данных в пакетном режиме
- •Int filtr(long n, long a, short l, short *I, short *j, long *m, int RazM, long *k, int RazK) ,
- •Int predi( long n, long k, long m, int RazM, long r, int RazM) ,
- •Int resch(long n, short f, long a, short l, short I, short j, long m, int RazM) ,
- •7.2. Методика проектирования программы вычисления признаков
- •7.3. Методика проектирования программы оформления решения
- •8. Организация хранения алгоритмов в базе данных
- •7.2. Организация информационных массивов в системе программирования tatra
- •8.1. Структура массива мо
- •8. Состав программного обеспечения
4.2. Язык описания правил выбора решений (язык описания таблицы предикатов)
Правила выбора допустимого множества решений при условии задания сводного документа описания признаков записываются в таблицу предикатов по следующим образом:
<таблица предикатов> ::= <справка><описание признаков> <тело условия>/<справка><описание признаков> (<данные о признаках>) <тело условия>/<справка><тело условия>/
Первый вариант задания таблицы предикатов - это наиболее распространенная форма описания правил выбора решений, которая требует минимальных усилий алгоритмиста при описании алгоритма и трансляции таблиц предикатов. В этом случае одновременно задаются правила выбора решений и пространство признаков решения задачи, а транслятор автоматически определяет интервалы изменения признаков в задаваемом алгоритме и их градации.
Второй вариант задания таблицы предикатов используется для минимизации объема памяти, занимаемого правилами выбора решений после трансляции таблиц предикатов. Методика задания данных о признаках описана в разделе 5.2. Третий вариант позволяет связать предикат с заданием пространства признаков с помощью дополнительных возможностей системы программирования ТАТРА (см. разделы 5.1 и 5.3).
<справка>::= <имя системы><имя алгоритма><имя алгоритма><имя системы>
<имя системы>::= C=<текстовая константа, не превышающая 8 символов>;
<имя алгоритма> ::= А=<текстовая константа, не превышающая 8 символов>;
<описание признаков>::= <имя признака><имя признака><описание признаков>
<имя признака>::= <текстовая константа, не превышающая 8 символов>;
<тело условия >::= <правило><правило><тело условия>
<правило>::= <номер правила>; <система предложений>
<номер правила>::= <целое без знака>
<система предложений>::= <предложение><предложение><система предложений>
Предложение записывается в одну строку. Правило может состоять из нескольких предложений, тогда номер в графе "№ решения" ставится только перед первой строкой правила.
<предложение>::= <выражение><выражение> <предложение>
Выражение - это запись одноместного предиката QIJ. Нетрудно заметить, что предложение является совокупностью одноместных предикатов, соединенных операцией конъюнкции &; а правило, задающее закон, по которому выбирается решение, - это дизъюнкция конъюнкций одноместных предикатов QIJ.
<выражение>::= <пробел> ' <граница><перечисление><интервал>
Выражение равно пробелу тогда, когда значение признака в данном правиле безразлично. Апостроф (') ставится тогда, когда значение признака в правиле совпадает с его значением в предыдущей строке.
<граница>::= <знак границы><цифровая константа>;
<знак границы>::= < <= >= >
<перечисление>::=<знак перечисления><множество цифровых констант>;
<знак перечисления>::= <пусто> = #
Пусто - значит нет знака и в этом случае подразумевается знак "=".
<множество цифровых констант>::= <цифровая константа><цифровая константа>, <множество цифровых констант>
<интервал>::= <открытый интервал><закрытый интервал> <полуоткрытый интервал>
<открытый интервал>::= (<цифровая константа>,<цифровая константа>)
<закрытый интервал>::= [<цифровая константа>,<цифровая константа>]
<полуоткрытый интервал>::= (<цифровая константа>,<цифровая константа>] [<цифровая константа>,<цифровая константа>)
В соответствии с описанными правилами на рис.5 оформлена таблица предикатов.