10.1 Оператор if
Оператор if является оператором принятия решений в Octave. Существует три основных формы оператора if. В своей простейшей форме он выглядит так:
if (condition) then-body endif
условие — это выражение, которое управляет тем, что будет делать остальная часть оператора. тело выполняется только в том случае, если условие истинно.
Условие в операторе if считается истинным, если его значение отлично от нуля, и ложным, если его значение равно нулю. Если значение условного выражения в операторе if является вектором или матрицей, оно считается истинным только в том случае, если оно не пустое и все элементы отличны от нуля. Ниже показан концептуально эквивалентный код, когда условие является матрицей.
if (matrix) ≡ if (all (matrix(:)))
Вторая форма оператора if выглядит следующим образом:
if (condition) then-body else else-body endif
Если условие истинно, выполняется тело; в противном случае выполняется тело_иначе.
Вот пример:
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–2022 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/v7.2.0/The-if-Statement.html