простые логические выражения в 1С
Внутренний язык программирования 1С 8.3 для начинающих программистов: простые логические выражения в 1САвтор уроков и преподаватель школы: Владимир Милькин
На прошлом занятии мы научились давать имена и вводить их значения от пользователя.
Наберитесь сил и терпения. Занятия №5 и №6 будут трудными, но очень важными для дальнейшего понимания программирования в 1С. Поэтому, если хоть что-то останется непонятным или нераскрытым — перечитывайте, вдумывайтесь, задавайте вопросы.
Простые логические выраженияСегодня, к уже изученным типам данных (строка, число и дата) добавим ещё один — логический тип. Он может принимать всего два значения: Истина или Ложь.
Значение логического типа (Истина или Ложь) является результатом некоторого логического выражения.
Логическое выражение — это выражение, составленное при помощи операций сравнения. Сравнивать можно числа, даты, строки и другие данные. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. О логическом выражении можно сказать, верно оно (Истина) или неверно (Ложь).
Операции сравнения бывают следующие:
Операция | Обозначение в языке 1С |
---|---|
Равно | = |
Не равно | <> |
Больше | > |
Меньше | < |
Больше или равно | >= |
Меньше или равно | <= |
Думаю, интуитивно понятно, что обозначает каждая из операций.
Читается, например, так:
- 1 = 1 («один равен одному»).
- 4 <> 5 («четыре не равно пяти»)
- 3 > 1 («три больше одного»).
Обращаю ваше внимание, что перечисленные три примера логических выражений принимают значение Истина, так как все они верны.
Разберем на примере:
Пример логического выражения | Результат | Объяснение |
---|---|---|
1 = 2 | Ложь | неверно, единица на самом деле не равна двойке |
1 = 1 | Истина | верно, единица равна единице |
выражение «Земля» <> «Луна» | Истина | верно, строка «Земля» не равна строке «Луна» |
‘18610101’ <> ‘18610101’ | Ложь | неверно, дата 01. 01.1861 на самом деле равна дате 01.01.1861 |
100 > 50 | Истина | верно, сто действительно больше пятидесяти |
10 < 0 | Ложь | неверно, на самом деле десять больше нуля |
Задание №14. Укажите для каждого логического выражения его результат — Истина или Ложь.
- «Венера» = «Юпитер»
- «Венера» <> «Юпитер»
- 123 = 321
- 123 < 321
- 123 <= 321
- 123 <= 123
- ‘20000101’ <> ‘20140101’
- ‘20000101’ = ‘20000101’
- ‘20140101’ > ‘20120101’
- 25 + 25 = 50
- 2 * (10 + 10) > 50
- «Юрий» + » Гагарин» = «Юрий Гагарин»
Попытайтесь ответить на все вопросы самостоятельно. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Затем посмотрите ответы ниже и попытайтесь разобраться, если где-то ошиблись.
Ответы
Но, что же мы сами-то считаем «верно» или «неверно «. Ведь у нас под рукой компьютер! Давайте возложим эту задачу на него, а заодно и проверим себя.
К примеру, проверим выражение 2 * (10 + 10) > 50.
Для этого напишем такую программу:
Если мы запустим её, то компьютер выдаст «Нет», что означает — результат равен Ложь.
Задание №15. Вычислите все примеры логических выражений из предыдущего задания на компьютере.
Например, выражение «Венера» = «Юпитер», значение которого, как мы выяснили, равно Ложь.
Компьютер при запуске выводит значение «Нет», что означает: результат действительно равен Ложь и мы совершенно верно вычислили его сами.
PostgreSQL : Документация: 14: 9.2. Функции и операторы сравнения : Компания Postgres Professional
Набор операторов сравнения включает обычные операторы, перечисленные в Таблице 9.1.
Таблица 9.1. Операторы сравнения
Оператор | Описание |
---|---|
тип_данных < тип_данных → boolean | Меньше |
тип_данных > тип_данных → boolean | Больше |
тип_данных <= тип_данных → boolean | Меньше или равно |
тип_данных >= тип_данных → boolean | Больше или равно |
тип_данных = тип_данных → boolean | Равно |
тип_данных <> тип_данных → boolean | Не равно |
тип_данных != тип_данных → boolean | Не равно |
Примечание
В стандарте SQL для условия «не равно» принята запись <>
. Синонимичная ей запись !=
преобразуется в <>
на самой ранней стадии разбора запроса. Как следствие, реализовать операторы !=
и <>
так, чтобы они работали по-разному, невозможно.
Эти операторы сравнения имеются для всех встроенных типов данных, значения которых сортируются естественным образом, включая числовые, строковые типы, а также типы даты/времени. Кроме того, сравниваться могут массивы, составные типы и диапазоны, если типы данных их компонентов являются сравниваемыми.
Обычно можно сравнивать также значения связанных типов данных; например, возможно сравнение integer
>
bigint
. Некоторые подобные операции реализуются непосредственно «межтиповыми» операторами сравнения, но если такого оператора нет, анализатор запроса попытается привести частные типы к более общим и применить подходящий для них оператор сравнения.
Как показано выше, все операторы сравнения являются бинарными и возвращают значения типа boolean
. Таким образом, выражения вида 1 < 2 < 3
недопустимы (так как не существует оператора <
, который бы сравнивал булево значение с 3
). Для проверки нахождения значения в интервале, воспользуйтесь предикатом BETWEEN
, описанным ниже.
Существует также несколько предикатов сравнения; они приведены в Таблице 9.2. Они работают подобно операторам, но имеют особый синтаксис, установленный стандартом SQL.
Таблица 9.2. Предикаты сравнения
Предикат Описание Пример(ы) |
---|
Между (включая границы интервала).
|
Не между (обратное к
|
Между, после сортировки граничных значений.
|
Не между, после сортировки граничных значений.
|
Не равно, при этом NULL воспринимается как обычное значение.
|
Равно, при этом NULL воспринимается как обычное значение.
|
Проверяет, является ли значение эквивалентным NULL.
|
Проверяет, отличается ли значение от NULL.
|
Проверяет, является ли значение эквивалентным NULL (нестандартный синтаксис). |
NOTNULL → boolean Проверяет, отличается ли значение от NULL (нестандартный синтаксис). |
Проверяет, является ли результат логического выражения значением true.
|
Проверяет, является ли результат логического выражения значением false или неизвестным.
|
Проверяет, является ли результат логического выражения значением false.
|
Проверяет, является ли результат логического выражения значением true или неизвестным.
|
Проверяет, является ли результат логического выражения неизвестным значением.
|
boolean Проверяет, является ли результат логического выражения значением true или false.
|
Предикат BETWEEN
упрощает проверки интервала:
a
BETWEENx
ANDy
равнозначно
a
>=x
ANDa
<=y
Заметьте, что BETWEEN
считает, что границы интервала включаются в интервал. Предикат BETWEEN SYMMETRIC
аналогичен BETWEEN
, за исключением того, что аргумент слева от AND
не обязательно должен быть меньше или равен аргументу справа.
Различные варианты BETWEEN
реализуются посредством обычных операторов сравнения, и поэтому они будут работать с любыми типами данных, которые можно сравнивать.
Примечание
Использование AND
в конструкции BETWEEN
создаёт неоднозначность с использованием AND
в качестве логического оператора. Для её устранения в качестве второго аргумента предложения BETWEEN
принимается только ограниченный набор типов выражений. Если вам нужно записать более сложное подвыражение в BETWEEN
, заключите это подвыражение в скобки.
Обычные операторы сравнения выдают NULL (что означает «неопределённость»), а не true или false, когда любое из сравниваемых значений NULL. Например, 7 = NULL
выдаёт NULL, так же, как и 7 <> NULL
. Когда это поведение нежелательно, можно использовать предикаты
:
a
IS DISTINCT FROMb
a
IS NOT DISTINCT FROMb
Для значений не NULL условие IS DISTINCT FROM
работает так же, как оператор <>
. Однако если оба сравниваемых значения NULL, результат будет false, и только если одно из значений NULL, возвращается true. Аналогично, условие IS NOT DISTINCT FROM
равносильно =
для значений не NULL, но возвращает true, если оба сравниваемых значения NULL, и false в противном случае. Таким образом, эти предикаты по сути работают с NULL, как с обычным значением, а не с «неопределённостью».
Для проверки, содержит ли значение NULL или нет, используются предикаты:
выражение
IS NULLвыражение
IS NOT NULL
или равнозначные (но нестандартные) предикаты:
выражение
ISNULLвыражение
NOTNULL
Заметьте, что проверка
не будет работать, так как выражение
= NULLNULL
считается не «равным» NULL
. (Значение NULL представляет неопределённость, и равны ли две неопределённости, тоже не определено. )
Подсказка
Некоторые приложения могут ожидать, что
вернёт true, если результатом выражение
= NULLвыражения
является NULL. Такие приложения настоятельно рекомендуется исправить и привести в соответствие со стандартом SQL. Однако в случаях, когда это невозможно, это поведение можно изменить с помощью параметра конфигурации transform_null_equals. Когда этот параметр включён, PostgreSQL преобразует условие
в x IS NULL
.
Если выражение
возвращает табличную строку, тогда IS NULL
будет истинным, когда само выражение — NULL или все поля строки — NULL, а IS NOT NULL
будет истинным, когда само выражение не NULL, и все поля строки так же не NULL. Вследствие такого определения, IS NULL
и IS NOT NULL
не всегда будут возвращать взаимодополняющие результаты для таких выражений; в частности такие выражения со строками, одни поля которых NULL, а другие не NULL, будут ложными одновременно. В некоторых случаях имеет смысл написать строка
IS DISTINCT FROM NULL
или строка
IS NOT DISTINCT FROM NULL
, чтобы просто проверить, равно ли NULL всё значение строки, без каких-либо дополнительных проверок полей строки.
Логические значения можно также проверить с помощью предикатов
логическое_выражение
IS TRUEлогическое_выражение
IS NOT TRUEлогическое_выражение
IS FALSEлогическое_выражение
IS NOT FALSEлогическое_выражение
IS UNKNOWNлогическое_выражение
IS NOT UNKNOWN
Они всегда возвращают true или false и никогда NULL, даже если какой-любо операнд — NULL. Они интерпретируют значение NULL как «неопределённость». Заметьте, что IS UNKNOWN
и IS NOT UNKNOWN
по сути равнозначны IS NULL
и IS NOT NULL
, соответственно, за исключением того, что выражение может быть только булевого типа.
Также имеется несколько связанных со сравнениями функций; они перечислены в Таблице 9.3.
Таблица 9.3. Функции сравнения
Функция Описание Пример(ы) |
---|
Возвращает число аргументов, отличных от NULL.
|
Возвращает число аргументов NULL.
|
Знак неравно — определения, факты и примеры решения
В этом мини-уроке мы изучим знак неравно, синоним неравно и неравенство, открывая интересные факты вокруг них.
Знаете ли вы, что знак равенства был впервые поставлен английским математиком по имени Роберт Рекорд, чтобы избежать повторения слов «равно».
В этой главе мы узнаем о неравном синониме, который означает «не равно».
Джоуи получил две упаковки конфет от своих друзей. Количество конфет в них одинаковое?
Нет, в одном пакете 2 шоколадки, а в другом 6 шоколадок.
Следовательно, количество конфет в пакетах не равно.
Давайте посмотрим на эту симуляцию ниже.
Нажмите на зеленые кнопки, чтобы увеличить или уменьшить количество яблок с обеих сторон и посмотреть, верно ли ваше предположение о том, что они равны или неравны.
План урока1. | Что вы подразумеваете под не равным? |
2. | Важные примечания о Not Equal |
3. | Решенные примеры на Not Equal |
4. | Интерактивные вопросы на Not Equal |
5. | Спорные вопросы о Not Equal |
Знак не равно является неравным синонимом. Знак не равно является признаком «неравенства». Он предназначен для того, чтобы показать сравнение между двумя величинами, которые, следовательно, неравны, представляя неравенство между ними.
Он представлен двумя параллельными горизонтальными линиями, пересекаемыми наклонной вертикальной линией в виде (\(\neq\)).
Важные примечания
- Символ, используемый для обозначения знака «не равно», — «\(\neq\)».
- Для каждого аспекта сравнения существуют разные символы, и знак равенства не является одним из них.
В математике не равно используется, чтобы показать, что две величины не равны. Знак неравенства для двух величин отображается следующим образом:
Давайте рассмотрим несколько примеров с математической точки зрения:
Пример 1: Учитель Оливера попросил его решить уравнение \( 3a + 51 = 60\) и сделать вывод, а = 2 или нет? Помогите ему найти ответ.
Решение:
Оливер сначала решит уравнение, чтобы сделать вывод, равно 2 или нет.
В уравнении \( 3a + 51 = 60\) «\(a\)» является переменной.
Решение линейного уравнения задается следующим образом:
\( \begin{align}3a+51&= 60 \\ 3a& = 60 — 51 \\ 3a& = 9\\ a& = 3 \end{align} \)
Отсюда он сделает вывод, что \(a\) не равно \(2\), т.е. \(a \neq 2 \)
Пример 2: Лиза должна найти площадь квадратов, длина сторон которых равна 2 дюймов и 2,2 дюйма. Поможешь ей найти, равны ли их площади? 92\) = \(4,84\) кв. дюймов
\(\следовательно\) Площадь квадрата = 4,84 дюйма 2 .
Следовательно, площади обоих квадратов не равны, т.е. \(4 \neq 4,84 \)
Где мы используем Not Equal в реальной жизни?
Пример 1: Джон пошел к продавцу фруктов, чтобы купить два фунта апельсинов. Продавец фруктов взвесил их на своих весах, чтобы проверить их вес. Вес апельсинов равен двум фунтам?
Нет, апельсины весят три фунта.
Вес апельсинов – три фунта, что не равно двум фунтам, то есть \(2 \neq 3 \)
Пример 2: Дженни и Джессика набрали 78 и 82 балла по французскому языку соответственно. Они кажутся сбитыми с толку. Помогите им определить, набрали ли они одинаковые оценки или нет?
Решение: Дженни набрала 78 баллов, а Джессика — 82.
Они набрали разные оценки.
Следовательно, оценки Дженни и Джессики неравны, т.е. \(78 \neq 82 \)
Решенные примеры
Пример 1 |
Джейк пошел купить фрукты для своего дома. В списке купленных фруктов он получил один арбуз и одну тыкву. Проверьте счет и скажите, он заплатил одинаковые деньги за оба?
Решение
Он получил один арбуз за \($5\)
Однако он получил одну тыкву за \($10\)
As, \(5 \neq 10\)
Следовательно, согласно счету, можно сказать, что он не заплатил равные деньги за оба.
\(\следовательно\) Он заплатил неравные деньги. |
Пример 2 |
Уильям и Джилл проверили свой рост. Вот как это выглядит.
Рост Уильяма и Джилл выглядит одинаковым?
Решение
Согласно их росту, видимому на весах, рост Уильяма больше, чем рост Джилл.
Отсюда можно сделать вывод, что росты Уильяма и Джилл не равны.
\(\следовательно\) Их высоты не равны. |
Интерактивные вопросы
Вот несколько заданий для практики.
Выберите/введите свой ответ и нажмите кнопку «Проверить ответ», чтобы увидеть результат.
Сложные вопросы
Если цена 4 арбузов точно такая же, как цена 5 яблок, может ли Джейн сказать, что цена 6 арбузов равна цене 10 яблок?
Майк и его сестра учатся в одном классе. Он набрал на 5 баллов больше, чем его сестра. Если сумма баллов, набранных Майком и его сестрой, равна 25. Равна ли сумма баллов Майка 20?
Мы надеемся, что вам понравилось узнавать о неравных с практическими вопросами. Теперь у вас будет лучшее понимание неравного, неравного знака, неравного синонима, неравенства и равного.
О CuemathВ Cuemath наша команда экспертов по математике стремится сделать обучение интересным для наших любимых читателей, студентов!
Благодаря интерактивному и увлекательному подходу «обучение-преподавание-обучение» учителя изучают тему со всех сторон.
Будь то рабочие листы, онлайн-классы, сеансы сомнения или любая другая форма отношений, это логическое мышление и разумный подход к обучению, в который мы в Cuemath верим.
Часто задаваемые вопросы (FAQ)
1. Какой оператор сравнения означает «не равно»?
Оператор сравнения, означающий «не равно», (\(\neq\)).
2. Как вводить знак равенства?
Знак не равно может быть введен как «\(\neq\)».
Когда 1 не равно 1?
Не так давно я заметил довольно интересный вопрос на JabbR, который привлек мое внимание:
Когда 1 не равно 1? — спросил разработчик. Любя решать проблемы и помогать другим, я начал расспрашивать своего коллегу-разработчика о деталях проблемы. Первая мысль, пришедшая мне в голову, возвращает нас в студенческие годы, когда я впервые услышал о NaN
(не число), по определению NaN != NaN 903:30 .
К моему удивлению, тип данных не относится к типу, к которому применимо NaN
; фактически утверждалось, что это целое число по сравнению с другим целым числом. Будучи еще более заинтригованным этой проблемой, я попросил немного больше информации о коде. Попался мне на глаза кусок кода, разработчику по какой-то причине нужно было преобразовать два параметра в целые числа. Чтобы сделать это в C#, вы можете использовать Convert. ChangeType
; минимум этот метод принимает два параметра: значение и тип для преобразования.
Я прошу разработчика прислать мне фрагмент кода, который не работает, вот что присылает мне разработчик:
Convert.ChangeType("1", typeof(int)) == Convert.ChangeType("1", тип(целое))
Очевидно, это упрощено ради этой статьи, и они не могли изменить свой код, чтобы использовать int.TryParse
, иначе они бы это сделали.
Вы ожидаете, что это правда? В этот момент вы, скорее всего, поняли, что ответ на этот вопрос отрицательный. Если мы посмотрим на полную сигнатуру этого метода, мы увидим, что он возвращает объект
!
Это означает, что мы в основном выполняем следующее: (объект)1 == (объект)1
и это тоже не будет работать! Почему? Потому что он сравнивает ссылки, и в этом случае они, конечно, не равны. В случае с этим разработчиком было невозможно просто привести к правильному типу, однако решение было под рукой!
Полиморфизм вам в помощь!
Каждый тип в . NET имеет возможности переопределения равно
, однако встроенные типы уже делают это. В этот момент я попросил разработчика попробовать следующее:
((объект)1).Equals((объект)1)
И вуаля, все заработало; что очевидно, если вы знаете сигнатуру метода Convert.ChangeType
. Если бы вместо этого разработчик использовал int.TryParse
, этой проблемы бы не возникло. Однако в их решении было сделано еще несколько вещей, которые не сделали это легко возможным.
Посмотрим на что-нибудь не менее интересное (каламбур). Предположим, у нас есть хорошо используемая точка
и координаты X
и Y
. Этот тип имеет перегрузку оператора для проверки на равенство, выглядящую следующим образом:
public static bool operator ==(Point a, Point b) { вернуть a.X == b.X && a.Y == b.Y; }
Как вы думаете, что происходит в следующем сценарии?
var a = новая точка { X = 100, Y = 100 }; var b = новая точка {X = 100, Y = 100}; (объект)a == (объект)b
Будут ли a
равны b
? Нет, конечно нет.