Задание 2
Задание 2 (демо-2023). Миша заполнял таблицу истинности логической функции F
¬(y → x) \/ (z → w) \/ ¬z,
но успел заполнить лишь фрагмент из трёх различных её строк, даже не указав, какому столбцу таблицы соответствует каждая из переменных w, x, y, z.
? |
? |
? |
? |
F |
|
0 |
|
|
0 |
0 |
1 |
|
|
0 |
1 |
|
|
0 |
0 |
Определите, какому столбцу таблицы соответствует каждая из переменных w, x, y, z.
Решение задания на языках PascalABC.NET и Python приведено ниже.
PascalABC.NET |
## uses School; var T:=TrueTable((x,y,z,w)-> not (y<=x) or (z<=w) or not z); TrueTablePrint(T,0,'xyzw'); |
Python |
from itertools import product def F(x, y, z, w): return 1 if (not (y<=x) or (z<=w) or not z)==True else 0 print('x','y','z','w','F') for x, y, z, w in product([0,1],repeat=4): if F(x, y, z, w)==0: print( x, y, z, w, F(x, y, z, w)) |
В PascalABC.NET, в модуле School, есть функции для работы с таблицами истинности.
Функция TrueTable принимает логическую функцию F как лямбда-выражение четырёх переменных: (x,y,z,w) –> F(x,y,z,w). Теперь нет необходимости писать 4 вложенных цикла
для рассмотрения каждого набора переменных.
Функция TrueTablePrint(T, [0,1,2], [строка])
принимает сформированную таблицу истинности как переменную, а также число: если
0, то выведет только наборы со значением функции, равным False, если 1, то со значением True, Если ни 0 и ни 1, то выведет полную таблицу
истинности. Строковый параметр нужен, чтобы обозначить столбцы таблицы
переменными.
Аналогичный код на Python написан с помощью библиотеки itertools и её функции product, которая формирует все наборы из цифр 0 и 1 длины четыре. Здесь нет специальной функции для таблиц истинности, поэтому проверяется каждый набор для заданной функции через цикл for, и в итоге выводятся те наборы переменных, при которых функция равна нулю.
Приведенные программы позволяют лишь частично автоматизировать решение задачи, помогая построить таблицу истинности заданной функции, дальнейшее решение выполняется как и при обычном ручном способе.