10.1 Оператор if
Оператор if — это оператор принятия решений в Octave. Существует три основные формы оператора if. В простейшей форме он выглядит так:
if (condition) then-body endif
condition — это выражение, которое определяет, что будет делать остальная часть оператора. then-body выполняется только в том случае, если condition истинно.
Условие в операторе if считается истинным, если его значение отлично от нуля, и ложным, если его значение равно нулю. Если значение условного выражения в операторе if представляет собой вектор или матрицу, оно считается истинным, только если оно непустое и все его элементы отличны от нуля. Концептуально эквивалентный код для случая, когда condition — это матрица, показан ниже.
if (matrix) ≡ if (all (matrix(:)))
Вторая форма оператора if выглядит так:
if (condition) then-body else else-body endif
Если condition истинно, выполняется then-body; в противном случае выполняется else-body.
Вот пример:
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. Каждое условие проверяется по очереди, и если какое-либо из них оказывается истинным, выполняется соответствующий ему body. Если ни одно условие не истинно и присутствует ветвь 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 внутри ветви else другого оператора if. Например, если написать
if (c1) body-1 else if (c2) body-2 endif
Octave будет ожидать дальнейший ввод, чтобы завершить первый оператор if. При интерактивной работе с Octave программа продолжит запрашивать ввод. Если Octave считывает ввод из файла, она может сообщить об отсутствии или несоответствии операторов end либо, если вы не использовали более конкретные операторы end (endif, endfor и т. д.), просто выдать неверные результаты без каких-либо предупреждений.
Ошибка станет гораздо заметнее, если переписать приведённые выше операторы следующим образом:
if (c1)
body-1
else
if (c2)
body-2
endif отступы показывают, как Octave группирует операторы. См. раздел Функции и сценарии.
© 1996–2026 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/v9.4.0/The-if-Statement.html