Использование закона Де Моргана для написания выражений на С - PullRequest
0 голосов
/ 17 февраля 2019

Мне трудно понять закон де Моргана и его отношение к булевой логике и выражениям.Специально переписывать эквивалентные выражения, используя логическую логику и &&, ||, и!операторы.

Итак, я знаю, что в программировании на Си закон де Моргана - это способ переопределить выражение по-разному (используя NOT, OR, AND), пока оно остается эквивалентным.

Например,:

!(condition1 && condition2)

Также равно:

!condition1 || !condition two

И:

condition1 && !(condition2)

Также равно:

condition1 || !condition2 

(мы просто умножаемздесь скобка с оператором унарного отрицания НЕ? Как в хорошие дни алгебры оле?)

Когда мой мозг начинает жариться, это когда я оцениваю немного более хитрое выражение, и как сделать это заново?напишите это с помощью логической логики.Я искал любые прошлые темы, с некоторой помощью, но все еще не могу обернуть мою голову вокруг этого.Я начал писать таблицы истинности, но не мог понять, как создать таблицу, основанную на выражении, подобном приведенному ниже.Я прилагаю все усилия, поэтому, пожалуйста, извините за любые ошибки или плохую практику.

(ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ, НИЖЕ КОД НЕ ТЕХНИЧЕСКИ ПОЛНЫЙ КОД, ПРОСТО ПРИМЕР ВЫРАЖЕНИЯ, ВКЛЮЧИТЬ В КОД C.)

Я не могу включить это ни в одну из своих программ на C, потому что просто не могу его получить.

например:

!( a > 12 ) && !(b >= 3 )

по существу заявляет (истина перед НЕ):

a > 12 && b >= 3

означает, что A больше 12, а b больше или равно 3.

Примите это к истинетаблица:

a   b   a&&b

1   0   false - a is greater than 12, but b is not greater than or equal to 3.

0   1   false - this time a is less than 12 while b >= 3.

0   0   false - a is not > 12 and b is not >= 3.

1   1   true -  a is greater than 12, and b is >= 3.

Теперь примените оператор NOT: (с этого я начинаю заблудиться)

!( a > 12 ) && !( b >= 3 )

и напишите (попытайтесь) эквивалент, используя закон Де Моргана: так что ...

!( a > 12 ) && !( b >= 3 )

ЭКВИВАЛЕНТНО

a < 12 || b < 3 

(есть ли способ сравнить их в таблице истинности, чтобы увидеть, действительно ли они эквивалентны?)

Другойодин, на этот раз немного сложнее ...

!( a == b ) && !( c != 2 )

РАВНОМЕРНО:

(a != b) || (c = 2)

наконец

!( (a < 9 ) || ( b <=3 ) )

ЭКВИВАЛЕНТНО ДЛЯ:

a > 9 && b > 3

Я не уверен, верно ли что-либо из этого, но я решил, что лучше всего перестать читать об этом и просто попытатьсяэто.

Ответы [ 2 ]

0 голосов
/ 17 февраля 2019

Это было давно, но то, как я всегда это помню, дает общее выражение:

A op B (where op is and,or) NOTE: A and B could be "sub-expressions"

1) Change or to and, and to or
2) Invert the individual terms
3) Invert the entire expression

A and B => !(!A or !B)

A or B => !(!A and !B)

Таблицы истинности для случаев A и B:

A B | A&B
------------
T T |  T   
T F |  F   
F T |  F   
F F |  F


A B   !A !B   !A|!B   !(!A|!B)
------------------------------
T T    F  F     F         T
T F    F  T     T         F
F T    T  F     T         F
F F    T  T     T         F
0 голосов
/ 17 февраля 2019

Похоже, вы смотрите на условные части и продуманные вещи.

Давайте посмотрим на правила:

not A AND not B = not (A OR B)
not A OR not B = not (A AND B)

На простом английском это означает, что вы можете распространятьНЕ и инвертировать И и ИЛИ.Поэтому, учитывая это выражение:

!( a > 12 ) && !(b >= 3 )

Это соответствует первой версии правила.Оставив > и >= такими, как они есть, вы можете распределить НЕ с обеих сторон и получить это:

!(( a > 12 ) || (b >= 3 ))

И получает изменения в ИЛИ, и (это та часть, которую выпропустил) НЕ вытаскивается.Точно так же это:

!( a == b ) && !( c != 2 )

Становится:

!(( a == b ) || ( c != 2 ))

Тогда последний:

!( (a < 9 ) || ( b <=3 ) )

Превращается в это по законам Деморгана:

!(a < 9 ) && !(b <=3 )

Затем переключаем условные выражения:

(a >= 9 ) && (b > 3 )

Я думаю, что вы запутались в том, что вы попытались перевернуть условные выражения и одновременно применить законы Деморгана.Не делай этого.Выполняйте каждую часть отдельно при необходимости.

...