Spec-Zone.ru › Octave 8

10.1 Оператор if

Оператор if является оператором принятия решений в Octave. Существуют три основных формы оператора if. В своей простейшей форме он выглядит так:

if (condition)
  then-body
endif

условие — это выражение, которое управляет тем, как будет выполняться остальная часть оператора. тело-then выполняется только если условие истинно.

Условие в операторе if считается истинным, если его значение отлично от нуля, и ложным, если его значение равно нулю. Если значение условного выражения в операторе if является вектором или матрицей, оно считается истинным только если оно непустое и все элементы отличны от нуля. Концептуально эквивалентный код, когда условие является матрицей, показан ниже.

if (matrix) ≡ if (all (matrix(:)))

Вторая форма оператора if выглядит следующим образом:

if (condition)
  then-body
else
  else-body
endif

Если условие истинно, выполняется тело-then; в противном случае выполняется тело-else.

Вот пример:

if (rem (x, 2) == 0)
  printf ("x is even\n");
else
  printf ("x is odd\n");
endif

В этом примере, если выражение rem (x, 2) == 0 истинно (то есть, значение x делится на 2), тогда выполняется первое printf выражение, в противном случае выполняется второе printf выражение.

Третья и наиболее общая форма оператора if позволяет объединить несколько решений в одном операторе. Она выглядит следующим образом:

if (condition)
  then-body
elseif (condition)
  elseif-body
else
  else-body
endif

Может быть любое количество elseif блоков. Каждое условие проверяется по очереди, и если одно из них оказывается истинным, его соответствующее тело выполняется. Если ни одно из условий не является истинным и блок else присутствует, его тело выполняется. Только один блок else может быть, и он должен быть последней частью оператора.

В следующем примере, если первое условие истинно (то есть, значение x делится на 2), тогда выполняется первое printf выражение. Если оно ложно, то проверяется второе условие, и если оно истинно (то есть, значение x делится на 3), то выполняется второе printf выражение. В противном случае выполняется третье printf выражение.

if (rem (x, 2) == 0)
  printf ("x is even\n");
elseif (rem (x, 3) == 0)
  printf ("x is odd and divisible by 3\n");
else
  printf ("x is odd\n");
endif

Обратите внимание, что ключевое слово elseif не должно быть написано else if, как это разрешено в Fortran. Если это так, пробел между else и if укажет Octave на то, что это новый if оператор внутри другого оператора if в блоке else. Например, если вы напишите

if (c1)
  body-1
else if (c2)
  body-2
endif

Octave ожидает дополнительный ввод для завершения первого if оператора. Если вы работаете с Octave интерактивно, оно будет продолжать запрашивать дополнительный ввод. Если Octave считывает этот ввод из файла, оно может жаловаться на недостающие или несоответствующие end операторы, или, если вы не использовали более конкретные endif, endfor, и т.д., операторы, оно может просто давать неправильные результаты, без вывода каких-либо предупреждений.

Ошибка намного легче увидеть, если мы перепишем операторы выше так:

if (c1)
  body-1
else
  if (c2)
    body-2
  endif

используя отступы, чтобы показать, как Octave группирует операторы. См. Функции и скрипты.

© 1996–2023 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.
Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v8.1.0/The-if-Statement.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API