10.5 Оператор for
Оператор for делает более удобным подсчет итераций цикла. Общий вид оператора for выглядит следующим образом:
for var = expression
body
end
где body обозначает любой оператор или список операторов, expression — любое допустимое выражение, а var может принимать несколько форм. Обычно это просто имя переменной или индексированная переменная. Если значение expression является структурой, var также может быть вектором с двумя элементами. См. Итерацию по элементам структуры ниже.
Оператор присваивания в операторе for работает немного иначе, чем обычный оператор присваивания Octave. Вместо присвоения всего результата выражения, он поочередно присваивает каждый столбец выражения переменной var. Если expression является диапазоном, строковым вектором или скаляром, значение var будет скаляром каждый раз при выполнении тела цикла. Если var является столбцовым вектором или матрицей, var будет столбцовым вектором каждый раз при выполнении тела цикла.
Следующий пример демонстрирует другой способ создания вектора, содержащего первые десять элементов последовательности Фибоначчи, на этот раз с использованием оператора for:
fib = zeros(1, 10);
fib(1) = 1;
fib(2) = 1;
for i = 3:10
fib(i) = fib(i-1) + fib(i-2);
end
Этот код работает, сначала вычислив выражение 3:10, чтобы получить диапазон значений от 3 до 10 включительно. Затем переменной i присваивается первый элемент диапазона, и тело цикла выполняется один раз. По достижении конца тела цикла следующее значение в диапазоне присваивается переменной i, и тело цикла выполняется снова. Этот процесс продолжается до тех пор, пока не закончатся элементы для присвоения.
В Octave также можно итерироваться по матрицам или ячейным массивам с использованием оператора for. Например, рассмотрим
a = [1 2; 3 4];
b = {[1 2]; [3 4]};
for i = a
disp(i);
end
for i = b
disp(i);
end
В этом случае переменная i принимает значения столбцов матрицы или ячейной матрицы. Таким образом, первый цикл выполняется дважды, создавая два столбцовых вектора, затем выполняется второй цикл, и так далее для цикла по ячейному массиву. Это можно расширить до циклов по многомерным массивам. Например:
c = rand(2,2,3);
for i = reshape(c, 2, 6)
disp(i);
end
В этом случае многомерная матрица c переформатируется в двумерную матрицу как reshape(c, 2, 6), и затем происходит поведение, аналогичное циклу по двумерной матрице.
Хотя все циклы for можно переписать как циклы while, язык Octave имеет оба оператора, потому что цикл for часто является менее трудоёмким для написания и более естественным для восприятия. Подсчёт числа итераций в циклах очень распространён, и этот подсчёт легче представить как часть цикла, чем как что-то, что нужно делать внутри цикла.
| • Итерация по элементам структуры: |
© 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/v5.2.0/The-for-Statement.html