πЕГЭ · ИИ-репетитор12 предметов · задания ФИПИ
Главная → Информатика → Задания №2 → Задание i02-05

Задание №2 ЕГЭ Информатика с ответом и решением

Ответ: yxzw

Условие

Логическая функция F задаётся выражением (x ≡ ( w ∨ y)) ∨ ((w → z ) ∧ (y → w)).

Дан частично заполненный фрагмент, содержащий неповторяющиеся строки таблицы истинности функции F.

Определите, какому столбцу таблицы истинности соответствует каждая из переменных x, y, z, w.

Переменная 1Переменная 2Переменная 3Переменная 4Функция
????????????F
110
10
110

В ответе напишите буквы w, x, y, z в том порядке, в котором идут соответствующие им столбцы (сначала — буква, соответствующая первому столбцу; затем — буква, соответствующая второму столбцу, и т. д.). Буквы в ответе пишите подряд, никаких разделителей между буквами ставить не нужно.

Пример. Пусть задано выражение x → y, зависящее от двух переменных x и y, и фрагмент таблицы истинности:

Переменная 1Переменная 2Функция
??????F
010

Тогда первому столбцу соответствует переменная y, а второму столбцу соответствует переменная x. В ответе нужно написать: yx.

Подсказки — как подойти к решению

  1. Фрагмент содержит только строки с ложной функцией, поэтому начни с преобразования: дизъюнкция ложна лишь тогда, когда ложны оба слагаемых. Выпиши следствия этого для x, y, z и w.
  2. Разбери импликации: w → z ложна при w = 1 и z = 0, а y → w ложна при y = 1 и w = 0 — эти требования несовместны, поэтому ложной должна быть конъюнкция в целом, а главное ограничение даёт равенство x ≡ (w ∨ y).
  3. Из 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)

Типичные ошибки

Решить это задание в тренажёре

В тренажёре: подсказки по шагам, разбор твоей ошибки ИИ-репетитором (он не даёт готовый ответ), повторение ошибок по интервалам и общий прогресс. Все задания №2 по информатике