Задание №2.
Знание на умение строить таблицы истинности и логические схемы. Уровень сложности задания - базовый, максимальный балл за выполнение - 1, примерное время выполнения задания - 3 минуты.
Знать: основные логические операции и законы алгебры логики.
Уметь: применять законы алгебры логики для упрощения логических выражений.
Пример задания (Статград от 17.03.2021 г.)Логическая функция F задаётся выражением:
(y → z) /\ ¬((y \/ w) → (z /\ x))
Дан частично заполненный фрагмент, содержащий неповторяющиеся строки таблицы истинности функции F. Определите, какому столбцу таблицы истинности соответствует каждая из переменных w, x, y, z.
В ответе напишите буквы w, x, y, z в том порядке, в котором идут соответствующие им столбцы (сначала буква, соответствующая первому столбцу; затем буква, соответствующая второму столбцу, и т. д.). Буквы в ответе пишите подряд, никаких разделителей между буквами ставить не нужно.
Разбор задания 2_1. Конечно, такое задание можно решить, немного подумав логически, но, на мой взгляд, это не совсем эффективно. В данном задании сложно определить расположение хотя бы одной из переменных в таблице, необходимо построить сначала таблицу истинности для данной функции. Сделать это можно и на листке бумаги, но эффективнее с этой задачей справиться программа на любом из языков программирования. Я предложу решение на Python (просто код короче).
Код программы:
print('x y z w')
for x in range(2):
for y in range(2):
for z in range(2):
for w in range(2):
if (y <= z) and not((y or w) <= (z and x)):
print(x, y, z, w)
Результат работы программы:
Обратим внимание на то, что в задании в таблице нет ни одной строки с тремя нулями. Вычеркнем её в таблице истинности:
У нас в таблице истинности есть строка с тремя единицами и одним нулём, из которой следует, что ноль соответствует столбу переменной x:
Одну переменную определили:
Далее, анализируя таблицу истинности, можно заметить, что в единственной строке, где переменная x равна единице, ещё одна переменная равна единице и эта переменная – w.
Отметим столбец с переменной w и заполним таблицу недостающими значениями:
Переменная w, исходя из условия, всегда равна единице, следовательно, удалим ещё одну строку из таблицы истинности:
Теперь видно из второй строки таблицы истинности, что кроме переменной w, значение единица есть у переменной z. Отметим её в таблице с условием в первом столбце, а в последнем столбце поместим недостающую переменную y.
Ответ: zwxy.
Разбор кода программы построчно.
print('x y z w') – вывод на экран строки x y z w
for x in range(2): – организуем перебор значений переменной x, а значений таких только два – ноль и единица
for y in range(2): – цикл в цикле: для всех значений переменной x перебираем все значения переменной y
for z in range(2): – цикл в цикле: для всех значений переменной y перебираем все значения переменной z
for w in range(2): – цикл в цикле: для всех значений переменной z перебираем все значения переменной w
if (y <= z) and not((y or w) <= (z and x)): – каждый раз при переборе значений переменных x, y, z , w проверяется условие истинности(ложности) логического выражения. В нашем задании значение функции F всегда равно единице, в противном случае, если в условии задания значение функции F равно нулю, в строке проверки условия необходимо добавить значение False.
if (y <= z) and not((y or w) <= (z and x)) == False:
print(x, y, z, w) – каждый раз, когда значение логического выражения будет истинно, будут выводиться значения переменных x, y, z, w.