10.5 Оператор for
Оператор for позволяет удобнее подсчитывать количество итераций цикла. Общая форма оператора for выглядит следующим образом:
for var = expression body endfor
где body обозначает любой оператор или список операторов, expression — любое допустимое выражение, а var может иметь несколько форм. Обычно это простое имя переменной или индексированная переменная. Если значение expression является структурой, var также может быть вектором из двух элементов. См. раздел Цикл по элементам структуры ниже.
Выражение присваивания в операторе for работает несколько иначе, чем обычный оператор присваивания Octave. Вместо присваивания всего результата выражения он поочерёдно присваивает var каждый столбец выражения. Если expression — диапазон, вектор-строка или скаляр, при каждом выполнении тела цикла var будет скаляром. Если var — вектор-столбец или матрица, при каждом выполнении тела цикла var будет вектором-столбцом.
В следующем примере показан другой способ создания вектора, содержащего первые десять элементов последовательности Фибоначчи, на этот раз с использованием оператора for:
fib = ones (1, 10); for i = 3:10 fib(i) = fib(i-1) + fib(i-2); endfor
Сначала этот код вычисляет выражение 3:10, чтобы получить диапазон значений от 3 до 10 включительно. Затем переменной i присваивается первый элемент диапазона, и тело цикла выполняется один раз. При достижении конца тела цикла переменной i присваивается следующее значение диапазона, после чего тело цикла выполняется снова. Этот процесс продолжается, пока не закончатся элементы для присваивания.
В Octave также можно перебирать матрицы или массивы ячеек с помощью оператора for. Например, рассмотрим следующий код:
disp ("Loop over a matrix")
for i = [1,3;2,4]
i
endfor
disp ("Loop over a cell array")
for i = {1,"two";"three",4}
i
endfor В этом случае переменная i принимает значения, соответствующие столбцам матрицы или матрицы ячеек. Таким образом, первый цикл выполняется дважды, выдавая два вектора-столбца [1;2], а затем [3;4]; то же самое происходит и при переборе массива ячеек. Такой подход можно распространить на циклы по многомерным массивам. Например:
a = [1,3;2,4]; c = cat (3, a, 2*a); for i = c i endfor
В приведённом выше случае многомерная матрица c преобразуется в двумерную матрицу следующим образом: reshape (c, rows (c), prod (size (c)(2:end))), после чего выполняется цикл так же, как и по двумерной матрице.
Хотя все циклы for можно переписать как циклы while, в языке Octave есть оба оператора, поскольку цикл for часто проще записать и естественнее воспринимать. Подсчёт числа итераций — распространённая задача в циклах, и бывает проще считать его частью организации цикла, а не выполнять внутри него.
© 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-for-Statement.html