1lytics

Создание карт Карно из аналитической формы

Создание набора функций это первый шаг в работе с программным обеспечением для минимизации логических функций при помощи карт Карно - Gorgeous Karnaugh. Для создания набора функций и ввода их аналитической записи выберите пункт меню “File” — “New” — “From analytic form” menu item. На экране появится следующий диалог:

Диалог ввода аналитических функци

В данном диалоге вы можете увидеть следующие элементы: 1) основное поле ввода текста; 2) Кнопки показа примера/вставки из буфера/загрузки данных из файла; 3) таблицу опций создания. Кнопки предназначены для:

  • Show - заменить данные в поле ввода одним из предопределенных примеров;
  • Paste - вставить содержимое буфера обмена в поле ввода;
  • Load - загрузить данные из текстового файла (появляется диалог “Open File”.

Правила ввода текста функций

  1. Вводите выражения построчно, и разделяйте их одно от другого символом “;” (точка с запятой). Данное правило позволяет вводить длинные выражения в несколько строк;
  2. Вводите функции в следующем виде: FN = A&B|C;, где FN - имя функции, A,B,C - входные переменные;
  3. Функции и переменные именуются следующим образом: NAME[INDEX][ACCENT], где NAME имя переменной или функции (обязательная часть), состоящее из латинских букв и символов “_” (подчеркивания); INDEX - индекс переменной или функции, сосоящее из цифр; ACCENT - штрих - “`” или “'”
  4. Символ “#” в начале строки помечает строку как коментарий (коментарий заканчивается концом строки)

Символы логических операций

  • !” или “~” - для отрицания (операция с высшим приоритетом );
  • &”, “*”, “&&” или “ ” (пробел)- для обозначения конъюнкции - логического умножения (операция с нормальным приоритетом);
  • |”, “+” или “||” - для обозначения дизъюнкции (операция с низким приоритетом);
  • (” и “)” - используйте скобки для уточнения или переопределения приоритетов операций.

Специальные “$” директивы

При вводе функций, вы можете использовать специальные директивы, начинающиеся с символа “$”:

  • $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 */
    }