Приоритет операций
Из хэлпа:
Логические операции имеют более низкий приоритет, чем операции сравнения
ДИАЛОГ Проверка
ВЫЧИСЛИТЬ
кс=ДА; ксп=ДА; ад="АА"; адп="ББ";
ОТЛАДКА("кс="+СТР(кс)+", ксп="+СТР(ксп)+", ад="""+ад+""", адп="""+адп+"""");
ОТЛАДКА("кс<>ксп = "+СТР(кс<>ксп)+", ад<>адп = "+СТР(ад<>адп));
ОТЛАДКА("кс<>ксп ИЛИ ад<>адп = "+СТР(кс<>ксп ИЛИ ад<>адп));
ОТЛАДКА("(кс<>ксп) ИЛИ (ад<>адп) = "+СТР((кс<>ксп) ИЛИ (ад<>адп)));
ОТЛАДКА("");
кс=ДА; ксп=НЕТ; ад="АА"; адп="ББ";
ОТЛАДКА("кс="+СТР(кс)+", ксп="+СТР(ксп)+", ад="""+ад+""", адп="""+адп+"""");
ОТЛАДКА("кс<>ксп = "+СТР(кс<>ксп)+", ад<>адп = "+СТР(ад<>адп));
ОТЛАДКА("кс<>ксп ИЛИ ад<>адп = "+СТР(кс<>ксп ИЛИ ад<>адп));
ОТЛАДКА("(кс<>ксп) ИЛИ (ад<>адп) = "+СТР((кс<>ксп) ИЛИ (ад<>адп)));
КОНЕЦ
Результат
кс=ДА, ксп=ДА, ад="АА", адп="ББ"
кс<>ксп = НЕТ, ад<>адп = ДА
кс<>ксп ИЛИ ад<>адп = НЕТ
(кс<>ксп) ИЛИ (ад<>адп) = ДА
кс=ДА, ксп=НЕТ, ад="АА", адп="ББ"
кс<>ксп = ДА, ад<>адп = ДА
кс<>ксп ИЛИ ад<>адп = НЕТ
(кс<>ксп) ИЛИ (ад<>адп) = ДА
Наткнулся, когда написал НЕ (кс=ксп И ад=адп). Выдавало НЕТ при равенстве.
Изменил на НЕ ((кс=ксп) И (ад=адп)). Заработало.
Пробовал в вышеуказаном стенде. Работает и так, и так, а проге нет.
Может у меня с логикой что-то не так?
- 28 просмотров
Странное поведение воспроизводится только в режиме интерпретатора и только, когда первое сравнение над значениями логического типа.
Если, например, на числа поменять, то эффект пропадает:
кс=1; ксп=1;
...
кс=1; ксп=2;
...
Буду изучать код, разбираться.
Спасибо за подробную информацию.
Кстати во встроенном калькуляторе все Ок.