Можно ли в условном опрераторе пречислять условия через AND или OR?
Например
if VAR1=True AND VAR2=False then
...
...
...
end_if
компилятор не ругается но работает так как будто *AND VAR2=False * вообще не написано.
2.
flash,
28.05.2009 12:04
Здравствуйте!
Перечисление условий в операторе 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
Все верно. без скобок условие срабатывало в 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 запланирован на июнь.