Перевести страницу

Создание приложений для науки и производства ещё не было таким простым

Логические операции

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


!

Формат вызова:

    (! <parameter>)

возвращает bool, принимает 1 параметр;

тип параметра bool, разрешены любые операнды, массив не разрешен;

назначение операции: логическое "нет", возвращает инверсное значение параметра, например:

    if( ! boolvariable )

        {};


!!

Форматы вызова:

    !! <parameter>;

    (!! <parameter>)

возвращает bool, принимает 1 параметр;

тип параметра bool, разрешена только переменная, массив не разрешен;

назначение операции: логическое "нет", инвертирует значение принимаемой логической переменной, и может возвращать результат, например:

    !! value; `эквивалентно value = (! value );


>

Форматы вызова:

    (> <parameter0> <parameter1>)

    (<parameter0> > <parameter1>)

возвращает bool, принимает 2 параметра;

первый параметр – тип любой, разрешены любые операнды, массив не разрешен;

второй параметр такого же типа, как первый, разрешены любые операнды, массив не разрешен;

назначение операции: логическое "больше", возвращает TRUE, если значение первого параметра больше второго, иначе возвращает FALSE, допустима инфиксная запись, например:

    if( a > b )

        {}


<

Форматы вызова:

    (< <parameter0> <parameter1>)

    (<parameter0> < <parameter1>)

возвращает bool, принимает 2 параметра;

первый параметр – тип любой, разрешены любые операнды, массив не разрешен;

второй параметр такого же типа, как первый, разрешены любые операнды, массив не разрешен;

назначение операции: логическое "меньше", возвращает TRUE, если значение первого параметра меньше второго, иначе возвращает FALSE, допустима инфиксная запись, например:

    if( a < b )

        {}


==

Форматы вызова:

    (== <parameter0> <parameter1>)

    (<parameter0> == <parameter1>)

возвращает bool, принимает 2 параметра;

первый параметр – тип любой, разрешены любые операнды, массив не разрешен;

второй параметр такого же типа, как первый, разрешены любые операнды, массив не разрешен;

назначение операции: логическое "равно", возвращает TRUE, если значения параметров равны, иначе возвращает FALSE, допустима инфиксная запись, например:

    if( a == b )

        {}


!=

Форматы вызова:

    (!= <parameter0> <parameter1>)

    (<parameter0> != <parameter1>)

возвращает bool, принимает 2 параметра;

первый параметр – тип любой, разрешены любые операнды, массив не разрешен;

второй параметр такого же типа, как первый, разрешены любые операнды, массив не разрешен;

назначение операции: логическое "не равно", возвращает TRUE, если значения параметров не равны, иначе возвращает FALSE, допустима инфиксная запись, например:

    if( a != b )

        {}


>=

Форматы вызова:

    (>= <parameter0> <parameter1>)

    (<parameter0> >= <parameter1>)

возвращает bool, принимает 2 параметра;

первый параметр – тип любой, разрешены любые операнды, массив не разрешен;

второй параметр такого же типа, как первый, разрешены любые операнды, массив не разрешен;

назначение операции: логическое "больше или равно", возвращает TRUE, если значение первого параметра больше или равно второму, иначе возвращает FALSE, допустима инфиксная запись, например:

    if( a >= b )

        {}


<=

Форматы вызова:

    (<= <parameter0> <parameter1>)

    (<parameter0> <= <parameter1>)

возвращает bool, принимает 2 параметра;

первый параметр – тип любой, разрешены любые операнды, массив не разрешен;

второй параметр такого же типа, как первый, разрешены любые операнды, массив не разрешен;

назначение операции: логическое "меньше или равно", возвращает TRUE, если значение первого параметра меньше или равно второму, иначе возвращает FALSE, допустима инфиксная запись, например:

    if( a <= b )

        {}


<>

Форматы вызова:

    (<> <parameter0> <parameter1> <parameter2>)

    (<parameter0> <> <parameter1> <parameter2>)

возвращает bool, принимает 3 параметра;

первый параметр – тип любой, разрешены любые операнды, массив не разрешен;

второй параметр такого же типа, как первый, разрешены любые операнды, массив не разрешен;

третий параметр такого же типа, как первый, разрешены любые операнды, массив не разрешен;

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

    ((param0 < param1) || (param0 > param2))

например:

    if( a <> lowval highval )

        {}

Основное назначение – проверка вещественных чисел на попадание в заданный диапазон, поскольку использование для вещественных чисел проверки на равенство не совсем корректно из-за возможного шума в младших разрядах после вычислений или проведения измерений, то есть, вместо

    float a b;

    if( a == b )

        {}

надо использовать:

    float a b delta 0.0001;

    if( a <> (b – delta)(b + delta) )

        {}

где delta – небольшое вещественное число, задающее погрешность сравнения, зависит от требуемой точности вычислений или измерений.


&&

Форматы вызова:

    (&& <parameter0> <parameter1> [<parameter2>...<parameter31>])

    (<parameter0> && <parameter1> [<parameter2>...<parameter31>])

возвращает bool, число параметров от 2 до максимально допустимого;

все параметры типа bool, допустимы любые операнды, массивы не допустимы;

назначение операции: логическое "И" (логическое умножение), возвращает TRUE, если значения всех параметров равны TRUE, иначе возвращает FALSE, допустима инфиксная запись. Примеры:

    if((a <= b) && (с == d ))

        {}

    bool a b c d e; c = (&& b d e a);

    if( && (a == b) (c == d) (e == 100))

        {puts "something"};


||

Форматы вызова:

    (|| <parameter0> <parameter1> [<parameter2>...<parameter31>])

    (<parameter0> || <parameter1> [<parameter2>...<parameter31>])

возвращает bool, число параметров от 2 до максимально допустимого;

все параметры типа bool, допустимы любые операнды, массивы не допустимы;

назначение операции: логическое "ИЛИ" (логическое сложение), возвращает TRUE, если значение хотя бы одного из параметров равно TRUE, иначе (если все FALSE) возвращает FALSE, допустима инфиксная запись. Примеры:

    if((a <= b) || (с == d))

        {}

    bool a b c d e;

    c = (|| a b d e);


?

Форматы вызова:

    (? <parameter0> <parameter1> <parameter2>)

    (<parameter0> ? <parameter1> <parameter2>)

возвращает значение любого типа, число параметров 3;

первый параметр типа bool, все виды операндов, массив недопустим;

второй параметр любого типа, для которого допустимо присваивание, допустимы все виды операндов, массив недопустим;

третий параметр любого типа, для которого допустимо присваивание, допустимы все виды операндов, массив недопустим;

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

    str s;

    bool b;

    s = (b ? "истина" "ложь");

если b == TRUE, то s присвоится слово истина, иначе присвоится слово ложь.

При использовании в выражении типа

    var = par1 ? par2 par3;

эквивалентно:

    if( par1)

        { var = par2 }

        `else` {var = pa3};

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