IF--ENDIF
Версия для печати


Форум:  НТО Терси-КБ
Тема:  http://tersy.ru/index.php?module=pnForum&func=viewtopic&topic=67

IF--ENDIF


1.  Neurox,  28.05.2009 11:36

Можно ли в условном опрераторе пречислять условия через AND или OR?

Например
if VAR1=True AND VAR2=False then
...
...
...
end_if

компилятор не ругается но работает так как будто *AND VAR2=False * вообще не написано.

2.  flash,  28.05.2009 12:04
Neurox
Можно ли в условном опрераторе пречислять условия через AND или OR?

Например
if VAR1=True AND VAR2=False then
...
...
...
end_if

компилятор не ругается но работает так как будто *AND VAR2=False * вообще не написано.


Здравствуйте!
Перечисление условий в операторе IF допускается. В вашем конкретном случае необходимо заключить перечисляемые условия в скобки: if (VAR1=True) AND (VAR2=False) then... Подобная запись решит проблему.


Изменено: flash, 28.05.2009 14:07

3.  Neurox,  28.05.2009 14:01
Со скобками работает1
Спасибо!

4.  flash,  28.05.2009 14:25
Мы еще раз проверили работу нашего компилятора. Ваш пример обрабатывается компилятором совершенно правильно: сначала исполняется операция AND, имеющая более высокий приоритет, а затем операции сравнения. Т.е. ваш ваше условие разбирается в следующем порядке:
(1) TRUE and VAR2
(2) VAR1 = (1)
(3) (2) = FALSE

При таком порядке разбора действия внутри IF будут выполнены в случае, когда VAR1 и VAR2 имеют разные значения.

Ради интереса мы проверили компиляторы Delphi5 и Visual Studio 2008.
Так вот, Delphi работает точно так же, как наш компилятор, а компилятор VS сначала выполняет сравнения, а только потом операцию AND.

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

5.  Neurox,  28.05.2009 15:05
flash.
....когда VAR1 и VAR2 имеют разные значения.



Все верно. без скобок условие срабатывало в 2х случаях: VAR1=true VAR2=False и наоборот.
а мне как раз надо было чтобы в одном случае один код выполнялся а в другом другой. А т.к. привык на С писать то и в томже стиле и писал. Скобки ,вобщем, проблему решили)))


6.  Neurox,  28.05.2009 15:46
Кстати, когда обновление до 3.2.21 выйдет?

7.  Roman,  28.05.2009 16:01
Выпуск обновления Каскад-САУ до версии 3.2.21 запланирован на июнь.