Теоретическая часть
Любая булева функция может быть представлена в виде
Данная форма называется совершенной, потому что каждое слагаемое в дизъюнкции включает все переменные, дизъюнктивной, потому что главная операция – дизъюнкция и нормальной, т.к. существует алгоритм проверки равносильности. При этом
Быстрое вычисление значения СДНФ имеет не только теоретическое, но и большое практическое значение. Например во многих современных программах с графическим интерфейсом для составления сложных логических условий используется наглядный бланк в виде таблицы: в клетках записываются условия, причем клетки одного столбца считаются соединенными конъюнкцией, а столбцы – дизъюнкцией, т.е. образуют ДНФ (или наоборот, в этом случае получается КНФ). В частности, так устроен графический интерфейс QBE, применяемый для формулировки логических условий при запросе к СУБД.
Быстрое вычисление сднф
Входные параметры: матрица V размерности всех различных наборов значений переменных, формула, реализующая СДНФ.
Выходные параметры: вектор F соответствующих значений СДНФ.
Алгоритм быстрого вычисления реализуется на основе процедуры next, которая осуществляет переход к следующему «слагаемому» ДНФ, как только в текущем слагаемом обнаруживает «сомножитель», равный нулю, и осуществляет выход из цикла, как только одно из «слагаемых» равно единице.
Построение сднф
Входные параметры: вектор X идентификаторов переменных (array[1..n] of char), матрица V размерности всех различных наборов значений переменных, вектор F соответствующих значений функции.
Выходные параметры: вектор - последовательность символов, образующих запись формулы СДНФ для заданной функции (array[1..m] of string), где , - число единиц в векторе F.
Автоматически (в цикле) определить число единиц в векторе F. Дальнейшие циклы обрабатывают только те строки матрицы V, которые соответствуют значению 1 в векторе F.
rez[2ni+(l+2(l-1))]:=X[l], , если V[i,l]=1, ;
rez[2ni+(l+2(l-1))]:=-X[l], , если V[i,l]=0, ;
rez[j]:=&, где j четно, rez[p]:=V, где p кратно 2n.
Указания к выполнению лабораторной работы
Методом элементарных преобразований построить СДНФ для заданной функции.
Воспользовавшись процедурой (программным модулем) построения всех различных наборов значений переменных, выполненной в лабораторной работе № 2, построить таблицу истинности для полученной СДНФ. Вычисление результирующего вектора G должно осуществляться с помощью процедуры (procedure) next.
Во избежание ошибок при построении СДНФ, построить таблицу истинности для первоначальной функции f(x1,…,xn), используя функции, приведенные в лабораторной работе № 2. Сравнить (в цикле) полученный вектор F с уже построенным вектором G. Результат сравнения , если полученные вектора различны и , если полученные вектора равны между собой.
Если , то выполнить алгоритм построения формальной записи СДНФ.
Варианты заданий
;
;
;
.
Лабораторная работа № 4
Шестнадцатеричная система. Ведение в теорию кодирования
Постановка задачи. Построение битового рисунка, закодированного в шестнадцатеричной системе.