Создание карт Карно из аналитической формы
Создание набора функций это первый шаг в работе с программным обеспечением для минимизации логических функций при помощи карт Карно - Gorgeous Karnaugh. Для создания набора функций и ввода их аналитической записи выберите пункт меню “File” — “New” — “From analytic form” menu item. На экране появится следующий диалог:
В данном диалоге вы можете увидеть следующие элементы: 1) основное поле ввода текста; 2) Кнопки показа примера/вставки из буфера/загрузки данных из файла; 3) таблицу опций создания. Кнопки предназначены для:
- Show - заменить данные в поле ввода одним из предопределенных примеров;
- Paste - вставить содержимое буфера обмена в поле ввода;
- Load - загрузить данные из текстового файла (появляется диалог “Open File”.
Правила ввода текста функций
- Вводите выражения построчно, и разделяйте их одно от другого символом “;” (точка с запятой). Данное правило позволяет вводить длинные выражения в несколько строк;
- Вводите функции в следующем виде: FN = A&B|C;, где FN - имя функции, A,B,C - входные переменные;
- Функции и переменные именуются следующим образом: NAME[INDEX][ACCENT], где NAME имя переменной или функции (обязательная часть), состоящее из латинских букв и символов “_” (подчеркивания); INDEX - индекс переменной или функции, сосоящее из цифр; ACCENT - штрих - “`” или “'”
- Символ “#” в начале строки помечает строку как коментарий (коментарий заканчивается концом строки)
Символы логических операций
- “!” или “~” - для отрицания (операция с высшим приоритетом );
- “&”, “*”, “&&” или “ ” (пробел)- для обозначения конъюнкции - логического умножения (операция с нормальным приоритетом);
- “|”, “+” или “||” - для обозначения дизъюнкции (операция с низким приоритетом);
- “(” и “)” - используйте скобки для уточнения или переопределения приоритетов операций.
Специальные “$” директивы
При вводе функций, вы можете использовать специальные директивы, начинающиеся с символа “$”:
- $INORDER или $INPUTORDER - задает порядок расположения входных переменных в таблице истинности, по умолчанию будет использоваться тот порядок, в котором они встречаются во входных выражениях;
- $FNORDER, $OUTORDER, $OUTPUTORDER или $FUNCTIONORDER - задает порядок расположения функций в таблице истинности, по умолчанию будет использован тот порядок, в котором функции введены;
- $SUBSTEXPR или $SUBSTEXPRESSION - задает подстановочные выражения для форматирования результатов для языка программирования.
Пример задания функций
Следующий листинг демонстрирует описанные выше возможности:
$INORDER = A,B,C; $FNORDER = y1, y2, y2', y2''; # “i==33” выражение для целевого # языка программирования - C/C++ # и должно использовать его синтаксис $SUBSTEXPR A = i==33; $SUBSTEXPR B = j<5; $SUBSTEXPR C = j>=22; # Если директива $INORDER не используется, # переменные C, B, A будут представлены в # таблице истинности именно в таком порядке, # как встречаются в выражении ниже y2' = C | B&A; y1 = (A+C) && B | (B*A); y2'' = A || B || C; y2 = A B C;
Результаты для C/C++
После минимизации будет получен следующий код C/C++:
/* New set - Coverage by 1 */ /* y1 */ if ((j<5)&&(j>=22) || (i==33)&&(j<5)) { /* true branch */ } else { /* false branch */ } /* y2 */ if (ABC) { /* true branch */ } else { /* false branch */ } /* y2_ */ if ((i==33)&&(j<5) || (j>=22)) { /* true branch */ } else { /* false branch */ } /* y2__ */ if ((i==33) || (j<5) || (j>=22)) { /* true branch */ } else { /* false branch */ }