Задание №2 ЕГЭ по информатике

Решение задания №2 ЕГЭ по информатике на Python — пошаговый разбор

Задание №2 ЕГЭ по информатике — одно из тех, где Python может сэкономить вам несколько минут и уберечь от ошибок.
Вместо того чтобы рисовать большие и сложные таблицы истинности и путаться в скобках, мы напишем короткую программу, которая переберет все возможные комбинации переменных.

Логические операции и их обозначения

В задании логические операции обозначаются специальными символами. Вот таблица соответствия с написанием в коде Python:

Таблица соответствия значков (¬ → not, ∧ → and, ∨ → or, → → <=)

Готовый код

Возьмем конкретное задание из ЕГЭ:

Логическая функция F задаётся выражением:

((x → y) ∧ (y → w)) ∨ (z ≡ (x ∨ y))

Вот код, который выводит полную таблицу истинности функции:

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

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

Таблица истинности задания 2

Добавим в код условие что бы выводить только строки, где F = 0, потому что в таблице из условия именно такие строки.

print("w x y z F")
for w in (0, 1):
    for x in (0, 1):
        for y in (0, 1):
            for z in (0, 1):
                f = ((x <= y) and (y <= w)) or (z == (x or y))
                if f == False:    # <- Добавили условие
                    print(w, x, y, z, int(f))

Результат работы программы:

Таблица истинности вывод программы

Сопоставляем с таблицей из условия

Шаг 1. Смотрим на столбец z. В выводе у него везде 0. Значит, z — это Переменная 3 (потому что в задании именно у третьего столбца нет единиц). Записываем:

Таблица истинности нашли z

Шаг 2. Теперь смотрим на строки. В выводе программы нет ни одной строки с тремя единицами. Максимум — две единицы.

В таблице из условия в первой строке уже есть две единицы (в 1-м и 4-м столбцах), а в третьей строке — тоже две (во 2-м и 4-м). Если бы на месте ... стояла 1, получилась бы строка с тремя единицами.

Но таких строк в выводе нет. Значит, на месте ... в первой и третьей строках точно стоят нули:

Таблица истинности определили нули

Шаг 3. Теперь смотрим, какие строки остались в выводе программы.

В выводе у нас есть:

  • две строки с двумя единицами (первая и третья в таблице) — мы их уже нашли,
  • две строки с одной единицей (вторая и четвертая в выводе).

Вторая строка таблицы пока не заполнена. В ней уже есть одна единица в 1-м столбце. Значит, это строка с одной единицей.

Если бы на месте ... стояла 1, получилась бы строка с двумя единицами. Но строки с двумя единицами уже заняты — это первая и третья строки таблицы. Значит, во второй строке на месте ... тоже нули:

Таблица истинности определили все значения

Шаг 4. Сравниваем столбец Переменная 2 в нашей таблице и столбцы в выводе.

В нашей таблице у Переменной 2 только одна единица (в третьей строке).

В выводе только у w одна единица (в четвертой строке). У всех остальных переменных (x и y) единиц больше.

Значит, Переменная 2 = w.


Шаг 5. Четвёртая строка вывода — единственная, где w = 1. В этой строке также x = 1.

В нашей таблице третья строка — единственная, где Переменная 2 = 1 (а это w). В этой строке единица также стоит в Переменной 4.

Значит, Переменная 4 = x.


Шаг 6. Остаётся Переменная 1 — это y. Итоговый порядок: ywzx

Как подставить свое выражение

Чтобы решить любое задание №2, нужно изменить одну строку в коде — ту, где вычисляется f.


Пример 1: (x → y) ∧ (z → x)

f = (x <= y) and (z <= x)

Пример 2: (x ∧ y) → (z ∨ x)

f = (x and y) <= (z or x)

Пример 3: (x ∨ y) → (¬z ∧ x)

f = (x or y) <= ((not z) and x)

Пример 4: (x ∧ ¬y) ∨ (y ≡ z) ∨ ¬w

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

А что, если в выражении есть ¬ (отрицание целого выражения)?

Бывает, что отрицание стоит перед всем выражением, например:

¬(((x → y) ∧ (y → w)) ∨ (z ≡ (x ∨ y)))

В этом случае просто оборачиваем всё в not:

f = not (((x <= y) and (y <= w)) or (z == (x or y)))

Главный вывод

Задание №2 можно решить на Python всего за 5–10 строк кода. Это:

  • Быстрее, чем рисовать таблицу на бумаге.
  • Надежнее — компьютер не делает арифметических ошибок.
  • Понятнее — вы видите все варианты сразу.

Хотите разобраться глубже?

В этой статье я показал готовое решение, но если вы хотите понять, как работают циклы for, что такое range() и как устроены логические операции в Python, у меня есть отдельные подробные статьи:

🔹 Циклы for и range() — как они работают и зачем нужны (скоро)

🔹 Логические операции в Python — and, or, not и их приоритет (скоро)

Нужна помощь с подготовкой?

Я — Олег Алексеевич, репетитор по информатике. Готовлю к ЕГЭ более 15 лет.

На своих занятиях мы:

  • разбираем структуру экзамена и стратегии решения;
  • пишем код на Python так, чтобы он работал с первого раза;
  • отрабатываем сложные задания 26 и 27 на реальных примерах.

Хотите попробовать? Запишитесь на первое занятие — познакомимся, определим ваш уровень и составим план подготовки.

Переходите на мой сайт, чтобы узнать подробности и записаться: Репетиторы рядом

Made on
Tilda