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

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

Ответ: ywzx

Условие

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

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

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

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

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

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

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

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

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

  1. Функция ложна, значит всё выражение равно нулю: дизъюнкция ложна только при ложности обоих её слагаемых, поэтому у тебя получаются два независимых условия.
  2. Из ложности z ≡ (x ∨ y) следует z ≠ (x ∨ y): посмотри, есть ли во фрагменте столбец, который ни в одной строке не может быть единицей, — он и есть столбец z. Из ложности конъюнкции (x → y) ∧ (y → w) следует, что хотя бы одна из импликаций ложна.
  3. Дальше различай переменные по числу единиц: одна из них принимает единицу только в одной строке. Проверь, что выбранный порядок не допускает одновременного равенства единице для пары переменных, запрещённой условием.

Решение

Заметим, что в каждом столбце, кроме третьего, как минимум в одной строке встречается 1. Часть логического выражения (z ≡ ( x ∨ y)) будет равна 0 только тогда, когда z будет принимать значение, отличное от x ∨ y. Если поставить в соответствие переменной z какой-либо столбец, кроме третьего, условие (z ≡ ( x ∨ y)) будет принимать значение 1 в какой-либо из строк таблицы. Следовательно, переменная z соответствует третьему столбцу.

Переменные y и w не должны одновременно принимать значение 1. Следовательно, переменной y соответствует первый столбец, а переменной w соответствует второй столбец. Значит, четвёртый столбец фрагмента таблицы истинности соответствует переменной x.

Приведем другое решение.

Составим таблицу истинности для выражения ((x → y ) ∧ (y → w)) ∨ (z ≡ ( x ∨ y)) вручную или при помощи языка 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 <= y) and (y <= w)) or (z == (x or y))):

print(x, y, z, w)

Далее выпишем те наборы переменных, при которых данное выражение равно 0. В наборах переменные запишем в порядке х, y, z,w.

Получим следующие наборы:

(0, 1, 0, 0),

(1, 0, 0, 0),

(1, 0, 0, 1),

(1, 1, 0, 0).

Сопоставим эти наборы с приведенным в задании фрагментом таблицы истинности.

Заметим, что ни в одном из наборов переменная z не принимает единичное значение. Следовательно, переменной z соответствует третий столбец, и во всех строчках таблицы в третьем столбце стоит 0.

Переменная w принимает единичное значение только в одном наборе. Следовательно, переменной w соответствует второй столбец, и в первой и второй сточках таблицы во втором столбце стоит 0.

Третья строка таблицы, в которой переменная w принимает единичное значение, соответствует набору (1, 0, 0, 1). В этом наборе единичное значение принимает также переменная х. Следовательно, переменной х соответствует четвертый столбец.

Тогда первый столбец соответствует переменной у.

Ответ: ywzx.

Приведем решение Коломеец Юрия при помощи программы, которая сразу выдает ответ без промежуточных этапов. Программа из 24 строк, что для трехминутного задания многовато, но решение работает.

from random import *

s = []

null = lambda x, y, z, w: True if ((not x or y) and (not y or w)) or (z == (x or y)) else False # ((x → y ) ∧ (y → w)) ∨ (z ≡ ( x ∨ y)).

act = True

while act:

active = 0

f = [randint(0,1) for i in range(4)]

if f[0] == 1 and f[3] == 1 and len(s) == 0:s.append(f)

if f[0] == 1 and len(s) == 1 and f not in s:s.append(f)

if f[1] == 1 and f[3] == 1 and len(s) == 2 and f not in s:s.append(f)

if len(s) == 3:

while active != 1000:

active += 1

i_x = choice([i for i in range(4)])

i_y = choice([i for i in range(4) if i != i_x])

i_z = choice([i for i in range(4) if i != i_x and i != i_y])

i_w = choice([i for i in range(4) if i != i_x and i != i_y and i != i_z])

if null(s[0][i_x], s[0][i_y], s[0][i_z], s[0][i_w]) == False:

if null(s[1][i_x], s[1][i_y], s[1][i_z], s[1][i_w]) == False:

if null(s[2][i_x], s[2][i_y], s[2][i_z], s[2][i_w]) == False and act == True:

for i in s:print(i)

print(f"Ответ: x = {i_x + 1}; y = {i_y + 1}; z = {i_z + 1}; w = {i_w + 1}")

act = False

if active == 1000:s.clear()

Приведем решение Красильникова Юрия на языке Python.

import itertools,re

def f(vars):

x,y,z,w = vars

return ((not x or y) and (not y or w)) or (z == (x or y))

matrix = ['1..10', '1...0', '.1.10']

numvars=len(matrix[0])-1

table=[''.join(map(str,vars)) + str(int(f(vars))) for vars in itertools.product( [0,1], repeat=numvars )]

for perm in itertools.permutations(range(numvars)):

permtable=[''.join([line[perm[i]] for i in range(numvars)])+line[-1] for line in table]

for lines in itertools.permutations(permtable,len(matrix)):

if re.search(''.join(matrix),''.join(lines)):

print(''.join(['xyzw'[perm[i]] for i in range(numvars)]))

Приведем решение Владимира Бурмистрова на языке Python.

from itertools import *

def f(x, y, z, w):

return ((x <= y) and (y <= w)) or (z == (x or y))

for a1, a2, a3, a4, a5, a6, a7 in product([0, 1], repeat = 7):

table = [(1, a1, a2, 1), (1, a3, a4, a5), (a6, 1, a7, 1)]

if len(table) == len(set(table)):

for p in permutations('xyzw'):

if [f(**dict(zip(p, r))) for r in table] == [0, 0, 0]:

print(*p, sep='')

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

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

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