Как сделать логическое и

Добавил пользователь Владимир З.
Обновлено: 05.10.2024

Например, логическое выражение abc+ab~c+a~bc необходимо ввести так: a*b*c+a*b=c+a=b*c
Для ввода данных в виде логической схемы используйте этот сервис.
Для булевой функции, заданной вектором значений (например, 00111011 ) используйте ввод данных через таблицу.

Правила ввода логической функции

  1. Вместо символа v (дизъюнкция, ИЛИ) используйте знак + .
  2. Перед логической функцией не надо указывать обозначение функции. Например, вместо F(x,y)=(x|y)=(x^y) необходимо ввести просто (x|y)=(x^y) .
  3. Максимальное количество переменных равно 10 .
  • словесное описание – это форма, которая используется на начальном этапе проектирования имеет условное представление.
  • описание функции алгебры логики в виде таблицы истинности.
  • описание функции алгебры логики в виде алгебраического выражения: используется две алгебраические формы ФАЛ:
    а) ДНФ – дизъюнктивная нормальная форма – это логическая сумма элементарных логических произведений. ДНФ получается из таблицы истинности по следующему алгоритму или правилу:
    1) в таблице выбираются те строки переменных для которых функция на выходе =1 .
    2) для каждой строки переменных записывается логическое произведение; причём переменные =0 записываются с инверсией.
    3) полученное произведение логически суммируется.
    Fднф= X 123 ∨ Х1 x 2Х3 ∨ Х1Х2 x 3 ∨ Х1Х2Х3
    ДНФ называется совершенной, если все переменные имеют одинаковый ранг или порядок, т.е. в каждое произведение обязательно должны включаться все переменные в прямом или инверсном виде.
    б) КНФ – конъюнктивная нормальна форма – это логическое произведение элементарных логических сумм.
    КНФ может быть получена из таблицы истинности по следующему алгоритму:
    1) выбираем наборы переменных для которых функция на выходе =0
    2) для каждого набора переменных записываем элементарную логическую сумму, причём переменные =1 записываются с инверсией.
    3) логически перемножаются полученные суммы.
    Fскнф=(X1 V X2 V X3) ∧ (X1 V X2 V X 3) ∧ (X1 V X 2 V X3) ∧ ( X 1 V X2 V X3)
    КНФ называется совершенной, если все переменные имеют одинаковый ранг.

Все операции алгебры логики определяются таблицами истинности значений. Таблица истинности определяет результат выполнения операции для всех возможных логических значений исходных высказываний. Количество вариантов, отражающих результат применения операций, будет зависеть от количества высказываний в логическом выражении. Если число высказываний в логическом выражении N, то таблица истинности будет содержать 2 N строк, так как существует 2 N различных комбинаций возможных значений аргументов.

Люди постоянно используют логику в жизни и работе. Простые рассуждения, логические операции или таблицы истинности – все это помогает принимать решения, находить правильные ответы, создавать цепочки и схемы взаимосвязей. А применение универсальных инструментов позволяет работать только над чистыми данными, их связями, без использования лишней информации.

Обложка урока взята с источника.

План урока:

Универсальный подход помогает решать разнотипные задачи, даже не вникая в условие детально. Именно для этого нужны логические задачи и универсальные способы решения. Существует множество подходов, но наиболее распространены 3 основных:

  • Способ рассуждений.
  • Табличный способ.
  • Решение при помощи средств логики.

Первый позволяет находить правильный ответ, обдумывая каждый пункт задачи, делая выводы из каждого условия. Этим методом мы пользуемся постоянно, в обычной жизни, решая простые бытовые примеры. Он простой, но для сложных задач не подходит.

Табличный метод сокращает форму записи примера и позволяет перебрать все возможные значения исходных данных, анализируя результат, полученный при каждой комбинации. Это очень наглядно, компактно и позволяет использовать обычные слова или же логические обозначения.

Алгебра логики и решение задач

Несмотря на то, что логика, как наука о размышлении, существовала еще 5 в. До н.э., теперь это важная часть многих наук, а не только философии и риторики. Также логика существует, как отдельная наука уже более 200 лет.

Инструменты алгебры логики позволяют переводить словесные высказывания в сухие, объективные выражения, а с их помощью выполнять различные логические операции.Появился этот раздел математики 200 лет назад.

Стоит остановиться на базовых понятиях алгебры логики:

  • константы (0,1);
  • переменные;
  • формула;
  • знаки операций;
  • скобки.

Логическая переменная – обозначение логического выражения, которое может быть true (t, правда, истина, да, 1) – false (f, ложь, нет, 0).

Формула– символьный способ выражения операции между переменными при помощи специальных знаков и скобок ().

Логическое высказывание – утверждение, в котором говорится только правда или только ложь.

Элементарные высказывания – те, к которым нельзя применить понятие истинности или ложности. Их обозначают различными символами (латинские буквы, цифры), знаками. Ими занимаются те сферы, к которым они относятся. Они входят в состав высказываний логики.

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

Чтобы образовать такое составное предложение в обычной жизни, используют связки И, ИЛИ, НЕ. А научный подход заменил их на конъюнкцию, дизъюнкцию, инверсию и более сложные операции. Все эти процессы выражают словесно, таблично (таблицы истинности) или графически (диаграммы Эйлера-Венна).

Простые выражения содержат лишь одно выражение (правдивое или нет), и не содержит никаких логических операций.

Сложные могут содержать от 2 и больше аргументов (простых выражений), которые между собой связаны логическими операциями.

Диаграммы позволяют наглядно увидеть результат большинства логических функций:

Конъюнкция множеств А и В:

Сложное выражение (Ā)∨(A∧B), составленное из элементарных Ā, A∧B и их комбинации, графическое выражение:

Хотя операторы отношения (сравнения) могут использоваться для проверки того, является ли конкретное условие истинным или ложным, они могут проверять только одно условие за раз. Но часто нам нужно знать, выполняются ли одновременно несколько условий. Например, чтобы проверить, выиграли ли мы в лотерею, мы должны сравнить, все ли выбранные нами числа совпадают с выигрышными числами. В лотерее с 6 числами это будет включать 6 сравнений, и все они должны быть верными. В других случаях нам нужно знать, выполняется ли какое-либо из нескольких условий. Например, мы можем решить пропустить работу сегодня, если мы заболели, или если мы слишком устали, или если мы выиграли в лотерею в нашем предыдущем примере. Это потребует проверки того, верно ли какое-либо из трех сравнений.

Возможность тестирования несколько условий нам дают логические операторы.

В C++ есть 3 логических оператора:

Логические операторы
ОператорОбозначениеПример использованияОперация
Логическое НЕ (NOT) ! !x true , если x равен false ; или false , если x равен true
Логическое И (AND) && x && y true , если и x ,и y равны true ; в противном случае – false
Логическое ИЛИ (OR) || x || y true , если x или y равен true ; в противном случае – false

Логическое НЕ (NOT)

Логическое НЕ (оператор ! )
ОперандРезультат
true false
false true

Если операнд логического НЕ вычисляется как true , логическое НЕ вычисляется как false . Если операнд логического НЕ вычисляется как false , логическое НЕ вычисляется как true . Другими словами, логическое НЕ меняет логическое значение с true на false и наоборот.

Логическое НЕ часто используется в условных выражениях:

Следует остерегаться того, что логическое НЕ имеет очень высокий уровень приоритета. Начинающие программисты часто делают следующую ошибку:

Эта программа напечатает:

Правильный способ написать приведенный выше фрагмент:

Таким образом, сначала будет вычислено x > y , а затем логическое НЕ инвертирует логический результат.

Лучшая практика

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

Простое использование логического НЕ, например if (!value) , не требует скобок, потому что приоритет здесь не играет роли.

Логическое ИЛИ (OR)

Оператор логического ИЛИ используется для проверки того, выполняется ли одно из двух условий. Если значение левого операнда истинно, или значение правого операнда истинно, или оба значения истинны, то логический оператор ИЛИ возвращает true . В противном случае он вернет false .

Логическое ИЛИ (оператор || )
Левый операндПравый операндРезультат
false false false
false true true
true false true
true true true

Например, рассмотрим следующую программу:

В этом случае мы используем логический оператор ИЛИ, чтобы проверить, истинно ли левое условие ( value == 0 ) или правое условие ( value == 1 ). Если одно из них (или оба) истинны, логический оператор ИЛИ принимает значение true , что означает выполнение инструкции if . Если ни одно из них не является истинным, результат логического оператора ИЛИ будет false , что означает выполнение инструкции else .

Вы можете связать вместе множество операторов логического ИЛИ:

Логическое И (AND)

Логический оператор И используется для проверки истинности обоих операндов. Если оба операнда равны true , логическое И возвращает true . В противном случае возвращается false .

Логическое И (оператор && )
Левый операндПравый операндРезультат
false false false
false true false
true false false
true true true

Например, нам может потребоваться узнать, находится ли значение переменной x в диапазоне от 10 до 20. На самом деле это два условия: нам нужно знать, больше ли x , чем 10, а также меньше ли x , чем 20.

В этом случае мы используем оператор логическое И, чтобы проверить, истинны ли левое условие ( value > 10 ) и правое условие ( value ). Если оба условия истинны, оператор логическое И принимает значение true , и выполняется инструкция if . Если ни одно из условий или хотя бы одно из них не соответствует истине, оператор логическое И принимает значение false , и выполняется инструкция else .

Как и в случае с логическим ИЛИ, вы можете связать вместе множество операторов логическое И:

Если все эти условия верны, будет выполнена инструкция if . Если какое-либо из этих условий ложно, будет выполняться инструкция else .

Вычисление по короткой схеме

Чтобы логическое И возвращало true , оба операнда должны иметь значение true . Если первый операнд вычисляется как false , логическое И знает, что оно должно возвращать false , независимо от того, вычисляется ли второй операнд как true или false . В этом случае оператор логическое И немедленно вернет false , даже не вычисляя второй операнд! Это известно как вычисление по короткой схеме и выполняется в основном в целях оптимизации.

Точно так же, если первый операнд для логического ИЛИ равен true , тогда всё условие ИЛИ должно вычисляться как true , и второй операнд не вычисляется.

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

Если x не равно 1, всё условие должно быть ложным, поэтому ++y никогда не вычисляется! Таким образом, y будет инкрементироваться только в том случае, если x равен 1, что, вероятно, не совсем то, что задумывал программист!

Предупреждение

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

Как и в случае с логическим и побитовым ИЛИ, начинающие программисты иногда путают оператор логическое И ( && ) с оператором побитовое И ( & ).

Смешивание И и ИЛИ

Смешивания операторов логическое И и логическое ИЛИ в одном выражении часто невозможно избежать, но это область, полная потенциальных опасностей.

Многие программисты предполагают, что логическое И и логическое ИЛИ имеют одинаковый приоритет (или забывают, что это не так), точно так же, как сложение/вычитание и умножение/деление. Однако логическое И имеет более высокий приоритет, чем логическое ИЛИ, поэтому операторы логическое И будут вычисляться перед операторами логическое ИЛИ (если они не заключены в скобки).

Начинающие программисты часто пишут такие выражения, как value1 || value2 && value3 . Поскольку логическое И имеет более высокий приоритет, это выражение вычисляется как value1 || (value2 && value3) , а не как (value1 || value2) && value3 . Надеюсь, это то, чего хотел программист! Если программист предполагал вычисление слева направо (как это происходит со сложением/вычитанием или умножением/делением), он или она получит не тот результат, который не ожидался!

При смешивании логического И и логического ИЛИ в одном выражении рекомендуется явно заключать в скобки каждый оператор и его операнды. Это помогает предотвратить ошибки приоритета, упрощает чтение кода и четко определяет, как вы рассчитывали вычислять выражение. Например, вместо записи value1 && value2 || value3 && value4 , лучше написать (value1 && value2) || (value3 && value4) .

Лучшая практика

При смешивании логического И и логического ИЛИ в одном выражении явно заключите каждую операцию в скобки, чтобы убедиться, что они вычисляются так, как вы хотите.

Закон де Моргана

Закон де Моргана говорит нам, как логическое НЕ должно распределяться в этих случаях:

Другими словами, когда вы распределяете логическое НЕ, вам также необходимо преобразовать логическое И в логическое ИЛИ, и наоборот!

Иногда это может быть полезно при попытке упростить чтение сложных выражений.

Где логический оператор исключающее ИЛИ (XOR)?

Логический оператор исключающее ИЛИ (XOR) – это логический оператор, представленный на некоторых языках, который используется для проверки истинности нечетного числа условий.

Логическое исключающее ИЛИ
Левый операндПравый операндРезультат
false false false
false true true
true false true
true true false

В C++ нет оператора л огическое исключающее ИЛИ . В отличие от логического ИЛИ или логического И, логическое исключающее ИЛИ не может быть вычислено по короткой схеме. По этой причине создание оператора логическое исключающее ИЛИ из операторов логического ИЛИ и логического И является сложной задачей. Однако вы можете легко имитировать логическое исключающее ИЛИ (XOR), используя оператор неравенства ( != ):

Это выражение можно расширить до нескольких операндов следующим образом:

Обратите внимание, что приведенные выше шаблоны логического исключающего ИЛИ работают только в том случае, если операнды являются логического типа (не целочисленными значениями). Если вам нужна форма логического исключающего ИЛИ, которая работает с не-логическими операндами, вы можете использовать static_cast для преобразования их в bool :

Небольшой тест

Вопрос 1

Вычислите следующие выражения.

означает, что мы вычислили (1 , чтобы прийти к (true || [3 != 3]) , и вычислили его, чтобы прийти к true . 3 != 3 никогда не выполнялся из-за вычисления по короткой схеме.

a) (true && true) || false

b) (false && true) || true

Вычисление по короткой схеме имеет место быть, если первый операнд || равен true .

Логические элементы

Базовых логических элементов (логических вентилей) всего три: элемент НЕ, элемент И, элемент ИЛИ. Каждый из логических элементов реализует соответствующую логическую операцию и имеет условное графическое обозначение.

Элемент НЕ (инвертор)

Принцип работы инвертора:

Элемент И

Элемент И реализует операцию логического умножения.

Принцип работы логического элемента И:

Элемент ИЛИ

Элемент ИЛИ реализует операцию логического сложения.

Принцип работы логического элемента ИЛИ:

Комбинированные элементы

На практике часто используются комбинированные элементы И-НЕ и ИЛИ-НЕ. С помощью логических элементов И-НЕ можно реализовать любую из базовых логических операций, а значит и построить любую логическую схему. То же самое можно сделать и с применением элемента ИЛИ-НЕ.

Элемент И-НЕ последовательно реализует операцию логического умножения, а затем инверсию полученного результата. С помощью базовых элементов И-НЕ можно представить следующим образом:

Принцип работы логического элемента И-НЕ:

Базовые логические элементы, построенные на основе элементов И-НЕ:

Логический элемент НЕ из элемента И-НЕ


Логический элемент И из элементов И-НЕ


Логический элемент ИЛИ из элементов И-НЕ

ИЛИ-НЕ

Элемент ИЛИ-НЕ последовательно реализует операцию логического сложения, а затем инверсию полученного результата. С помощью базовых элементов ИЛИ-НЕ можно представить следующим образом:

Принцип работы логического элемента ИЛИ-НЕ:

Исключающее ИЛИ (XOR)

Элемент Исключающее ИЛИ реализует операцию логического сложения по модулю 2.

На выходе элемента Исключающее ИЛИ будет логическая 1, если только один из входов равен 1, во всех остальных случаях, на выходе будет 0.

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

Чарльз Пирс

Чарльз Пирс
(Charles Peirce)
1839 — 1914

Американский математик, логик, философ.
В 80-х годах XIX века Пирс осознал, что булеву алгебру можно использовать в качестве модели электрических переключательных схем.
Электрический переключатель либо пропускает ток (что соответствует значению "Истина"), либо не пропускает (что соответствует значению "Ложь"). Другими словами, логика могла быть представлена с помощью электрической сети. Это означало, что в принципе возможно создать электрические вычислительные и логические машины.
Пирсом была предпринята попытка создания первой электрической логической схемы. В честь него названа одна из логических операций – стрелка Пирса.

Сайт находится в разработке, поэтому, пожалуйста, проявите снисходительность к тому, что материалов, пока мало.

Читайте также: