Как построить таблицу истинности в задании 2 ЕГЭ по информатике?
Задание 2 с логической функцией и кусочком таблицы истинности меня вымораживает. Дают выражение с И, ИЛИ, импликацией и просят определить порядок столбцов x, y, z, w. Как решать это надёжно?
2 ответа
Задание 2 — сопоставить столбцы фрагмента таблицы истинности переменным в логическом выражении. Самый надёжный путь — проверить Python-перебором всех наборов.
Идея вручную: ищи строки, где функция = 1 (или = 0, смотря что дано), и подбирай, какой столбец какой переменной соответствует.
Но проще и без ошибок — скрипт. Перебираешь все комбинации переменных, считаешь функцию, сравниваешь с данными строками:
from itertools import product
# F = (x -> y) and (y -> z) ... записываешь как в условии
def F(x, y, z, w):
impl = lambda a, b: (not a) or b
return impl(x, y) and impl(z, w) # пример
for vals in product([0,1], repeat=4):
if F(*vals) == 1:
print(vals)
Получаешь все наборы, дающие нужное значение, и сопоставляешь с фрагментом таблицы по совпадению.
Импликация A→B в Python: (not A) or B. Это главное, где все путаются: A→B ложно ТОЛЬКО когда A=1, B=0.
Частая ошибка: неверно перевести импликацию или эквивалентность из условия в код. Выпиши таблицу операций на черновик: 0→0=1, 0→1=1, 1→0=0, 1→1=1.
На codechick есть разбор логических операций для ЕГЭ.
Если без компьютера: запомни, что импликация x→y равна нулю в единственном случае x=1, y=0. Поэтому в задании удобно искать строки с нулём функции — их мало, и они сильнее ограничивают.
Эквивалентность (x≡y) равна 1, когда переменные равны. Зная это, перебираешь варианты соответствия столбцов и отбрасываешь те, что противоречат хоть одной строке.