Две логические функции заданы выражениями:
Дан частично заполненный фрагмент, содержащий неповторяющиеся строки таблицы истинности обеих функций.
Определите, какому столбцу таблицы истинности соответствует каждая из переменных w, x, y, z.
??? | ??? | ??? | ??? | F1 | F2 |
|---|---|---|---|---|---|
| 1 | 1 | 0 | |||
| 0 | 0 | 0 | 0 | ||
| 0 | 0 | 0 | 0 | 0 |
В ответе напишите буквы w, x, y, z в том порядке, в котором идут соответствующие им столбцы (сначала буква, соответствующая первому столбцу; затем буква, соответствующая второму столбцу, и т. д.). Буквы в ответе пишите подряд, никаких разделителей между буквами ставить не нужно.
Пример. Пусть задано выражение x → y, зависящее от двух переменных x и y, и фрагмент таблицы истинности для одной функции:
| Переменная 1 ??? | Переменная 2 ??? | Функция F |
|---|---|---|
| 0 | 1 | 0 |
Тогда первому столбцу соответствует переменная y, а второму столбцу соответствует переменная x. В ответе нужно написать: yx.
Составим таблицу истинности для выражения
print("x y z w")
for x in range(0, 2):
for y in range(0, 2):
for z in range(0, 2):
for w in range(0, 2):
if not((w or not(y)) <= (z == x)):
print(x, y, z, w)
Далее выпишем те наборы переменных, при которых данное выражение равно 0. В наборах переменные запишем в порядке х, y, z, w. Получим следующие наборы:
(0, 0, 1, 0),
(0, 0, 1, 1),
(0, 1, 1, 1),
(1, 0, 0, 0),
(1, 0, 0, 1),
(1, 1, 0, 1).
Составим таблицу истинности для выражения
print("x y z w")
for x in range(0, 2):
for y in range(0, 2):
for z in range(0, 2):
for w in range(0, 2):
if not((w or not(y)) == (x <= z)):
print(x, y, z, w)
Далее выпишем те наборы переменных, при которых данное выражение равно 0. В наборах переменные запишем в порядке х, y, z, w. Получим следующие наборы:
(0, 1, 0, 0),
(0, 1, 1, 0),
(1, 0, 0, 0),
(1, 0, 0, 1),
(1, 1, 0, 1),
(1, 1, 1, 0).
Сопоставим эти наборы с приведенным в задании фрагментом таблицы истинности.
Рассмотрим третью строку таблицы истинности. Поскольку в наборах нет строк с четырьмя значениями 0, то данная строка может соответствовать только набору с тремя 0 и одной 1. В каждом из выражений таких наборов два.
В первом выражении это наборы:
(0, 0, 1, 0),
(1, 0, 0, 0).
Во втором выражении это наборы:
(0, 1, 0, 0),
(1, 0, 0, 0).
В третьей строке таблицы истинности значении 1 может стоять только в четвертом столбце и он должен быть одинаковый для двух выражений. Только для переменной x выполняется это условие. Следовательно, переменная x соответствует четвертому столбцу.
Рассмотрим вторую строку таблицы истинности и вторую функцию. Данная строка таблицы истинности может соответствовать наборам:
(0, 1, 0, 0),
(1, 0, 0, 0).
Поскольку переменная x — это четвертый столбец, тогда в первом столбце может быть только переменная y.
Рассмотрим первую строку таблицы истинности и первую функцию. Поскольку x принимает значение 1 и в данной строке уже есть две 1, то такая строка может соответствовать только наборам:
(1, 0, 0, 1),
(1, 1, 0, 1).
Поскольку переменная z в этих наборах принимает только значение 0, то второму столбцу может соответствовать только переменная w. Следовательно, третий столбец — это переменная z.
Ответ: ywzx.
Приведем код Ильи Крылова на языке Python для двух функции:
print("x y z w")
for x in range(0,2):
for y in range(0,2):
for z in range(0,2):
for w in range(0,2):
result1 = bool((w or not (y)) <= (z == x))
result2 = bool((w or not (y)) == (x <= z))
if not ((result1 == True) and (result2 == True)):
print(x,y,z,w,int(result1),int(result2))

