Тема: Алгебра логики. Исследование (анализ) логических выражений. Использование Таблиц истинности логических ЛВ.
При решении заданий на поиск соответствия заданной Таблицы истинности с реальной ТИ, необходимо правильно записать ЛВ для я.п.. Для этого необходимо определить порядок действий при вычислении данного выражения.
Необходимо помнить порядок выполнения операций (см. методичку "Теория по алгебре логики для решения 15 заданий ЕГЭ" (приоритет операций):
сначала выполняются действия в скобках
операция НЕ
операция И
операция ИЛИ
операция импликация
операция эквиваленция
Решение.
1 способ решения: построим таблицу истинности заданного ЛВ и, затем, в электронной таблице сопоставим две Таблицы истинности.
Программа для построения Таблицы истинности для заданного ЛВ (я.п. Python):
def f(x,y,z,w):
return ((w <= y) <= x) or (not z)
print('x y z w f')
val = [0,1]
for x in val:
for y in val:
for z in val:
for w in val:
print(x,y,z,w,'|',f(x,y,z,w))
Можно построить ТИ в Питоне и с использованием модуля itertools:
def f(x,y,z,w):
return ((w <= y) <= x) or (not z)
from itertools import *
print('x,y,z,w, f')
for x,y,z,w in product([0,1], repeat=4):
print(x,y,z,w,'|',f(x,y,z,w))
Файл ЭТ с пояснением. В файл перенесем только строки, соответствующие условию задания (F = 0).
2 способ решения: автоматическое нахождение ответа с помощью я.п. Python (спасибо К. Полякову; в его книге "100 балов по информатике. Решаем задачи ЕГЭ на языке Python" есть решение подобной задачи, предложенное Т. Хирьяновым.)
Все неизвестные значения в таблице истинности, составленной учеником, обозначим через переменные (смотри рисунок ниже)
Переберем все возможные комбинации этих переменных. Для каждой из них найдем перестановку основных переменных (x, y , z, w), при которой для всех трех строк таблицы (Миши) значения функции совпадут с заданными (равными 0).
Код:
def F(x,y,z,w):
return ((w <= y) <= x) or (not z)
def callF(names,values):
s = f"F( {names[0]}={values[0]}," + \
f"{names[1]}={values[1]}," + \
f"{names[2]}={values[2]}," + \
f"{names[3]}={values[3]} )"
return eval(s)
from itertools import *
values = [0,0,0]
for a,b,c,d,q,u,g in product([0,1], repeat=7):
table = [(a,b,1,c),
(d,0,q,u),
(g,1,0,0)]
if len(table) != len(set(table)): continue
for p in permutations("xyzw"):
valP = [callF(p, row) for row in table]
if valP == values:
print(''.join(p))
Первая функция (F) вычисляет значение функции.
Вторая - callF() - вызывает функцию F с именованными аргументами: names - - это перестановка переменных в виде кортежа списка или символьной строки; values - это кортеж, список или строка, задающие значения этих аргументов.
При реализации используется модуль itertools.
В переменной values хранятся значения функции для каждой из строк ТИ, заданных в условии.
Остальные элементы кода, надеюсь понятны...
Для данной задачи мы получаем ответ: ZYWX
Задачи из сборника Евич Л.Н.:
вариант 1
XZWY
вариант 3
YZXW
вариант 5
XYWZ
вариант 10
Ответ сообщите учителю.
вариант 14
Ответ сообщите учителю.