Оберон-клуб «ВЄДАsoft»
https://zx.oberon.org/forum/

Составное условие в операторе IF
https://zx.oberon.org/forum/viewtopic.php?f=79&t=318
Страница 1 из 1

Автор:  Len [ 29 май 2017, 05:10 ]
Заголовок сообщения:  Составное условие в операторе IF

В Бейсике, если надо было проверить одновременно несколько условий можно было писать так
Код: "OBERON"
  1. IF a = f AND b = t AND c = 5 THEN
, а в Обероне 2 есть что-нибудь подобное AND, OR?

Автор:  S.Atan [ 29 май 2017, 16:14 ]
Заголовок сообщения:  Re: Составное условие в операторе IF

Код: "OBERON"
  1. IF (a = f) & (b = t) & (c = 5) THEN

Так наверно...

Код: "OBERON"
  1. AND -> &
  2. OR -> OR
  3. NOT -> ~

Автор:  Zorko [ 29 май 2017, 19:07 ]
Заголовок сообщения:  Re: Составное условие в операторе IF

Верно. Маленько дополню. Скобки в сложно-составном условии обязательны (операции сравнения имеют меньший приоритет, чем логические &, OR) для большей наглядности, так решил Вирт.

Автор:  Saferoll [ 30 май 2017, 19:37 ]
Заголовок сообщения:  Re: Составное условие в операторе IF

И еще одно уточнение: операции & и OR вычисляются по сокращенной схеме. Это значит, что если по левому операнду можно установить значение выражения, то правый операнд вообще не вычисляется. Например,
Код: "OBERON"
  1. IF (k>=0) & (M[k]>0) THEN...
При отрицательном k условие (k>=0) ложно, поэтому всё условие (k>=0) & (M[k]>0) считается ложным, и программа даже не пытается извлечь элемент M[k]. Если бы конъюнкция вычислялась по полной схеме (сначала оба аргумента, а потом от них "логическое И"), то возникла бы ошибка "индекс за пределами массива", потому что в M нет элементов по отрицательному индексу.
Аналогично для дизъюнкции (OR) - если левый операнд даёт TRUE, то результат операции - TRUE, на второй параметр даже и не смотрим.

Страница 1 из 1 Часовой пояс: UTC + 2 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/