2.02 Частично заполненный фрагмент таблицы
Ошибка.
Попробуйте повторить позже
Логическая функция F задаётся выражением:
На рисунке приведён частично заполненный фрагмент таблицы истинности функции F, содержащий
неповторяющиеся строки. Определите, какому столбцу таблицы истинности функции F соответствует каждая из
переменных .
??? | ??? | ??? | ??? | F |
0 | 0 | 0 | ||
0 | 0 | 0 | ||
0 | 0 | 0 | 0 | |
В ответе напишите буквы в том порядке, в котором идут соответствующие им столбцы. Буквы в ответе
пишите подряд, никаких разделителей между буквами ставить не нужно.
Решение программой с помощью циклов:
Напишем программу, которая проверяет все возможные комбинации значений переменных x, y, z, w (0 или 1) и выводит только те наборы, при которых заданное логическое выражение истинно. Используя вложенные циклы, код последовательно перебирает 16 вариантов, вычисляя для каждого результат выражения, и выводит на экран подходящие комбинации.
# Выводим заголовок для наглядности (значения переменных) print("x y z w") # Возможные значения переменных: 0 (False) или 1 (True) a = (0, 1) # Перебираем все возможные комбинации x, y, z, w for x in a: for y in a: for z in a: for w in a: # Проверяем, что логическое выражение с текущим набором переменных дает истину if ((x == (not(z))) <= ((x or w) == y)) == False: # Если условие выполнено, выводим текущую комбинацию print(x, y, z, w)
Решение программой с помощью itertools:
Перебор комбинаций x, y, z, w можно также организовать с помощью функции product из модуля itertools. Она генерирует все 16 вариантов комбинаций, а затем вычисляет значение выражения для каждого случая и выводит на экран подходящие комбинации.
# Импортируем функцию для декартова произведения from itertools import product # Выводим заголовок таблицы print("x y z w") # Генерируем все возможные комбинации из 0 и 1 длины 4 (для x,y,z,w) for x, y, z, w in product([0, 1], repeat = 4): # Проверяем, что логическое выражение с текущим набором переменных дает истину if ((x == (not(z))) <= ((x or w) == y)) == False: # Выводим подходящую комбинацию print(x, y, z, w)
После запуска программы получаем результат:
Нужно убрать лишнюю строку из выведенной таблицы, сделать это можно, составив таблицу из трёх строк со столбцом из трёх нулей. Такая таблица получится если убрать вторую строку.
Пустые клетки заполняем единицами, так как по количеству нулей в столбцах полное сходство.
Сразу можно сказать, что второй и третий столбец это y и z соответственно. Чтобы различить оставшиеся два столбика, достаточно обратить внимание, что в одном каждая единица находится в строке вместе с ещё одной единицей, в другом же столбце такое встречается лишь в одной строке. Первый случай встречается в последнем столбике и соответствует букве w, второй — в первом столбике, соответствует букве x.
Решение программой с помощью автоподбора:
Данное решение использует метод перебора, чтобы найти соответствие между логическими переменными (w, x, y, z) и столбцами таблицы истинности.
Сначала формируются строки, которые входят в таблицу истинности функции. Часть из них могут быть зафиксированы полностью, оставшиеся содержат переменные a, b, c, d и т.д., значения которых перебираются.
Далее для каждой из строк таблицы производится перебор всех возможных перестановок имён переменных (’wxyz’). Для каждой перестановки переменные из кортежей подставляются в логическую функцию f, и проверяется, выполняется ли она для всех строк таблицы.
Если для всех строк результат функции равен 1 (истина) или 0 (ложь) в зависимости от условия, то найдено корректное соответствие между переменными и позициями в строках таблицы.
Таким образом, программа перебирает все возможные варианты соответствия переменных и их значений, проверяя, при каких перестановках w, x, y, z логическая функция будет истинной или ложной для каждой строки.
# Импортируем необходимые функции для перебора значений и перестановок from itertools import * # Определяем логическую функцию f def f(w, x, y, z): return (x == (not (z))) <= ((x or w) == y) # Перебираем все возможные значения переменных для таблицы из 0 и 1 for i in product([0, 1], repeat=5): a, b, c, d, e = i # Формируем таблицу из строк из условия tb = [(0, 0, a, b), (c, 0, 0, d), (e, 0, 0, 0)] # Проверяем, что все строки различны if len(set(tb)) == 3: # Перебираем все возможные перестановки имён переменных: ’w’, ’x’, ’y’, ’z’ for j in permutations(list(’wxyz’)): # Для каждой строки в таблице создаём словарь, сопоставляющий переменные # и значения из строки в порядке текущей перестановки. # Проверяем выполнение функции f для каждой строки таблицы. t = [f(**dict(zip(j, k))) for k in tb] # Если для всех строк функция возвращает False (0), выводим соответствие переменных if t == [0, 0, 0]: print(j)
Специальные программы

Программа
лояльности v2.0
Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!
Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.

Бесплатное онлайн-обучение
Для школьников из приграничных территорий России, проживающих в ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Курской, Брянской областях и Крыму.

Налоговые вычеты
Узнай, как получить налоговый вычет при оплате обучения в «Школково».

Специальное предложение
для учителей
Бесплатный доступ к любому курсу подготовки к ЕГЭ, ОГЭ и олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!

Вернём деньги за курс
за твою сотку на ЕГЭ
Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!