Печать: Ctrl+P → ориентация альбомная, масштаб 100 % (не «вписать в лист»), поля нет, «печать фона» включить — иначе пропадут рамки таблиц. На листе две одинаковые карточки: разрезать по пунктиру посередине, получится две штуки формата A5. Эта серая рамка на бумагу не печатается.
11 класс

Таблицы истинности: перебор расстановок

Задание 2 ЕГЭ: программный метод решения

Логика на языке Python

в условиичитаетсяв программе
¬Aне Anot A
A ∧ BA и BA and B
A ∨ BA или BA or B
A → Bиз A следует BA <= B
A ≡ BA равносильно BA == B

Порядок действий в условии: сначала ¬, потом ∧, потом ∨, потом →, последней ≡. Скобок в условии ровно столько, сколько нужно: в x ≡ y ∨ y сначала ∨, а в ¬(w → x) отрицание относится ко всей скобке. В Python скобки ставить везде: not x <= y он читает как not (x <= y), а x <= y == z — как цепочку сравнений.

Что делает программа

Строка таблицы переписывается с листа как есть, вместе с F: (0, 0, 1, 1, 1) — четыре значения и пятым F. Расстановка p — строка букв в порядке столбцов, как в задании 1: 'zwxy' значит «в первом столбце z, во втором w…».

for p in permutations('xyzw'):
    p = ''.join(p)
    ok = True
    for row in table:
        x = row[p.index('x')]
        ...
        F = выражение
        if F != row[4]:
            ok = False
    if ok:
        print(p)
  • permutations — все 24 расстановки букв по столбцам;
  • p.index('x') — номер столбца, где стоит x (с нуля);
  • row[p.index('x')] — значение x в этой строке;
  • row[4] — F с листа; не сошлось — расстановка не та.

Четыре строки с index — по одной на переменную. После них выражение F пишется прямо, как в условии: никаких def. Те же четыре строки можно записать одной:

x, y, z, w = [row[p.index(v)] for v in 'xyzw']

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

Если в таблице есть пропуски

for a1, a2, a3 in product([0, 1], repeat=3):
    table = [(a1, 0, 1, a2, 0), (1, 1, a3, 0, 0), (0, 1, 1, 1, 0)]
    if len(table) == len(set(table)):
        ...

Пустые клетки перебираются product. Проверка len(table) == len(set(table)) выбрасывает варианты с одинаковыми строками: в условии сказано, что строки различны, и это не украшение, а ограничение — без него ответ часто перестаёт быть единственным.

Как записывают ответ

Буквы подряд, без пробелов и запятых — в том порядке, в каком идут столбцы таблицы: zxwy.

Откуда эти задачи

Задачи авторские, составлены в форме задания 2 ЕГЭ по информатике. Форма задания и способ решения — как на экзамене, а условия написаны своими словами. Логическая функция и фрагмент таблицы каждый раз новые.

Тренажёр и разбор темы: https://kibersvet.ru/11/tablica-istinnosti/
Материалы подготовлены с использованием технологий искусственного интеллекта.
11 класс

Таблицы истинности: перебор расстановок

Задание 2 ЕГЭ: программный метод решения

Логика на языке Python

в условиичитаетсяв программе
¬Aне Anot A
A ∧ BA и BA and B
A ∨ BA или BA or B
A → Bиз A следует BA <= B
A ≡ BA равносильно BA == B

Порядок действий в условии: сначала ¬, потом ∧, потом ∨, потом →, последней ≡. Скобок в условии ровно столько, сколько нужно: в x ≡ y ∨ y сначала ∨, а в ¬(w → x) отрицание относится ко всей скобке. В Python скобки ставить везде: not x <= y он читает как not (x <= y), а x <= y == z — как цепочку сравнений.

Что делает программа

Строка таблицы переписывается с листа как есть, вместе с F: (0, 0, 1, 1, 1) — четыре значения и пятым F. Расстановка p — строка букв в порядке столбцов, как в задании 1: 'zwxy' значит «в первом столбце z, во втором w…».

for p in permutations('xyzw'):
    p = ''.join(p)
    ok = True
    for row in table:
        x = row[p.index('x')]
        ...
        F = выражение
        if F != row[4]:
            ok = False
    if ok:
        print(p)
  • permutations — все 24 расстановки букв по столбцам;
  • p.index('x') — номер столбца, где стоит x (с нуля);
  • row[p.index('x')] — значение x в этой строке;
  • row[4] — F с листа; не сошлось — расстановка не та.

Четыре строки с index — по одной на переменную. После них выражение F пишется прямо, как в условии: никаких def. Те же четыре строки можно записать одной:

x, y, z, w = [row[p.index(v)] for v in 'xyzw']

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

Если в таблице есть пропуски

for a1, a2, a3 in product([0, 1], repeat=3):
    table = [(a1, 0, 1, a2, 0), (1, 1, a3, 0, 0), (0, 1, 1, 1, 0)]
    if len(table) == len(set(table)):
        ...

Пустые клетки перебираются product. Проверка len(table) == len(set(table)) выбрасывает варианты с одинаковыми строками: в условии сказано, что строки различны, и это не украшение, а ограничение — без него ответ часто перестаёт быть единственным.

Как записывают ответ

Буквы подряд, без пробелов и запятых — в том порядке, в каком идут столбцы таблицы: zxwy.

Откуда эти задачи

Задачи авторские, составлены в форме задания 2 ЕГЭ по информатике. Форма задания и способ решения — как на экзамене, а условия написаны своими словами. Логическая функция и фрагмент таблицы каждый раз новые.