Перейти к содержимому

Что выполняется первым и или или

  • автор:

Алгебра логики

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

Понятие алгебры логики

Обратите внимание на этого персонажа:

Я скажу про него две вещи:

  1. Этот кот в галстуке.
  2. Этот кот белого цвета.

Очевидно, что с первым высказыванием и поспорить нельзя, а вот второе — наглая ложь. А если я захочу вас запутать: «Этот кот в галстуке или он белого цвета, из чего следует, что он белого цвета и в галстуке или не белый». Что это в итоге — правда или ложь?

Чтобы это определить, в математике есть отдельный раздел.

Алгебра логики — это раздел математики, который занимается логическими операциями над высказываниями.

Любое высказывание может быть либо истинным, либо ложным. Цель алгебры логики — определять истинность логических выражений на основании отдельных высказываний. Алгебра логики действительно может, например, складывать и умножать высказывания друг с другом, и чтобы в записи это выглядело адекватно, истину принято обозначать как 1, а ложь — как 0.

Логические выражения и операторы

Как вычислить истинность логического выражения?

Термин высказывание, мы теперь знаем. Но что такое логическое выражение? Выражение — это уравнение из высказываний, как математическое уравнение из чисел.

«Этот кот вооружен и его глаза зеленого цвета», — в одном выражении мы использовали два высказывания.

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

Например, я скажу про того же самого кота: «Этот кот вооружен и его глаза голубые». Это будет наглая ложь, так как я употребил союз И, то есть подразумеваю, что оба высказывания истинны — что неправда. Но если бы я сказал: «Этот кот вооружен или его глаза голубые», союз ИЛИ защитил бы меня от клейма лжеца. Я делаю акцент на истинности только одного высказывания из двух.

Так и работают логические операторы — в зависимости от них все выражение и принимает значение истины или лжи.

Основные логические операторы алгебры логики:

    Конъюнкция: логическое умножение или логическое И. В записи обозначается как ∧. А ∧ В дает истину только в том случае, если оба высказывания А и В истинны.

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

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

Важно сразу понять — если применить логическое сложение к двум единицам (1 ∨ 1), мы получим не 2, а все еще 1. Все-таки единица здесь означает не число, а истину, и сложив две, мы не получим одну сверх-истину.

Приоритет этих операторов:

  1. инверсия;
  2. конъюнкция;
  3. дизъюнкция;
  4. импликация;
  5. эквиваленция.

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

Таблицы истинности

В логических уравнениях высказывания используются в виде переменных, а главная проблема, которую рассматривает алгебра логики — когда точно неизвестна истинность каждого высказывания. Назовем эту ситуацию “кот в мешке”. Сказать про кота можно что угодно, но будет ли это правдой — мы не узнаем, пока не заглянем в мешок. В таких ситуациях нам может помочь таблица истинности.

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

В этой таблице содержатся все возможные наборы переменных. Количество наборов N зависит от количества различных переменных i как N = 2 i .

Чтобы удобно записать наборы, нумеруем их по порядку начиная с 0, переводим их номер в двоичную систему счисления (2сс) и записываем набор цифр.

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

  • инверсия берет только 1 переменную и сразу меняет ее значение:
  • конъюнкция берет две переменные и возвращает 1 только в том случае, если обе равны 1:
  • дизъюнкция вернет 1, если хотя бы одна из переменных равна 1:
  • эквиваленция вернет 1, если переменные равны, и 0 в противном случае:
  • импликация вернет 0, если из истины будет следовать ложь, и 1 во всех остальных случаях:
Импликацию можно выразить через дизъюнкцию:
А ⇒ В = ¬А ∨ В

Зная таблицы истинности отдельных операторов, давайте попробуем составить таблицу истинности для полного выражения.

Например, для выражения: А ∧ (В ∨ С) ≡ В ⇒ ¬А.

Важно правильно расставить порядок операций. Как и всегда, в первую очередь выполняется действие в скобках, а дальше — в порядке приоритета.

Здесь порядок операций будет следующим:

Создадим таблицу, в которой сразу пропишем все наборы 0 и 1 для переменных А и В и добавим столбцы для каждого шага вычисления.

Чтобы удобно записать наборы, пронумеруем их по порядку начиная с 0. Переведем их номер в 2сс и запишем набор цифр. У нас 3 различные переменные, поэтому должно быть 8 наборов.

  1. Первое действие — сложение В и С. Для каждого набора запишем результат сложения в соответствующий столбец.
  1. Второе действие — инверсия переменной А.
  1. Третье действие — умножение значения А на результат первого действия:
  1. Четвертое — импликация значения В и результата второго действия:
  1. И последнее действие — эквиваленция результатов 3 и 4 действий:

Последний столбец — и есть результат таблицы истинности. По нему можно сказать, что при А = 1, В = 0 и С = 1 все исходное выражение равно 1, а во всех остальных случаях — 0.

Законы логики

Их не так уж и мало: от самых простых и очевидных до достаточно хитрых; от тех, которые встречаются очень часто до довольно редких.

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

Попробуем упростить исходное выражение ¬(¬А ∧ ¬В) ∨ В ∧ С:

  1. Первым можно увидеть закон де Моргана, где у нас идет отрицание целой скобки:

¬(¬А ∧ ¬В) ∨ В ∧ С = ¬(¬А) ∨ ¬(¬В) ∨ В ∧ С

  1. Здесь же появляются переменные А и В, к которым можно применить закон двойного отрицания:

¬(¬А) ∨ ¬(¬В) ∨ В ∧ С = А ∨ В ∨ В ∧ С

  1. Можно заметить закон поглощения — В складывается с умножением В на С:

А ∨ В ∨ В ∧ С = А ∨ В

Итого, уравнение с 3 переменными и множеством отрицаний мы смогли превратить в максимально простую запись, где осталось всего 2 переменные:

¬(¬А ∧ ¬В) ∨ В ∧ С = А ∨ В

Фактчек

  • Алгебра логики — это математика, которая пользуется не числами, а высказываниями, являющимися истинными или ложными. Истина обозначается как 1, а ложь — как 0.
  • Основными логическими операторами являются инверсия, конъюнкция, дизъюнкция, импликация и эквиваленция.
  • Для расчета истинности логического уравнения используется таблица истинности.
  • Законы логики помогают сокращать логические уравнения.

Проверь себя

Задание 1.
Выберите правильный порядок приоритета логических операторов:

  1. Импликация, эквиваленция, конъюнкция, дизъюнкция, инверсия.
  2. Инверсия, конъюнкция, дизъюнкция, импликация, эквиваленция.
  3. Инверсия, конъюнкция, дизъюнкция, эквиваленция, импликация.
  4. Инверсия, дизъюнкция, конъюнкция, эквиваленция, импликация.

Задание 2.
Сопоставьте название логического оператора с упрощенным:

Инверсия А. Умножение
Эквиваленция Б. Отрицание
Импликация В. Следование
Дизъюнкция Г. Равенство
Конъюнкция Д. Сложение

Задание 3.
Чему будет равен последний столбец таблицы истинности для уравнения: А ∨ В ⇒ ¬С?

  1. 11101010
  2. 11101111
  3. 11111110
  4. 11000100

Задание 4.
Сократите логическое выражение: ¬(А ∨ В) ∧ (¬А ∨ С)

  1. ¬(А ∧ В)
  2. ¬А ∨ ¬В ∨ С
  3. ¬А ∧ ¬В ∧ С
  4. ¬А ∧ ¬В

Ответы: 1. — 2; 2. — 1Б, 2Г, 3В, 4Д, 5А; 3. — 1; 4. — 4.

Логические операторы

Здесь мы рассмотрим первые пять, операторы ?? и ??= будет в следующей статье.

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

Давайте рассмотрим их подробнее.

Оператор «ИЛИ» выглядит как двойной символ вертикальной черты:

Традиционно в программировании ИЛИ предназначено только для манипулирования булевыми значениями: в случае, если какой-либо из аргументов true , он вернёт true , в противоположной ситуации возвращается false .

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

Существует всего четыре возможные логические комбинации:

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

Если значение не логического типа, то оно к нему приводится в целях вычислений.

Например, число 1 будет воспринято как true , а 0 – как false :

Обычно оператор || используется в if для проверки истинности любого из заданных условий.

Можно передать и больше условий:

ИЛИ "||" находит первое истинное значение

Описанная выше логика соответствует традиционной. Теперь давайте поработаем с «дополнительными» возможностями JavaScript.

Расширенный алгоритм работает следующим образом.

При выполнении ИЛИ || с несколькими значениями:

Оператор || выполняет следующие действия:

  • Вычисляет операнды слева направо.
  • Каждый операнд конвертирует в логическое значение. Если результат true , останавливается и возвращает исходное значение этого операнда.
  • Если все операнды являются ложными ( false ), возвращает последний из них.

Значение возвращается в исходном виде, без преобразования.

Другими словами, цепочка ИЛИ || возвращает первое истинное значение или последнее, если такое значение не найдено.

Это делает возможным более интересное применение оператора по сравнению с «чистым, традиционным, только булевым ИЛИ».

Получение первого истинного значения из списка переменных или выражений.

Например, у нас есть переменные firstName , lastName и nickName , все они необязательные (т.е. они могут быть неопределенными или иметь ложные значения).

Давайте воспользуемся оператором ИЛИ || , чтобы выбрать ту переменную, в которой есть данные, и показать её (или «Аноним», если ни в одной переменной данных нет):

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

Сокращённое вычисление.

Ещё одной отличительной особенностью оператора ИЛИ || является так называемое «сокращённое вычисление».

Это означает, что ИЛИ || обрабатывает свои операнды до тех пор, пока не будет достигнуто первое истинностное значение, и затем это значение сразу же возвращается, даже не затрагивая другие операнды.

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

В приведенном ниже примере срабатывает только второй alert :

В первой строке оператор ИЛИ || останавливает выполнение сразу после того, как сталкивается с истинным значением ( true ), поэтому сообщение не показывается.

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

||= (Логическое присваивание ИЛИ)

Оператор логического присваивания ИЛИ ||= записывается как обычный ИЛИ || с добавлением символа присваивания = . Такая запись не случайна, так как результат выполнения данного оператора напрямую зависит от действий уже известного нам || .

Вот его синтаксис:

Оператор ||= принимает два операнда и выполняет следующие действия:

  • Вычисляет операнды слева направо.
  • Конвертирует a в логическое значение.
  • Если a ложно, присваивает a значение b .

Концепция оператора ||= заключается в «сокращённом вычислении», принцип работы которого мы разобрали ранее.

Теперь давайте перепишем a ||= b под вид «сокращённого вычисления»:

Мы уже знаем, что ИЛИ || возвращает первое истинное значение, поэтому, если a является таковым, вычисление до правой части выражения не дойдёт.

§ 4. Логические операции И и ИЛИ

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

4.1. Логическая операция И

Определение истинности или ложности составного высказывания зависит от того, являются ли истинными или ложными простые высказывания, входящие в его состав, а также от той логической операции, которая их связывает.

Составное высказывание А И В, образованное в результате объединения двух простых высказываний А и B логической операцией И, истинно тогда и только тогда, когда А и В одновременно истинны (пример 4.1 и пример 4.2).

Операцию И называют логическим умножением. Равенства 1 · 1 = 1, 1 · 0 = 0, 0 · 1 = 0, 0 · 0 = 0, верные для обычного умножения, верны и для логического умножения.

Представим таблицу истинности для логической операции И:

А И В

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

Для записи логической операции И используют следующие обозначения: A И B, A AND B, A · B, A * B, A ∧ B, A & B.

4.2. Логическая операция ИЛИ

Составное высказывание А ИЛИ В, образованное в результате объединения двух простых высказываний А и B логической операцией ИЛИ, ложно тогда и только тогда, когда А и В одновременно ложны (пример 4.3).

Другими словами, составное высказывание А ИЛИ В будет истинным, если истинно хотя бы одно из двух составляющих его простых высказываний (пример 4.4).

Таблица истинности для логической операции ИЛИ имеет следующий вид:

Операцию ИЛИ называют логическим сложением. Равенства 1 + 0 = 1, 0 + 1 = 1, 0 + 0 = 0, верные для обычного сложения, верны и для логического сложения.

Для записи логической операции ИЛИ можно использовать следующие выражения: A ИЛИ B, A OR B, A + B, A ∨ B, A | B.

Если в логическом выражении присутствует несколько логических операций, то важно определить порядок их выполнения. Наивысшим приоритетом обладает операция НЕ. Логическая операция И, т. е. логическое умножение, выполняется раньше операции ИЛИ — логического сложения (пример 4.5* и пример 4.6*).

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

Логические операции И и ИЛИ подчиняются переместительному закону:

A И B = B И A ;

A ИЛИ B = B ИЛИ A .

Чтобы определить значение составного логического выражения, иногда достаточно знать значение только одного простого высказывания.

Так, если в составном высказывании с операцией И значение хотя бы одного простого высказывания является ложным, то и значение составного высказывания будет ложным. Если в составном высказывании с операцией ИЛИ значение хотя бы одного простого будет истинным, то и значение составного высказывания будет истинным (пример 4.7).

Данное высказывание является составным, поскольку оно содержит два простых высказывания:

«Число 456 трехзначное» (высказывание А) и «Число 456 четное» (высказывание В). Высказывания А и В соединены вместе логической операцией И, в результате получено составное высказывание А И B. Высказывание А истинно, высказывание В истинно. Поэтому высказывание А И B истинно: (А И B) = 1.

Пример 4.2. Высказывание А: «Геракл — герой древнегреческой мифологии». Истинно, А = 1.

Высказывание В: «Геракл — сын бога Зевса». Истинно, B = 1.

Высказывание А И В: «Геракл — герой древнегреческой мифологии И сын бога Зевса». Истинно, (А И В) = 1.

Пример 4.3. Проанализируем высказывание «Семиклас-сники изучают философию или астрономию».

Данное составное высказывание образовано из двух простых высказываний: «Семиклассники изучают философию» (высказывание А), «Семиклас-сники изучают астрономию» (высказывание В), которые связаны логической операцией ИЛИ. В результате получилось составное высказывание А ИЛИ B. Высказывание А ложно, высказывание В ложно. Поэтому высказывание А ИЛИ B ложно: (А ИЛИ B) = 0.

Пример 4.4. Высказывание А: «Франциск Скорина — белорусский первопечатник». Истинно, А = 1.

Высказывание В: «Стефан Баторий — турецкий султан». Ложно, B = 0.

Высказывание «Франциск Скорина — белорусский первопечатник, ИЛИ Стефан Баторий — турецкий султан» будет истинным, (А ИЛИ В) = 1.

Пример 4.5*.
Рассмотрим выражение: А ИЛИ B И НЕ С. Распишем по действиям вычисление значения логического выражения:

  1. 1) D = НЕС;
  2. 2) E = BИD;
  3. 3) F = АИЛИE.

Значение высказывания F, полученное в 3-м действии, определит значение исходного логического выражения.

Пример 4.6*.
Пусть высказывание А = 1, B = 0, С = 0. Найдем значение логического выражения: А ИЛИ B И НЕ С.

  1. 1) D = НЕС = 1;
  2. 2) E = BИD = 0 И 1 = 0;
  3. 3) F = АИЛИE = 1 ИЛИ 0 = 1.

Значит, при начальных значениях А = 1, B = 0, С = 0 значение логического выражения А ИЛИ B И НЕ С истинно.

Пример 4.7. Высказывание А: «Прогноз погоды обещает дожди». Высказывание В: «Сейчас на улице идет дождь».

Высказывание А И B будет ложным, если мы увидели, что на улице нет дождя (независимо от того, что обещал прогноз погоды).

1 В каких условиях составное высказывание А И В может быть истинным?

  • Если А ложно и В истинно.
  • Если А истинно и В истинно.
  • Если А ложно, а В истинно.
  • Если А истинно, а В ложно.

2 В каких случаях составное высказывание А ИЛИ В может быть ложным?

  • Если А ложно и В ложно.
  • Если А истинно и В истинно.
  • Если А истинно, а В ложно.
  • Если А ложно, а В истинно.

  1. Мяч круглый, ИЛИ Земля плоская.
  2. Кролики — домашние животные, И баобаб растет в Беловежской пуще.
  3. Клавиатура — устройство ввода информации, ИЛИ винчестер — устройство вывода информации.
  4. М. Ю. Лермонтов написал стихотворение «Парус», И И. А. Крылов написал басню «Квартет».
  5. Сосна — хвойное дерево, И кедр — не хвойное дерево.
  6. Процессор — устройство обработки информации в компьютере, ИЛИ наушники — не устройство ввода информации.
  7. Континенты и острова — это большие участки суши.

2 О том, как прошли летние каникулы, Кира рассказала своим друзьям следующее:

  1. Я была у бабушки в деревне, и рядом с деревней было озеро.
  2. По озеру плавала лодка или утка.
  3. Мы с бабушкой насобирали малины и смородины.
  4. Я составила букет из цветов. В нем были ромашки или гвоздики.

Подготовьте к каждому из высказываний Киры рисунки, учитывая, что все высказывания истинны.

3 Откройте файл с рисунком и разложите грибы по корзинкам так, чтобы было истинным следующее высказывание: «В большой корзине все грибы съедобные, и в маленькой корзине все грибы несъедобные».

4 Откройте файл с рисунком и поставьте все цветы в вазы так, чтобы было истинным высказывание: «В синей вазе все цветы розы, или в красной вазе все цветы не красного цвета».

5* Найдите значения логических выражений, если А = 1, B = 1, С = 0, D = 0.

Логические операторы и или не кратко

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

Основы логики. Логические операции и таблицы истинности

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

Высказывание — это повествовательное предложение, про которое можно определенно сказать истинно оно или ложно (истина (логическая 1), ложь (логический 0)).

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

Логическое выражение — устное утверждение или запись, в которое, наряду с постоянными величинами, обязательно входят переменные величины (объекты). В зависимости от значений этих переменных величин (объектов) логическое выражение может принимать одно из двух возможных значений: истина (логическая 1) или ложь (логический 0).

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

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

A B F
1 1 1
1 0 0
0 1 0
0 0 0

2) Логическое сложение или дизъюнкция:

Дизъюнкция — это сложное логическое выражение, которое истинно, если хотя бы одно из простых логических выражений истинно и ложно тогда и только тогда, когда оба простых логических выраженbя ложны.
Обозначение: F = A v B.

Таблица истинности для дизъюнкции

A B F
1 1 1
1 0 1
0 1 1
0 0 0

3) Логическое отрицание или инверсия:

Инверсия — это сложное логическое выражение, если исходное логическое выражение истинно, то результат отрицания будет ложным, и наоборот, если исходное логическое выражение ложно, то результат отрицания будет истинным. Другими простыми слова, данная операция означает, что к исходному логическому выражению добавляется частица НЕ или слова НЕВЕРНО, ЧТО.

Обозначение: F = ¬ A.

Таблица истинности для инверсии

A ¬ А
1 0
0 1

4) Логическое следование или импликация:

Импликация — это сложное логическое выражение, которое истинно во всех случаях, кроме как из истины следует ложь. То есть данная логическая операция связывает два простых логических выражения, из которых первое является условием (А), а второе (В) является следствием.

Обозначение: F = A → B.

Таблица истинности для импликации

A B F
1 1 1
1 0 0
0 1 1
0 0 1

5) Логическая равнозначность или эквивалентность:

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

A B F
1 1 1
1 0 0
0 1 0
0 0 1

6) Операция XOR (исключающие или)

Обозначение: F = A ⊕ B .

A B F
1 1 0
1 0 1
0 1 1
0 0 0

Порядок выполнения логических операций в сложном логическом выражении

1. Инверсия;
2. Конъюнкция;
3. Дизъюнкция;
4. Импликация;
5. Эквивалентность.

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

Таблицы истинности можно составить и для произвольной логической функции F(a, b, c…).

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

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

Законы алгебры логики

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

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

Замечание. Знаки алгебры логики намеренно заменены на сложение и умножение.

Замена операций импликации и эквивалентности

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

Так, заменить операцию импликации можно в соответствии со следующим правилом:

A → B = ¬ A \/ B


Для замены операции эквивалентности существует два правила:

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

Они составляют основу любых дискретных алгоритмов. На использовании этих логических операций построена работа многих шкафов автоматики и релейных схем. Такие решения до сих пор массово используются на значительном числе производств. Это один из советов читателям, куда нужно применить информацию, полученную на этих страницах. Представьте, огромный шкаф релейной автоматики Вы можете заменить одним или несколькими маленькими ПЛК. При этом перестанете постоянно следить за состоянием вечно ломающихся реле.

Для того чтобы разобраться с работой дискретной логики, нам понадобится несколько входов и выходов ПЛК. Для этого Вы раскрываете элементы конфигурации ПЛК и задаете шесть дискретных входов. Пусть это будут переменные x1, х2, хЗ и т.д.

• Вы определились с target-файлом,

• создали главную программу и выбрали язык программирования,

• задали время работы цикла ПЛК,

• определились с необходимыми входами и выходами,

• сохранили проект на вашем компьютере.

Затем проводим линии связи.

Вместо знаков вопроса прописываем имя переменной y1. Затем проводим линию связи между выходом операции AND и переменной y1.

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

Постарайтесь сделать так, чтобы все элементы целиком попали в выделенную область. В результате, после отпускания ЛКМ один или несколько элементов окажутся выделенными пунктиром .

что должно было у Вас получиться.

Важный момент! С выхода одного и того же блока или из одной и той же переменной линию связи Вы можете вести на один или несколько возможных приемников этого самого сигнала. Поясню: из операции OR мы можем протянуть вторую линию связи на вход операции NOT. Для этого нажимаем ЛКМ на выход блока OR, т.е. на самый конец выходящей из него линии связи .

Удерживая ЛКМ, перетаскиваем вторую линию связи на вход блока NOT

, затем отпускаем ЛКМ. Полученный результат изображен на рисунке.

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

Тем же способом вы можете значение одной и той же переменной передавать на несколько блоков.

Для того чтобы удалить ненужную линию связи, Вы выделяете один из ее концов . Затем нажимаете на клавиатуре кнопку Del (Delete).

Вернемся к нашему алгоритму. Теперь, когда на выходе операции OR будет значение FALSE, у нас с Вами на выходе уЗ будет появляться сигнал TRUE, в то время как в переменной у2 он будет пропадать. И наоборот, когда на выходе OR появляется сигнал TRUE, он записывается в у2. В блоке NOT этот сигнал будет преобразовываться в FALSE и поступать в переменную уЗ. А в результате релейные выходы нашего ПЛК все время будут в разных состояниях.

На экране появляется копия выбранной части алгоритма. Нажав и удерживая ЛКМ на выделенных частях появившейся копии, мы перетаскиваем ее на новое место в рабочей области.

Теперь нам необходимо поменять в заголовке элемента оператор OR на оператор XOR. В качестве входных данных мы будем использовать переменные х5 и хб. Для замены имени переменной Вы просто нажимаете на соответствующий блок входа ЛКМ. Затем с клавиатуры вводите новое имя. Результат работы блока XOR будем передавать в переменную у4.

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

Перед загрузкой проекта на исполнение:

• Сохраняем проект (Ctrl+s).

Такого же эффекта можно добиться, выделив блок и нажав сочетание клавиш Ctrl+A. Если какой-то вход Вам не нужен, то выделяете его ЛКМ и нажимаете Delete на вашей клавиатуре .

Статья создана на основе книги Кирилла Гайнутдинова «Простое и понятное программирование в CODESYS».

Когда мы изучали условия if-else, операторы сравнения и равенства и булевы значения, то при этом нам приходилось работать с логикой, учиться ей.

Здесь в этой статье пойдет речь о булевой логике.

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

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

Это очень похоже на арифметические операторы, которые работают с числовыми значениями.

Итак, основные логические операторы – это операторы: И, ИЛИ и НЕ.

Стоит отметить, что булева логика не является спецификацией Javascript . Она верна для всего программирования.

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

Логический оператор И — Таблица Истинности

Итак, для примера мы имеем две булевы переменные, которые могут быть либо истинны true , либо ложны false .

A: Sarah has a driver’s license — У Сары есть водительские права.

B: Sarah has good vision — У Сары хорошее зрение.

Каждое из этих высказываний является условием, которое может быть либо истинным, либо ложным: true или false . Потому что Сара может НЕ иметь водительских прав и НЕ иметь хорошего зрения .

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

Что будет результатом это операции?

Для этого существует так называемая таблица истинности. Ее вы можете видеть на иллюстрации выше. Здесь мы видим два возможных варианта для каждой из переменных. А само выражение A И B в качестве результата имеет 4 возможных комбинации .

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

Итак, что мы можем видеть в этой таблице: только в том случае, если A и B истинны , то есть принимают значение true , только тогда результатом операции А И В будет также истина true .

И это имеет смысл. В этом есть логика. В конце концов, он называется логический оператор И. Итак, еще раз: что оператор И делает? Он возвращает true только, если оба значения выражения A И B истинны .

Во всех других ситуациях , если одна или каждая из переменных A и B ложны — принимают значение false , результат будет false .

Конечно, это правило распространяется и на большее количество операндов. Переменных может быть больше чем две. Например, три A и B и C. При этом результат будет истинным — true , если каждая из этих переменных истинна. И соответственно если любая из них принимает значение false , то и результат будет ложным.

Все это, конечно, может сбить вас с толку.

Но не стоит волноваться, дальше мы будем работать с примерами, и на практике все прояснится. И со временем не нужна будет таблица истинности.

Двигаемся дальше и переходим к логическому оператору ИЛИ.

Логический оператор ИЛИ

Логический оператор ИЛИ работает иначе.

Рассмотрим наш пример с оператором ИЛИ. Является Сара водителем ИЛИ она хорошо видит? Если немного подумать, то мы можем уже интуитивно сообразить, что в случае с оператором ИЛИ мы получим истину true , если хотя бы одна из переменных будет принимать значение true . И таблица истинности для оператора ИЛИ подтверждает это.

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

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

Все это будет иметь больший смысл, как только мы начнем изучать это на практике.

Но у нас еще есть оператор НЕ.

Оператор НЕ

Понять, как работает оператор НЕ намного проще. Потому что он не объединяет несколько значений.

Оператор НЕ действует только на одно логическое значение и по существу просто переворачивает/инвертирует его (меняет значение на противоположное).

Так если А — true , то оно станет false .

Если же А — это false , то НЕ А — это true . Все очень просто.

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

Примеры работы с операторами И ИЛИ и НЕ

Есть переменная age = 16 и есть две логические переменные:

A: Age is greater or equal 20 (возраст больше или равен 20) и

B: Age is less than 30 (возраст менее 30 лет)

Давайте определим их значения

Итак, если age = 16 , то этот нельзя сказать, что этот возраст больше или равен 20 , поэтому переменная A это false .

Но можно сказать, что 16 — это возраст менее 30 лет , поэтому переменная B это true .

Теперь давайте работать с переменными A и B, используя логические операторы.

Работа с оператором НЕ

A —> false — A это false , НО

!A —> true — НЕ A это true .

Для переменной B наоборот:

B —> true — B это true , НО

!B —> false — НЕ B это false .

Итак, все, что делает оператор НЕ — это инвертирует (меняет на противоположное) логическое значение переменной .

Работа с оператором И

Итак, мы уже знаем, что A это false , а B это true .

Каков результат выражения A И B ?

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

A —> false И B —> true = false

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

Работа с оператором ИЛИ

Каков результат выражения A ИЛИ B ?

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

A —> false ИЛИ B —> true = true

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

Работа с операторами И и НЕ

Добавим в логическое выражение для оператора И оператор НЕ:

!A —> true И B —> true = true

Работа с операторами ИЛИ и НЕ

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

Итак, в выражении A ИЛИ НЕ B сначала выполняется оператор НЕ, и только потом ИЛИ.

A —> false ИЛИ !B —> false = false

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

Хотя операторы отношения (сравнения) могут использоваться для проверки того, является ли конкретное условие истинным или ложным, они могут проверять только одно условие за раз. Но часто нам нужно знать, выполняются ли одновременно несколько условий. Например, чтобы проверить, выиграли ли мы в лотерею, мы должны сравнить, все ли выбранные нами числа совпадают с выигрышными числами. В лотерее с 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 , чтобы прийти к (true || [3 != 3]) , и вычислили его, чтобы прийти к true . 3 != 3 никогда не выполнялся из-за вычисления по короткой схеме.

a) (true && true) || false

b) (false && true) || true

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *