Разбор задания №2 ЕГЭ по информатике: Построение и анализ таблиц истинности с помощью Python

Разбор задания №2 ЕГЭ по информатике: Построение и анализ таблиц истинности с помощью Python

Задание №2 в ЕГЭ по информатике проверяет знание основных законов алгебры логики, умение работать с логическими выражениями и сопоставлять частично заполненные фрагменты таблиц истинности с логическими переменными.
За правильный ответ даётся 1 первичный балл. Поскольку экзамен проходит в компьютерной форме (КЕГЭ), писать вручную длинные таблицы из 16 строк больше не нужно: с помощью короткого скрипта на Python задача решается за 1–2 минуты без риска допустить случайную арифметическую ошибку.

1. Теоретический фундамент: логические операции в Python

В логике переменные принимают только два значения: 1 (Истина / True) или 0 (Ложь / False).

ОперацияОбозначение в КИМВ языке PythonКак работает
Отрицание (инверсия, НЕ)¬, НЕ, черта над переменнойnot xМеняет значение: not 0 → 1, not 1 → 0
Конъюнкция (умножение, И)∧, &, Иx and yВозвращает 1 только тогда, когда оба операнда равны 1
Дизъюнкция (сложение, ИЛИ)∨, |, ИЛИx or yВозвращает 1, если хотя бы один операнд равен 1
Импликация (следование)→x <= y (или not x or y)Ложна (0) только в одном случае: 1 → 0
Эквиваленция (равносильность)≡, ~, ==x == yВозвращает 1, когда значения переменных одинаковы
Лайфхак для Python: Операцию следования A → B в коде удобнее всего записывать через знак нестрогого неравенства: A <= B.Проверим:
0 <= 0 → True (1)
0 <= 1 → True (1)
1 <= 0 → False (0)
1 <= 1 → True (1)
Результат полностью совпадает с классической таблицей истинности для импликации.

Приоритет выполнения операций

  1. Скобки (...)
  2. Отрицание not
  3. Логическое умножение and
  4. Логическое сложение or
  5. Импликация x <= y
  6. Эквиваленция x == y

(В коде программы всегда обособляйте составные логические части круглыми скобками, чтобы приоритеты операторов не конфликтовали).

2. Универсальный шаблон генерации таблицы на Python

Для логической функции от 4 переменных (x, y, z, w) существует ровно 16 различных наборов значений (2⁴ = 16). Программа перебирает их все и выводит только те строки, при которых функция принимает нужное значение (0 или 1).

Базовый шаблон (через 4 вложенных цикла):

Python

print("x y z w")
for x in 0, 1:
    for y in 0, 1:
        for z in 0, 1:
            for w in 0, 1:
                # Записываем логическую функцию из условия задачи
                f = (ваша_функция)
                
                # Если в условии столбец F состоит из нулей:
                if f == 0:
                    print(x, y, z, w)
                    
                # Если в условии столбец F состоит из единиц:
                # if f == 1:
                #     print(x, y, z, w)

3. Пошаговый алгоритм решения

  1. Запрограммируйте логическое выражение: перенесите функцию в код Python, заменяя знаки стрелок и тождеств на операторы языка.
  2. Определите значение функции F в условии:
    • Если в таблице задания в столбце F стоят нули, в условии пишем if f == 0:.
    • Если в таблице задания в столбце F стоят единицы, пишем if f == 1:.
  3. Запустите программу: вы получите небольшую таблицу (обычно от 3 до 5 строк).
  4. Сопоставьте полученный результат с таблицей из КИМ:
    • Посчитайте количество нулей и единиц в каждом столбце.
    • Найдите уникальные столбцы (например, где все нули или только одна единица).
    • Сопоставьте уникальные строки (строка с тремя единицами, строка с тремя нулями).
  5. Запишите итоговый порядок букв: без пробелов, запятых и разделителей (например, ywzx).

4. Разбор типовых примеров из банка КИМ ЕГЭ

Пример 1. Функция принимает нулевые значения (F = 0)

Условие:Логическая функция F задаётся выражением:((x → y) ∧ (y → w)) ∨ (z ≡ (x ∨ y))
Дан частично заполненный фрагмент таблицы истинности, содержащий неповторяющиеся строки:
Определите, какому столбцу соответствует каждая из переменных x, y, z, w. В ответе запишите буквы без разделителей.

Шаг 1: Программа на Python

Python

print("x y z w")
for x in 0, 1:
    for y in 0, 1:
        for z in 0, 1:
            for w in 0, 1:
                f = ((x <= y) and (y <= w)) or (z == (x or y))
                if f == 0:
                    print(x, y, z, w)

Шаг 2: Вывод программы в консоли

x y z w
0 1 0 0
1 0 0 0
1 0 0 1
1 1 0 0

Шаг 3: Сопоставление с таблицей задачи

  1. Анализ столбца z:
    • В выводе программы во всех четырёх строках z = 0.
    • В таблице задания в 1-м, 2-м и 4-м столбцах уже есть единицы. Следовательно, переменная z может стоять только в 3-м столбце.
  2. Анализ столбца w:
    • В выводе переменная w содержит ровно одну единицу (в строке 1 0 0 1), остальные три значения — нули.
    • В таблице задания в 1-м и 4-м столбцах уже стоят минимум по две единицы. Значит, переменная w располагается во 2-м столбце.
  3. Определяем x и y:
    • Посмотрим на 3-ю строку таблицы задания: там единицы стоят во 2-м (w) и 4-м столбцах.
    • В нашей сгенерированной таблице есть единственная строка, где w = 1 — это набор x=1, y=0, z=0, w=1. В этой строке вторая единица принадлежит переменной x. Значит, 4-й столбец — это x.
    • Оставшийся 1-й столбец принадлежит переменной y.

Итоговый порядок столбцов: y w z x.
Ответ: ywzx

Пример 2. Функция принимает единичные значения (F = 1)

Условие:Логическая функция F задаётся выражением:(w → z) ∧ ((y → x) ≡ (z → y))
Дан фрагмент таблицы истинности для строк, где F = 1:
Определите порядок переменных w, x, y, z.

Решение через Python:

Python

print("x y z w")
for x in 0, 1:
    for y in 0, 1:
        for z in 0, 1:
            for w in 0, 1:
                f = (w <= z) and ((y <= x) == (z <= y))
                if f == 1:
                    print(x, y, z, w)

Вывод программы:

x y z w
0 0 0 0
1 0 0 0
1 1 0 0
1 1 1 0
1 1 1 1

Анализ:

  1. В условии задачи в каждой строке есть как минимум один ноль и одна единица. Поэтому строки 0 0 0 0 и 1 1 1 1 сразу исключаем.
  2. Остаются 3 строки:
    • 1 0 0 0
    • 1 1 0 0
    • 1 1 1 0
  3. Считаем количество единиц в столбцах:
    • x — три единицы (1, 1, 1)
    • y — две единицы (0, 1, 1)
    • z — одна единица (0, 0, 1)
    • w — все нули (0, 0, 0)
  4. Сопоставляем с таблицей КИМ:
    • В 1-м столбце две единицы и пустая клетка → это x (только у x три единицы).
    • Во 2-м столбце два нуля и пустая клетка → это w (только у w все нули).
    • В 3-й строке таблицы стоят значения: 1 (x) | 0 (w) | 0 | 1. В нашей рабочей строке с двумя единицами (1 1 0 0) единицами обладают x и y, а нулями — z и w. Значит, 4-й столбец — это y, а 3-й столбец — это z.

Порядок столбцов: x w z y.
Ответ: xwzy

Пример 3. Полная автоматизация сопоставления через Python

Если вы хотите полностью исключить ручной перебор таблицы, можно использовать модуль itertools:
Python

from itertools import permutations, product

# Описываем логическую функцию
def f(x, y, z, w):
    return ((x <= y) and (y <= w)) or (z == (x or y))

# Исходная таблица из КИМ (None — пустая ячейка)
table = [
    (1, None, None, 1),
    (None, None, None, None),
    (None, 1, None, 1)
]

# Перебираем все возможные варианты порядка столбцов
for p in permutations('xyzw'):
    # Генерируем варианты заполнения пустых ячеек
    for row1 in product([0, 1], repeat=table[0].count(None)):
        for row2 in product([0, 1], repeat=table[1].count(None)):
            for row3 in product([0, 1], repeat=table[2].count(None)):
                t = [list(table[0]), list(table[1]), list(table[2])]
                
                # Заполняем пропуски
                for row, fills in zip(t, [row1, row2, row3]):
                    idx = 0
                    for col in range(4):
                        if row[col] is None:
                            row[col] = fills[idx]
                            idx += 1
                
                # Проверяем, что все строки уникальны
                if len(set(tuple(r) for r in t)) == 3:
                    # Проверяем, что функция возвращает 0 для всех строк
                    if all(f(**dict(zip(p, row))) == 0 for row in t):
                        print("Ответ:", ''.join(p))

Этот скрипт самостоятельно заполнит пустые места и напечатает точный порядок букв: Ответ: ywzx.

5. Распространённые ловушки и частые ошибки

  1. Скобки при импликации:
    • В Python конструкция not x <= y сначала применит отрицание к x, а затем выполнит сравнение. Всегда обособляйте выражения: (x <= y) или ((not x) or y).
  2. Путаница условий f == 0 и f == 1:
    • Всегда сверяйтесь со столбцом функции F в бланке. Если там стоят нули, а в коде написать if f == 1:, программа выведет строки противоположной функции.
  3. Строки-дубликаты:
    • В условии всегда сказано: «содержащий неповторяющиеся строки». Если при ручном сопоставлении у вас получаются две одинаковые строки, распределение переменных выполнено с ошибкой.
  4. Порядок переменных в print:
    • В первой строчке кода всегда указывайте имена переменных в той же последовательности, в которой идут ваши циклы for:print("x y z w") для циклов по x, y, z, w.

Памятка для ученика

┌─────────────────────────────────────────────────────────────┐
│              ЧЕК-ЛИСТ ДЛЯ ЗАДАНИЯ №2 ЕГЭ                    │
├─────────────────────────────────────────────────────────────┤
│ 1. Переписать функцию на Python:                            │
│    • A → B  заменяем на  (A <= B)                           │
│    • A ≡ B  заменяем на  (A == B)                           │
│ 2. Проверить столбец F: отбираем нули (0) или единицы (1)?  │
│ 3. Запустить перебор через 4 вложенных цикла.               │
│ 4. Подсчитать количество 0 и 1 по столбцам вывода.          │
│ 5. Сопоставить уникальные столбцы с таблицей КИМ.           │
│ 6. Записать 4 буквы ответа подряд без пробелов.             │
└─────────────────────────────────────────────────────────────┘

Read more

В этот день в истории: 03.10.1993

Событие из мира науки и технологий 1993 год: В Москве противостояние сторонников президента Ельцина и Верховного Совета (ВС РФ) переходит в фазу открытого вооружённого противостояния — сторонники ВС РФ прорывают кольцо блокады вокруг Белого дома, захватывают здание мэрии и требуют предоставления прямого эфира у телецентра «Останкино».

Скрытая опция полосы прокрутки Windows позволяет перейти в любую точку документа или списка

В блоге Microsoft The Old New Thing ветеран Windows Рэймонд Чен поделился краткой историей сочетаний клавиш для полосы прокрутки. Обсуждая различные варианты взаимодействия с ней, он указал на «скрытый» ярлык, который требует удерживать клавишу Shift при щелчке в любом месте полосы прокрутки. Читать далее Источник

Metro 2033 и Last Light получат бесплатное обновление с улучшенной графикой и поддержкой 120 FPS

Возвращаться в московское метро скоро станет приятнее, насколько это вообще возможно среди мутантов и радиации. 4A Games и Deep Silver анонсировали бесплатное обновление для Metro 2033 Redux и Metro: Last Light Redux. На ПК оно выйдет 22 октября, а на PS5 и Xbox Series X|S — 29 октября. Читать новость