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