2.01 Полностью заполненные фрагменты таблицы истинности
Готовиться с нами - ЛЕГКО!
Ошибка.
Попробуйте повторить позже
Логическая функция задаётся выражением:
Ниже представлен фрагмент таблицы истинности функции
Определите, какому столбцу истинности функции соответствует каждая переменная
Решение программой с помощью циклов:
Напишем программу, которая проверяет все возможные комбинации значений переменных 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 ((z and y and (not w)) or (x and y and z and (not w)) or (x and (not y) and (not z) and (not w))): # Если условие выполнено, выводим текущую комбинацию 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 ((z and y and (not w)) or (x and y and z and (not w)) or (x and (not y) and (not z) and (not w))): # Выводим подходящую комбинацию print(x, y, z, w)
После запуска программы получаем результат:
Для начала заметим, что есть только одна строка с тремя единицами, в ней . Значит, на первом месте будет
располагаться переменная
. Далее видим, что есть только одна строка с одной единицей, и в ней
,
следовательно, на третьем месте будет располагаться переменная
. В строке с двумя единицами
и
,
значит переменная
стоит на четвёртом месте, и по остаточному принципу переменная
стоит на втором
месте.
Аналитическое решение:
Функция истинна в том случае, когда одна из скобок будет истинна. Рассмотрим, когда истинна третья скобка. Она
истинна в случае
Данный набор переменных соответствует первой строке фрагмента таблицы
истинности. Получается, что переменная
занимает третий столбец. Теперь рассмотрим вторую скобку. Она истинна в
случае
Этот набор соответствует третьей строке. Получим, что
занимает первый столбец.
Теперь обратимся к первой скобке. Она истинна тогда, когда
Следовательно,
занимает
четвёртый столбец (исходя из второй строки фрагмента таблицы истинности). А для
остаётся второй
столбец.
Ошибка.
Попробуйте повторить позже
Логическая функция задаётся выражением:
Ниже представлен фрагмент таблицы истинности функции
Определите, какому столбцу истинности функции соответствует каждая переменная
Решение программой с помощью циклов:
Напишем программу, которая проверяет все возможные комбинации значений переменных 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 ((z and y and (not w)) or (x and y and z and (not w)) or (x and (not y) and (not z) and (not w))): # Если условие выполнено, выводим текущую комбинацию 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 ((z and y and (not w)) or (x and y and z and (not w)) or (x and (not y) and (not z) and (not w))): # Выводим подходящую комбинацию print(x, y, z, w)
После запуска программы получаем результат:
Для начала заметим, что есть только одна строка с тремя единицами, в ней . Значит, на первом месте будет
располагаться переменная
. Далее видим, что есть только одна строка с одной единицей, и в ней
,
следовательно, на третьем месте будет располагаться переменная
. В строке с двумя единицами
и
,
значит переменная
стоит на четвёртом месте, и по остаточному принципу переменная
стоит на втором
месте.
Аналитическое решение:
Функция истинна в том случае, когда одна из скобок будет истинна. Рассмотрим, когда истинна третья скобка. Она
истинна в случае
Данный набор переменных соответствует первой строке фрагмента таблицы
истинности. Получается, что переменная
занимает третий столбец. Теперь рассмотрим вторую скобку. Она истинна в
случае
Этот набор соответствует третьей строке. Получим, что
занимает первый столбец.
Теперь обратимся к первой скобке. Она истинна тогда, когда
Следовательно,
занимает
четвёртый столбец (исходя из второй строки фрагмента таблицы истинности). А для
остаётся второй
столбец.
Ошибка.
Попробуйте повторить позже
Логическая функция задаётся выражением:
Ниже представлен фрагмент таблицы истинности функции
Определите, какому столбцу истинности функции соответствует каждая переменная
Решение программой с помощью циклов:
Напишем программу, которая проверяет все возможные комбинации значений переменных 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 ((z and y and (not w)) or (x and y and z and (not w)) or (x and (not y) and (not z) and (not w))): # Если условие выполнено, выводим текущую комбинацию 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 ((z and y and (not w)) or (x and y and z and (not w)) or (x and (not y) and (not z) and (not w))): # Выводим подходящую комбинацию print(x, y, z, w)
После запуска программы получаем результат:
Для начала заметим, что есть только одна строка с тремя единицами, в ней . Значит, на первом месте будет
располагаться переменная
. Далее видим, что есть только одна строка с одной единицей, и в ней
,
следовательно, на третьем месте будет располагаться переменная
. В строке с двумя единицами
и
,
значит переменная
стоит на четвёртом месте, и по остаточному принципу переменная
стоит на втором
месте.
Аналитическое решение:
Функция истинна в том случае, когда одна из скобок будет истинна. Рассмотрим, когда истинна третья скобка. Она
истинна в случае
Данный набор переменных соответствует первой строке фрагмента таблицы
истинности. Получается, что переменная
занимает третий столбец. Теперь рассмотрим вторую скобку. Она истинна в
случае
Этот набор соответствует третьей строке. Получим, что
занимает первый столбец.
Теперь обратимся к первой скобке. Она истинна тогда, когда
Следовательно,
занимает
четвёртый столбец (исходя из второй строки фрагмента таблицы истинности). А для
остаётся второй
столбец.
Ошибка.
Попробуйте повторить позже
Логическая функция задается выраженим:
Определите какому столбцу таблицы истинности функции соответствует каждая из переменных
Решение программой с помощью циклов:
Напишем программу, которая проверяет все возможные комбинации значений переменных x, y, z (0 или 1) и выводит только те наборы, при которых заданное логическое выражение истинно. Используя вложенные циклы, код последовательно перебирает 8 вариантов, вычисляя для каждого результат выражения, и выводит на экран подходящие комбинации.
# Выводим заголовок для наглядности (значения переменных) print("x y z") # Возможные значения переменных: 0 (False) или 1 (True) a = (0, 1) # Перебираем все возможные комбинации x, y, z for x in a: for y in a: for z in a: # Проверяем, что логическое выражение с текущим набором переменных дает истину if ((x and y) or (x and (not y)) or (y and (not z)) or ((not z) and x)) == 0: # Если условие выполнено, выводим текущую комбинацию print(x, y, z)
Решение программой с помощью itertools:
Перебор комбинаций x, y, z можно также организовать с помощью функции product из модуля itertools. Она генерирует все 8 вариантов комбинаций, а затем вычисляет значение выражения для каждого случая и выводит на экран подходящие комбинации.
# Импортируем функцию для декартова произведения from itertools import product # Выводим заголовок таблицы print("x y z") # Генерируем все возможные комбинации из 0 и 1 длины 3 (для x,y,z) for x, y, z in product([0, 1], repeat=3): # Проверяем, что логическое выражение с текущим набором переменных дает истину if ((x and y) or (x and (not y)) or (y and (not z)) or ((not z) and x)) == 0: # Выводим подходящую комбинацию print(x, y, z)
После запуска программы получаем результат:
Заметим, что в каждом столбце уникальное количество единиц, в первом - 0, во втором - 1, в третьем - 2.
Следовательно, столбцы из результата и из условия можно соотнести друг с другом по их количеству. На первом месте
расположится переменная , на втором –
, на третьем –
.
Аналитическое решение:
Для решения задачи преобразуем имеющееся выражение:
Функция всегда равна нулю, а значит никогда не может быть единицей, иначе функция тоже была бы равна
единице. Значит
это второй столбик. Далее понимаем, что скобка справа может равняться единице только если
а
, но если
это первый столбик, а
это третий, то на третьей строке скобка справа была бы равна единице,
значит
это третий столбик, а
это первый.
Ошибка.
Попробуйте повторить позже
Логическая функция F задается выражением:
Ниже приведён фрагмент таблицы истинности функции , содержащий все наборы аргументов, при которых функция
истинна. Определите, какому столбцу таблицы истинности функции
соответствует каждая из переменных
и
.
Решение программой с помощью циклов:
Напишем программу, которая проверяет все возможные комбинации значений переменных x, y, z (0 или 1) и выводит только те наборы, при которых заданное логическое выражение истинно. Используя вложенные циклы, код последовательно перебирает 8 вариантов, вычисляя для каждого результат выражения, и выводит на экран подходящие комбинации.
# Выводим заголовок для наглядности (значения переменных) print("x y z") # Возможные значения переменных: 0 (False) или 1 (True) a = (0, 1) # Перебираем все возможные комбинации x, y, z for x in a: for y in a: for z in a: # Проверяем, что логическое выражение с текущим набором переменных дает истину if (x <= y) and (y <= z): # Если условие выполнено, выводим текущую комбинацию print(x, y, z)
Решение программой с помощью itertools:
Перебор комбинаций x, y, z можно также организовать с помощью функции product из модуля itertools. Она генерирует все 8 вариантов комбинаций, а затем вычисляет значение выражения для каждого случая и выводит на экран подходящие комбинации.
# Импортируем функцию для декартова произведения from itertools import product # Выводим заголовок таблицы print("x y z") # Генерируем все возможные комбинации из 0 и 1 длины 3 (для x,y,z) for x, y, z in product([0, 1], repeat=3): # Проверяем, что логическое выражение с текущим набором переменных дает истину if (x <= y) and (y <= z): # Выводим подходящую комбинацию print(x, y, z)
После запуска программы получаем результат:
Для начала заметим, что в условии не дано ни одной строки с тремя единицами, поэтому первую строку результата можем не учитывать, в таком случае следует рассматривать такую таблицу:
Заметим, что есть всего один столбец с 3 нулями, один столбец с 2 нулями, один столбец с 1 нулем. Значит, вывод программы однозначно соотносится с столбцами из условия.
Аналитическое решение:
Так как таблица истина, значит, обе скобки истины. Импликация всегда истина, кроме набора , а у нас есть строка
в таблице. Если подставить вместо
столбца
, то увидим, что первый и второй столбец не могут быть
, так
как выходит набор
у импликации, значит,
столбец не
. То же самое, если подставить вместо
столбца у, будет
у импликации, значит,
столбец и не
. Значит,
столбец — это
. Вариант
не
подходит вместо
и
столбца, так как импликация из
в
в
строке будет ложна, значит, ответ
.
Ошибка.
Попробуйте повторить позже
Логическая функция F задаётся выражением:
Дан заполненный фрагмент таблицы истинности функции . Определите, какому столбцу таблицы истинности
соответствует каждая из переменных
.
В ответе напишите буквы в том порядке, в котором идут соответствующие им столбцы (сначала буква,
соответствующая первому столбцу, затем буква, соответствующая второму столбцу, и т. д.). Буквы в ответе пишите подряд,
никаких разделителей между буквами ставить не нужно.
Решение программой с помощью циклов:
Напишем программу, которая проверяет все возможные комбинации значений переменных x, y, z (0 или 1) и выводит только те наборы, при которых заданное логическое выражение истинно. Используя вложенные циклы, код последовательно перебирает 8 вариантов, вычисляя для каждого результат выражения, и выводит на экран подходящие комбинации.
# Выводим заголовок для наглядности (значения переменных) print("x y z") # Возможные значения переменных: 0 (False) или 1 (True) a = (0, 1) # Перебираем все возможные комбинации x, y, z for x in a: for y in a: for z in a: # Проверяем, что логическое выражение с текущим набором переменных дает истину if ((z == y) == ((not y) or (not x))) == 0: # Если условие выполнено, выводим текущую комбинацию print(x, y, z)
Решение программой с помощью itertools:
Перебор комбинаций x, y, z можно также организовать с помощью функции product из модуля itertools. Она генерирует все 8 вариантов комбинаций, а затем вычисляет значение выражения для каждого случая и выводит на экран подходящие комбинации.
# Импортируем функцию для декартова произведения from itertools import product # Выводим заголовок таблицы print("x y z") # Генерируем все возможные комбинации из 0 и 1 длины 3 (для x,y,z) for x, y, z in product([0, 1], repeat=3): # Проверяем, что логическое выражение с текущим набором переменных дает истину if ((z == y) == ((not y) or (not x))) == 0: # Выводим подходящую комбинацию print(x, y, z)
После запуска программы получаем результат:
Заметим, что в условии не дана строка с тремя единицами, а значит её можно не учитывать, и мы будем работать со следующей таблицей:
Расположение столбцов и строк в условии совпадает с их расположением в результате, а значит на первом месте будет
стоять переменная , на втором –
, на третьем –
.
Аналитическое решение:
Так как выражение равно , значит, правая и левая скобки имеют разные значения. Если левая —
, правая —
, то,
так как в
скобке равенство двух переменных, должны быть два одинаковых столбца, но таковых нет. Получается,
левая —
, правая —
. Так как левая скобка —
, то
и
это
и
столбец (порядок пока не
понятен), потому что во
и
столбце переменные имеют разные значения во всех строках, нам как раз
нужно, чтобы переменные в левой скобке всегда отличались. Получается,
—
стообец. Правая скобка
должна быть
, значит, нам не подходит вариант, когда
и
. У
столбца как раз нет строк,
когда
столбец равен
и второй столбец равен
, значит,
—
столбец. Остается, что
—
столбец.
Ошибка.
Попробуйте повторить позже
Логическая функция задаётся выражением:
Ниже представлен фрагмент таблицы истинности функции , содержащий неповторяющиеся строки.
Определите, какому столбцу истинности функции соответствует каждая переменная
.
Решение программой с помощью циклов:
Напишем программу, которая проверяет все возможные комбинации значений переменных 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 and y) or (y == z) or w) == 0: # Если условие выполнено, выводим текущую комбинацию 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 and y) or (y == z) or w) == 0: # Выводим подходящую комбинацию print(x, y, z, w)
Программа выведет:
Заметим, что всегда принимает значение
, значит,
— третий столбец таблицы истинности. Переменная
принимает значени
только один раз, значит,
соответствует первый столбец. Существует случай когда
принимает значение
вместе с
, тогда
— второй столбец. Оставшийся (четвертый столбик) — это
.
Получаем ответ:
Решение программой с помощью автоподбора:
from itertools import * def f(w, x, y, z): return (x and y) or (y == z) or w tb = [(1, 1, 0, 0), (0, 0, 0, 1), (1, 0, 0, 0)] if len(set(tb)) == 3: for j in permutations(list(’wxyz’)): t = [f(**dict(zip(j, k))) for k in tb] if t == [0, 0, 0]: print(j)
Аналитическое решение:
Дизъюнкция ложна тогда и только тогда, когда все скобки, между которыми стоит дизъюнкция - ложны.
Следовательно, всегда равен 0 и ему соответствует 3 столбец.
Из второй скобки следует, что не равен
, следовательно им соответствует 1 и 4 столбец. Отсюда
- 2
столбец.
Когда равен 1, то для лжи в первой скобке,
должен быть равен 0, значит
- 4 столбец, а
- 1
столбец.
Ошибка.
Попробуйте повторить позже
Логическая функция задаётся выражением
На рисунке приведен фрагмент таблицы истинности функции содержащий все наборы аргументов, при которых
функция
ложна.
Определите, какому столбцу таблицы истинности функции соответствует каждая из переменных
В ответе напишите буквы в том порядке, в котором идут соответствующие им столбцы (сначала буква,
соответствующая первому столбцу, затем буква, соответствующая второму столбцу, и т. д.) Буквы в ответе пишите подряд,
никаких разделителей между буквами ставить не нужно.
Решение программой с помощью циклов:
Напишем программу, которая проверяет все возможные комбинации значений переменных 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 (not(x) or y or (not(z) and w)) == 0: # Если условие выполнено, выводим текущую комбинацию 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 (not(x) or y or (not(z) and w)) == 0: # Выводим подходящую комбинацию print(x, y, z, w)
Выведет таблицу:
Несложно сопоставить, что —
столбец,
—
столбец,
—
столбец,
—
столбец.
Аналитическое решение:
Дизъюнкция ложна тогда и только тогда, когда все выражения, между которыми стоит дизъюнкция, ложны.
Следовательно, всегда равен 1 (третий столбец),
всегда равен 0 (четвертый столбец).
Если - первый столбец, а
- второй, то для второй строки выражение будет истинным, следовательно, первый
столбец -
, второй -
.
Ошибка.
Попробуйте повторить позже
Логическая функция задаётся выражением:
Ниже представлен фрагмент таблицы истинности функции
Определите, какому столбцу истинности функции соответствует каждая переменная
Решение программой с помощью циклов:
Напишем программу, которая проверяет все возможные комбинации значений переменных x, y, z (0 или 1) и выводит только те наборы, при которых заданное логическое выражение истинно. Используя вложенные циклы, код последовательно перебирает 8 вариантов, вычисляя для каждого результат выражения, и выводит на экран подходящие комбинации.
# Выводим заголовок для наглядности (значения переменных) print("x y z") # Возможные значения переменных: 0 (False) или 1 (True) a = (0, 1) # Перебираем все возможные комбинации x, y, z for x in a: for y in a: for z in a: # Проверяем, что логическое выражение с текущим набором переменных дает истину if ((x <= y) and (y <= z)): # Если условие выполнено, выводим текущую комбинацию print(x, y, z)
Решение программой с помощью itertools:
Перебор комбинаций x, y, z можно также организовать с помощью функции product из модуля itertools. Она генерирует все 8 вариантов комбинаций, а затем вычисляет значение выражения для каждого случая и выводит на экран подходящие комбинации.
# Импортируем функцию для декартова произведения from itertools import product # Выводим заголовок таблицы print("x y z") # Генерируем все возможные комбинации из 0 и 1 длины 3 (для x,y,z) for x, y, z in product([0, 1], repeat=3): # Проверяем, что логическое выражение с текущим набором переменных дает истину if ((x <= y) and (y <= z)): # Выводим подходящую комбинацию print(x, y, z)
Программа выведет:
Заметим, что x всегда (кроме последнего случая, которого нет в таблице из условия задачи) принимает значение ,
значит,
— второй столбец таблицы истинности. Переменная
один раз принимает значение
, значит,
— первый
столбец. Тогда третий столбец соответствует переменной
. Получаем ответ:
Аналитическое решение:
Запишем таблицу истинности:
Оставим только строки, в которых :
Заметим, что в таблице нет строки с тремя единицами, ее не рассматриваем. Тогда столбцы легко соотносятся с
столбцами из условия. Получаем ответ - .
Ошибка.
Попробуйте повторить позже
Логическая функция задаётся выражением:
Ниже представлен фрагмент таблицы истинности функции
Определите, какому столбцу истинности функции соответствует каждая переменная
Решение программой с помощью циклов:
Напишем программу, которая проверяет все возможные комбинации значений переменных x, y, z (0 или 1) и выводит только те наборы, при которых заданное логическое выражение истинно. Используя вложенные циклы, код последовательно перебирает 8 вариантов, вычисляя для каждого результат выражения, и выводит на экран подходящие комбинации.
# Выводим заголовок для наглядности (значения переменных) print("x y z") # Возможные значения переменных: 0 (False) или 1 (True) a = (0, 1) # Перебираем все возможные комбинации x, y, z for x in a: for y in a: for z in a: # Проверяем, что логическое выражение с текущим набором переменных дает истину if ((x <= (not y)) <= (not x == (not z))) == False: # Если условие выполнено, выводим текущую комбинацию print(x, y, z)
Решение программой с помощью itertools:
Перебор комбинаций x, y, z можно также организовать с помощью функции product из модуля itertools. Она генерирует все 8 вариантов комбинаций, а затем вычисляет значение выражения для каждого случая и выводит на экран подходящие комбинации.
# Импортируем функцию для декартова произведения from itertools import product # Выводим заголовок таблицы print("x y z") # Генерируем все возможные комбинации из 0 и 1 длины 3 (для x,y,z) for x, y, z in product([0, 1], repeat=3): # Проверяем, что логическое выражение с текущим набором переменных дает истину if ((x <= (not y)) <= (not x == (not z))) == False: # Выводим подходящую комбинацию print(x, y, z)
После запуска программы получаем результат:
x y z
0 0 1
0 1 1
1 0 0
Столбец z запишем в первый столбец, так как в нём две единицы. Обратим внимание на вторую строку из вывода это вторая строка из условия, в ней z и y равны 1, значит, второй столбец это y, а третий это x.
Аналитичекое решение:
Импликация ложна в случае, когда первая скобка будет истинной, а вторая скобка будет ложной. Вторая скобка ложна
в случае, когда переменные имеют разные значения. Из первой и третьей строчек мы можем сделать вывод о том,
что эти переменные не могут занимать второй и третий, первый и второй столбцы. Следовательно,
занимает второй
столбец. Рассмотрим вторую строку, в ней
Так как
то
Значит
занимает третий столбец, а
занимает первый.
Ошибка.
Попробуйте повторить позже
Логическая функция задаётся выражением:
Ниже представлен фрагмент таблицы истинности функции , содержащий неповторяющиеся строки.
Определите, какому столбцу истинности функции соответствует каждая переменная
. В ответе укажите
переменные в соответствующем порядке без пробелов.
Решение программой с помощью циклов:
Напишем программу, которая проверяет все возможные комбинации значений переменных 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 (w and ((not z) and x or (not y) and z)): # Если условие выполнено, выводим текущую комбинацию 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 (w and ((not z) and x or (not y) and z)): # Выводим подходящую комбинацию print(x, y, z, w)
Результат работы программы:
Заметим, что все столбцы содержат разное количество единиц, значит, можно сразу однозначно определить порядок
переменных —
Аналитическое решение:
Конъюнкция истинна, если все выражения, между которыми она стоит, истинны. Следовательно, всегда равен 1 и
ему соответствует второй столбец.
Левая часть в скобке равна 1, если , при этом
может быть любым. Получаем строки
.
Правая часть в скобке равна 1, если , при этом
может быть любым. Получаем строки
.
Исходя из этого, может быть равен единице в трех случаях и ему соответствует столбец 1.
может быть равен
единице 1 раз и ему соответсвует столбец - 4. Оставшийся столбец соответствует
.
Ошибка.
Попробуйте повторить позже
Логическая функция задаётся выражением:
Ниже представлен фрагмент таблицы истинности функции .
Определите, какому столбцу истинности функции соответствует каждая переменная
Решение программой с помощью циклов:
Напишем программу, которая проверяет все возможные комбинации значений переменных x, y, z (0 или 1) и выводит только те наборы, при которых заданное логическое выражение истинно. Используя вложенные циклы, код последовательно перебирает 8 вариантов, вычисляя для каждого результат выражения, и выводит на экран подходящие комбинации.
# Выводим заголовок для наглядности (значения переменных) print("x y z") # Возможные значения переменных: 0 (False) или 1 (True) a = (0, 1) # Перебираем все возможные комбинации x, y, z for x in a: for y in a: for z in a: # Проверяем, что логическое выражение с текущим набором переменных дает истину if (not (x or (not y)) <= (z and x)): # Если условие выполнено, выводим текущую комбинацию print(x, y, z)
Решение программой с помощью itertools:
Перебор комбинаций x, y, z можно также организовать с помощью функции product из модуля itertools. Она генерирует все 8 вариантов комбинаций, а затем вычисляет значение выражения для каждого случая и выводит на экран подходящие комбинации.
# Импортируем функцию для декартова произведения from itertools import product # Выводим заголовок таблицы print("x y z") # Генерируем все возможные комбинации из 0 и 1 длины 3 (для x,y,z) for x, y, z in product([0, 1], repeat=3): # Проверяем, что логическое выражение с текущим набором переменных дает истину if (not (x or (not y)) <= (z and x)): # Выводим подходящую комбинацию print(x, y, z)
Результат работы программы:
Только в четвертой строке содержится две единицы. Нолик в ней отводится под переменную . Сопоставляем с
исходной таблицей. Там это третья строка. Значит, под
отведён первый столбик. Анализируем результат работы
программы. Только в столбике переменной
две единицы. Значит, в исходной таблице для переменной
используется
второй столбик. Тогда для
остаётся третий столбик.
Аналитическое решение:
Импликация ложна только в том случае, если левая скобка - истинна, а правая - ложна.
Двум единицам одновременно в выражении могут быть равны только и
, иначе выражение истинно.
Следовательно, первый столбец - .
Пусть второй столбец , но тогда
всегда должен быть равен 1, что не выполняется. Значит, второй столбец -
,
третий -
.
Ошибка.
Попробуйте повторить позже
Логическая функция задаётся выражением:
Ниже представлен фрагмент таблицы истинности функции .
Определите, какому столбцу истинности функции соответствует каждая переменная
Решение программой с помощью циклов:
Напишем программу, которая проверяет все возможные комбинации значений переменных x, y, z (0 или 1) и выводит только те наборы, при которых заданное логическое выражение истинно. Используя вложенные циклы, код последовательно перебирает 8 вариантов, вычисляя для каждого результат выражения, и выводит на экран подходящие комбинации.
# Выводим заголовок для наглядности (значения переменных) print("x y z") # Возможные значения переменных: 0 (False) или 1 (True) a = (0, 1) # Перебираем все возможные комбинации x, y, z for x in a: for y in a: for z in a: # Проверяем, что логическое выражение с текущим набором переменных дает истину if (z == ((not x) and y)): # Если условие выполнено, выводим текущую комбинацию print(x, y, z)
Решение программой с помощью itertools:
Перебор комбинаций x, y, z можно также организовать с помощью функции product из модуля itertools. Она генерирует все 8 вариантов комбинаций, а затем вычисляет значение выражения для каждого случая и выводит на экран подходящие комбинации.
# Импортируем функцию для декартова произведения from itertools import product # Выводим заголовок таблицы print("x y z") # Генерируем все возможные комбинации из 0 и 1 длины 3 (для x,y,z) for x, y, z in product([0, 1], repeat=3): # Проверяем, что логическое выражение с текущим набором переменных дает истину if (z == ((not x) and y)): # Выводим подходящую комбинацию print(x, y, z)
Результат работы программы:
В третьем столбике полученной таблицы находится одна единица, в остальных по две. Он принадлежит .
Значит, в исходной таблице для
отводится третий столбик. Когда
,
, что видно из второй
строки результата. Тогда в первом столбике начальной таблице поместим
, а в оставшийся второй —
.
Аналитическое решение:
Эквивалентность истинна тогда и только тогда, когда оба выражения, между которыми она стоит, равны между собой.
Если , то
. Существует лишь один вариант, значит
только единожды и ему соответствует
третий столбец.
Если , то либо
(но строки с тремя нулями нет, исключаем этот вариант), либо
, либо
. Значит, когда
,
всегда равен 1. Это выполняется только если
- второй столбец. Оставшийся
столдбец -
.
Ошибка.
Попробуйте повторить позже
Логическая функция задается выражением
На рисунке приведён фрагмент таблицы истинности функции , содержащий все наборы аргументов, при которых
функция
истинна. Определите, какому столбцу таблицы истинности функции
соответствует каждая из
переменных
,
,
.
? | ? | ? | F |
0 | 0 | 0 | 1 |
1 | 0 | 0 | 1 |
1 | 0 | 1 | 1 |
Решение программой с помощью циклов:
Напишем программу, которая проверяет все возможные комбинации значений переменных x, y, z (0 или 1) и выводит только те наборы, при которых заданное логическое выражение истинно. Используя вложенные циклы, код последовательно перебирает 8 вариантов, вычисляя для каждого результат выражения, и выводит на экран подходящие комбинации.
# Выводим заголовок для наглядности (значения переменных) print("x y z") # Возможные значения переменных: 0 (False) или 1 (True) a = (0, 1) # Перебираем все возможные комбинации x, y, z for x in a: for y in a: for z in a: # Проверяем, что логическое выражение с текущим набором переменных дает истину if (not(x) and y and z) or (not(x) and not(z) and y) or (not(x) and not (y) and not(z)): # Если условие выполнено, выводим текущую комбинацию print(x, y, z)
Решение программой с помощью itertools:
Перебор комбинаций x, y, z можно также организовать с помощью функции product из модуля itertools. Она генерирует все 8 вариантов комбинаций, а затем вычисляет значение выражения для каждого случая и выводит на экран подходящие комбинации.
# Импортируем функцию для декартова произведения from itertools import product # Выводим заголовок таблицы print("x y z") # Генерируем все возможные комбинации из 0 и 1 длины 3 (для x,y,z) for x, y, z in product([0, 1], repeat=3): # Проверяем, что логическое выражение с текущим набором переменных дает истину if (not(x) and y and z) or (not(x) and not(z) and y) or (not(x) and not (y) and not(z)): # Выводим подходящую комбинацию print(x, y, z)
Запустим её и получим следующий результат:
x y z
0 0 0
0 1 0
0 1 1
Сопоставив полученный результат с условием получим, что первый столбец соответсвует переменной y, второй - переменной x, а третий - переменной z.
Аналитическое решение:
Конъюнкция внутри скобок будет истинна тогда, когда все значения между конъюнкцией будут равны 1.
Истина в первой скобке будет, если .
Истина во второй скобке будет, если .
Истина в третьей скобке будет, если .
Отсюда следует, что второй столбец - , первый -
, третий -
.
Ошибка.
Попробуйте повторить позже
Логическая функция F задаётся выражением
На рисунке приведён фрагмент таблицы истинности функции F, содержащий все наборы аргументов, при которых функции F ложна. Определите, какому столбцу таблицы истинности функции F соответствует каждая из переменных x, y, z, w.
??? | ??? | ??? | ??? | F |
0 | 0 | 0 | 1 | 0 |
0 | 0 | 1 | 1 | 0 |
1 | 0 | 1 | 1 | 0 |
В ответе напишите буквы x, y, z, w в том порядке, в котором идут соответствующие им столбцы, без пробелов и разделителей.
Решение программой с помощью циклов:
Напишем программу, которая проверяет все возможные комбинации значений переменных 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 (not y or x or (not z and w)) == 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 (not y or x or (not z and w)) == False: # Выводим подходящую комбинацию print(x, y, z, w)
После запуска программы получаем результат:
w x y z
0 0 1 0
0 0 1 1
1 0 1 1
Второй столбец из условия состоит только из нулей, запишем в него столбец x. Четвёртый столбец состоит только из единиц, запишем в него столбец y. В третий столбец запишем z, так как в нём ровно две единицы, а в первый столбец запишем столбец w.
Аналитическое решение:
Дизъюнкция ложна лишь в том случае, если выражения, между которыми она стоит, ложны.
Следовательно, всегда равен 1 (4 столбец),
всегда равен 0 (2 столбец).
Если равен 1, то
обязательно равен 1. Значит, первый столбец -
, третий -
.
Ошибка.
Попробуйте повторить позже
Логическая функция задается выражением:
Ниже представлен фрагмент таблицы истинности функции содержащий неповторяющиеся строки, при которых
фукнция
ложна.
??? | ??? | ??? | F |
0 | 1 | 1 | 0 |
0 | 0 | 1 | 0 |
1 | 1 | 1 | 0 |
Определите, какому столбцу таблицы соответствует каждая из переменных x, y, z. В ответе напишите буквы x, y, z в том порядке, в котором идут соответствующие им столбцы (сначала буква, соответствующая первому столбцу; затем буква, соответствующая второму столбцу, и т.д.). Буквы в ответе пишите подряд, никаких разделителей между буквами ставить не нужно.
Решение программой с помощью циклов:
Напишем программу, которая проверяет все возможные комбинации значений переменных x, y, z (0 или 1) и выводит только те наборы, при которых заданное логическое выражение истинно. Используя вложенные циклы, код последовательно перебирает 8 вариантов, вычисляя для каждого результат выражения, и выводит на экран подходящие комбинации.
# Выводим заголовок для наглядности (значения переменных) print("x y z") # Возможные значения переменных: 0 (False) или 1 (True) a = (0, 1) # Перебираем все возможные комбинации x, y, z for x in a: for y in a: for z in a: # Проверяем, что логическое выражение с текущим набором переменных дает истину if (not(y) or not(z <= x)) == 0: # Если условие выполнено, выводим текущую комбинацию print(x, y, z)
Решение программой с помощью itertools:
Перебор комбинаций x, y, z можно также организовать с помощью функции product из модуля itertools. Она генерирует все 8 вариантов комбинаций, а затем вычисляет значение выражения для каждого случая и выводит на экран подходящие комбинации.
# Импортируем функцию для декартова произведения from itertools import product # Выводим заголовок таблицы print("x y z") # Генерируем все возможные комбинации из 0 и 1 длины 3 (для x,y,z) for x, y, z in product([0, 1], repeat=3): # Проверяем, что логическое выражение с текущим набором переменных дает истину if (not(y) or not(z <= x)) == 0: # Выводим подходящую комбинацию print(x, y, z)
Вывод программы:
x y z
0 1 0
1 1 0
1 1 1
Выставляем буквы в соответствии с количеством единиц в столбцах. В первом столбце одна единица, значит, это z. Во втором две — это x, и в оставшемся буква y.
Аналитическое решение:
Дизъюнкция ложна только в том случае, если все выражения, между которыми она стоит, ложны.
Следовательно, всегда равен 1 и ему соответствует третий столбец.
Если , то
, значит
- первый столбец,
- второй.
Ошибка.
Попробуйте повторить позже
Логическая функция F задаётся выражением
Дан фрагмент, содержащий неповторяющиеся строки таблицы истинности функции F.
??? | ??? | ??? | ??? | F |
0 | 0 | 0 | 1 | 1 |
1 | 0 | 0 | 0 | 1 |
1 | 1 | 0 | 0 | 1 |
Определите, какому столбцу таблицы соответствует каждая из переменных x,y,w,z. В ответе напишите буквы x,y,w,z в том порядке, в котором идут соответствующие им столбцы (сначала буква, соответствующая первому столбцу; затем буква, соответствующая второму столбцу, и т.д.). Буквы в ответе пишите подряд, никаких разделителей между буквами ставить не нужно.
Решение программой с помощью циклов:
Напишем программу, которая проверяет все возможные комбинации значений переменных 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 (not(w) and (not(y) and x or not(z) and y and not(x))): # Если условие выполнено, выводим текущую комбинацию 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 (not(w) and (not(y) and x or not(z) and y and not(x))): # Выводим подходящую комбинацию print(x, y, z, w)
Получаем такой результат:
x y z w
0 1 0 0
1 0 0 0
1 0 1 0
Единственный столбик с двумя единицами — столбик с буквой x, поэтому в первый столбик записываем x. Столбик исключительно с нулями(третий) — столбик с буквой w. Далее смотрим по строке, а именно по единице, которая является единственной в строке. Такая единица принадлежит столбцу y, ставим y в четвёртый столбик. А дальше методом исключения, второй столбик — z.
Аналитическое решение:
Конъюнкция будет истинна только если все выражения, между которыми стоит конъюнкция, будут истинны.
Следовательно, всегда равен 0 и ему соответствует третий столбец.
Внутри скобки правое выражение истинно, если .
Внутри скобки левое выражение истинно, если .
в таком случае может быть любым.
Случаи не пересекаются, следовательно, первому варианту соответствует первая строка и - четвертый
столбец.
Второму варианту соответствуют вторая и третья строка, значит первый столбец - . Оставшийся столбец -
.
Ошибка.
Попробуйте повторить позже
Логическая функция F задаётся выражением
Дана таблица истинности функции F.
??? | ??? | ??? | F |
0 | 0 | 0 | 1 |
0 | 0 | 1 | 0 |
0 | 1 | 0 | 0 |
0 | 1 | 1 | 0 |
1 | 0 | 0 | 1 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 1 |
1 | 1 | 1 | 0 |
Определите, какому столбцу таблицы соответствует каждая из переменных x,y,z. В ответе напишите буквы x,y,z в том порядке, в котором идут соответствующие им столбцы (сначала буква, соответствующая первому столбцу; затем буква, соответствующая второму столбцу, и т.д.). Буквы в ответе пишите подряд, никаких разделителей между буквами ставить не нужно.
Аналитическое решение
Достаточно просто составить таблицу истинности и тогда столбцы в задании определяться однозначно:
x | y | z | F |
0 | 0 | 0 | 1 |
0 | 0 | 1 | 0 |
0 | 1 | 0 | 0 |
0 | 1 | 1 | 0 |
1 | 0 | 0 | 1 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 1 |
1 | 1 | 1 | 0 |
Программное решение
for x in range(2): for y in range(2): for z in range(2): f = ((x and not(z)) or (not(y) and not(z))) print(x, y, z, f) Запускаем данный код и получаем на выходе абсолютно такую же таблицу, что и в условии. Большинство напишет код с буквами в том же порядке, как и в условии, но всё же посмотрим, как можно по-другому отличить столбцы. Смотрим, какой результат дают буквы с единицами по одиночке. Истину даёт только x, следовательно, первый столбик принадлежит x. Далее сравниваем два оставшихся столбца. В паре с x один столбец даёт истину, другой ложь. Конкретно, истину даёт y, а ложь — z. Следовательно, второй столбик — y, третий — z.
Ошибка.
Попробуйте повторить позже
Логическая функция F задаётся выражением
Дан заполненный фрагмент, содержащий неповторяющиеся строки таблицы истинности функции F.
??? | ??? | ??? | ??? | F |
0 | 0 | 0 | 1 | 0 |
0 | 0 | 1 | 0 | 0 |
0 | 1 | 0 | 1 | 0 |
Определите, какому столбцу таблицы соответствует каждая из переменных x,y,w,z. В ответе напишите буквы x,y,w,z в том порядке, в котором идут соответствующие им столбцы (сначала буква, соответствующая первому столбцу; затем буква, соответствующая второму столбцу, и т.д.). Буквы в ответе пишите подряд, никаких разделителей между буквами ставить не нужно.
Решение программой с помощью циклов:
Напишем программу, которая проверяет все возможные комбинации значений переменных 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 <= y) and ((not(z)) <= x) or w) == 0: # Если условие выполнено, выводим текущую комбинацию 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 <= y) and ((not(z)) <= x) or w) == 0: # Выводим подходящую комбинацию print(x, y, z, w)
Получаем такой результат:
x y z w
0 0 0 0
0 1 0 0
1 0 0 0
1 0 1 0
Первый столбик — w, так как в нём нет единиц. Последний столбик — x, так как в этом столбце находится две единицы. Остальные столбики различаем по строкам, где стоят единицы. Там, где в одной строке с единицей стоит ещё единица, располагается буква z. Оставшийся столбик — y.
Решение программой с помощью автоподбора:
from itertools import * def f(w, x, y, z): return (x <= y) and (not(z) <= x) or w tb = [(0, 0, 0, 1), (0, 0, 1, 0), (0, 1, 0, 1)] if len(set(tb)) == 3: for j in permutations(list(’wxyz’)): t = [f(**dict(zip(j, k))) for k in tb] if t == [0, 0, 0]: print(j)
Аналитическое решение:
Дизъюнкция будет ложна, если все выражения, между которыми стоит дизъюнкция, равны 0. Следовательно,
всегда равно 0 и ему соответствует первый столбец.
Конъюнкция будет ложна, если хотя бы одно из выражений, между которыми стоит конъюнкция, равны 0.
Первая скобка равна 0, если , при этом
может быть как 0, так и 1 (получаются строки
.
Вторая скобка равна 0, если , при этом
может быть как 0, так и 1 (получаются строки
).
Строки в таблице нет, значит однозначно определяется строка
, из которой следует, что третий столбец
-
.
При этом обязательно должен быть равен 1, когда
, отсюда следует, что четвертый столбец -
,
оставшийся -
.
Ошибка.
Попробуйте повторить позже
Логическая функция F задаётся выражением
??? | ??? | ??? | ??? | F |
1 | 0 | 0 | 1 | 0 |
0 | 0 | 0 | 1 | 0 |
1 | 0 | 1 | 1 | 0 |
Определите, какому столбцу таблицы соответствует каждая из переменных x,y,w,z. В ответе напишите буквы x,y,w,z в том порядке, в котором идут соответствующие им столбцы (сначала буква, соответствующая первому столбцу; затем буква, соответствующая второму столбцу, и т.д.). Буквы в ответе пишите подряд, никаких разделителей между буквами ставить не нужно.
Решение программой с помощью циклов:
Напишем программу, которая проверяет все возможные комбинации значений переменных 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 (not(x <= y) or (w <= z)) == 0: # Если условие выполнено, выводим текущую комбинацию 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 (not(x <= y) or (w <= z)) == 0: # Выводим подходящую комбинацию print(x, y, z, w)
Получаем такой результат:
x y z w
0 0 0 1
0 1 0 1
1 1 0 1
В этом случае в таблице нет пропусков. Мы можем напрямую сопоставить таблицу и результат выполнения программы. По результатам получаем порядок ‘yzxw‘.
Аналитическое решение
Дизъюнкция равна 0, когда выражения, между которыми она стоит, равны 0.
Правая скобка равна 0, если . Следовательно, четвертый столбец -
, второй столбец -
.
Рассмотрим 1 строку. Если , то левая скобка даст истину. Значит в первой строке
и им
соответствуют столбцы три и один.