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–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/v6.4.0/The-if-Statement.html