Задание №2 ЕГЭ Информатика с ответом и решением
Ответ: yxzw
Условие
Логическая функция F задаётся выражением (x ≡ ( w ∨ y)) ∨ ((w → z ) ∧ (y → w)).
Дан частично заполненный фрагмент, содержащий неповторяющиеся строки таблицы истинности функции F.
Определите, какому столбцу таблицы истинности соответствует каждая из переменных x, y, z, w.
| Переменная 1 | Переменная 2 | Переменная 3 | Переменная 4 | Функция |
|---|---|---|---|---|
| ??? | ??? | ??? | ??? | F |
| 1 | 1 | 0 | ||
| 1 | 0 | |||
| 1 | 1 | 0 |
В ответе напишите буквы w, x, y, z в том порядке, в котором идут соответствующие им столбцы (сначала — буква, соответствующая первому столбцу; затем — буква, соответствующая второму столбцу, и т. д.). Буквы в ответе пишите подряд, никаких разделителей между буквами ставить не нужно.
Пример. Пусть задано выражение x → y, зависящее от двух переменных x и y, и фрагмент таблицы истинности:
| Переменная 1 | Переменная 2 | Функция |
|---|---|---|
| ??? | ??? | F |
| 0 | 1 | 0 |
Тогда первому столбцу соответствует переменная y, а второму столбцу соответствует переменная x. В ответе нужно написать: yx.
Подсказки — как подойти к решению
- Фрагмент содержит только строки с ложной функцией, поэтому начни с преобразования: дизъюнкция ложна лишь тогда, когда ложны оба слагаемых. Выпиши следствия этого для x, y, z и w.
- Разбери импликации: w → z ложна при w = 1 и z = 0, а y → w ложна при y = 1 и w = 0 — эти требования несовместны, поэтому ложной должна быть конъюнкция в целом, а главное ограничение даёт равенство x ≡ (w ∨ y).
- Из x ≠ (w ∨ y) следует: x = 0, если хотя бы одна из w, y равна единице, и x = 1, если обе равны нулю. Перебирай варианты расстановки столбцов и отбрасывай те, где хотя бы одна строка противоречит системе.
Решение
Рассмотрим данное выражение. Преобразуем логическое выражение (x ≡ ( w ∨ y)) ∨ ((w → z ) ∧ (y → w)) и получим систему, при которой оно ложно:
система выражений совокупность выражений w=1,y=1,z=0, конец системы . x не равно w плюс y. конец совокупности . левая круглая скобка * правая круглая скобка
Заметим, что первый и четвёртый столбцы таблицы истинности — это y и w. Из условия x не равно w плюс y следует, что переменная x соответствует второму столбцу таблицы истинности. Следовательно, третьему столбцу соответствует переменная z.
Приведем другое решение.
Составим таблицу истинности для выражения (x ≡ ( w ∨ y)) ∨ ((w → z ) ∧ (y → w)) вручную или при помощи языка 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):
if not((x == (w or y)) or ((w <= z) and (y <= w))):
print(x, y, z, w)
Далее выпишем те наборы переменных, при которых данное выражение равно 0. В наборах переменные запишем в порядке х, y, z, w.
Получим следующие наборы:
(0, 0, 0, 1),
(0, 1, 0, 0),
(0, 1, 0, 1),
(0, 1, 1, 0).
Сопоставим эти наборы с приведенным в задании фрагментом таблицы истинности.
Первая строка таблицы (как минимум две единицы) может соответствовать либо набору (0, 1, 0, 1), либо набору (0, 1, 1, 0).
Третья строка таблицы также может соответствовать одному из этих двух наборов.
Заметим, что в каждом из этих двух наборов переменная y принимает значение 1. Следовательно, ей соответствует первый столбец таблицы.
В данных наборах единичные значения принимают также переменные z и w. Заметим, что переменная z принимает единичное значение в единственном наборе переменных. Следовательно, ей не может соответствовать четвертый столбец. Тогда переменной z соответствует третий столбец, а переменной w — четвертый столбец.
Следовательно, переменной х соответствует второй столбец.
Ответ: yxzw.
Приведём решение Юрия Коломеец на языке Python.
from random import *
from itertools import *
true_v = []
null = lambda x, y, z, w: True if (x == (w or y)) or ((not w or z) and (not y or w)) else False # (x ≡ ( w ∨ y)) ∨ ((w → z ) ∧ (y → w)).
act = True
while act:
f = [randint(0,1) for i in range(4)]
if null(f[0], f[1], f[2], f[3]) == False and f not in true_v and len(true_v) < 4:true_v.append(f)
if len(true_v) == 4:
for t in true_v:shuffle(t)
s = sample(true_v, 3)
for ind, val in enumerate(permutations([h for h in range(4)])):
if null(s[0][val[0]], s[0][val[1]], s[0][val[2]], s[0][val[3]]) == False and s[0][0] == 1 and s[0][3] == 1:
if null(s[1][val[0]], s[1][val[1]], s[1][val[2]], s[1][val[3]]) == False and s[1][3] == 1:
if null(s[2][val[0]], s[2][val[1]], s[2][val[2]], s[2][val[3]]) == False and s[2][0] == 1 and s[2][2] == 1:
for i in s:print(i)
print(f"Ответ: x = {val[0] + 1}; y = {val[1] + 1}; z = {val[2] + 1}; w = {val[3] + 1}")
act = False
s.clear()
Приведём решение Глеба Гришко на языке Python.
from itertools import *
def f(x,y,w,z):
return (x==(w or y)) or ((w<=z) and (y<=w))
for a1,a2,a3,a4,a5,a6,a7 in product([0,1], repeat = 7):
t=[(1,a1,a2,1),(a3,a4,a5,1),(1,a6,1,a7)]
if len(set(t))==3:
for p in permutations('xywz'):
if [f(**dict(zip(p,r))) for r in t]==[0,0,0]:
print(*p)
Типичные ошибки
- Последние два столбца поменяны местами: переменная, которая может быть единицей только в одном наборе, поставлена в столбец с двумя единицами. Считай для каждой буквы, в скольких строках она может равняться единице.
- Две средние переменные перепутаны, из-за чего нарушается условие x ≠ (w ∨ y). Проверяй вариант целиком: любая строка, где функция становится истинной, отменяет расстановку.
В тренажёре: подсказки по шагам, разбор твоей ошибки ИИ-репетитором (он не даёт готовый ответ), повторение ошибок по интервалам и общий прогресс. Все задания №2 по информатике