Оператор for
Оператор for применяется для повторения некоторого действия заданное число раз. Чаще всего используется целочисленный счетчик, пробегающий ряд значений. В конце этого раздела мы увидим, что цикл for является гораздо более универсальным и позволяет производить итерации по элементам произвольной матрицы.
Следующий фрагмент печатает значения i от 1 до 5.
for i = 1 : 5
disp(i)
end
В результате в консоль будет выведено:
1.
2.
3.
4.
5.
Запись "1 : 5" в приведенном примере обозначает матрицу, содержащую пять вещественных значений. Использование оператора ":" для генерации вектора [1 2 3 4 5]:
-->i =1:5
i =
1. 2. 3. 4. 5.
Стоит еще раз подчеркнуть, что в данном случае матрица 1:5 содержит вещественные значения. Поэтому переменная-счетчик i также является вещественной. К этому вопросу мы вернемся позже в данном разделе, рассматривая общую форму записи цикла for.
Используя более общую форму записи оператора " :" можно вывести только нечетные числа в интервале от 1 до 5. Для этого, очевидно, в качестве шага необходимо задать значение 2, как показано в следующем примере:
for i = 1 : 2 : 5
disp(i)
end
В результаты выполнения этого скрипта в консоли будут отображены строки:
1.
3.
5.
Оператор " :" можно также использовать для перебора значений счетчика в порядке убывания. Следующий фрагмент отображает числа от 5 до 1 в порядке убывания:
for i = 5 : -1 : 1
disp(i)
end
В консоль, как и следовало ожидать, будет выведено:
5.
4.
3.
2.
1.
Действительно, инструкция 5:-1:1 возвращает вектор значений от 5 до 1 в порядке убывания,
-->i = 5 : -1 : 1
i =
5. 4. 3. 2. 1.
В действительности, цикл for является гораздо более универсальным, позволяя перебирать значения различных типов, в том числе матриц и списков. В качестве элементов матриц могут выступать вещественные и целые числа, строки и полиномы,
В следующем примере цикл for используется для перебора элементов вектора-строки, содержащего вещественные значения (1.5, е,π):
v = [1.5 ехр (1) %pi];
for x = v
disp(х)
end
В результате в консоли будет отображено:
1.5
2.7182818
3.1415927
Хотелось бы еще раз обратить внимание читателей на нежелательность использования циклов в Scilab. Всякий раз, когда возникает такое намерение, следует выяснить, не существует ли подходящей векторизованной функции, выполняющей требуемые действия. Различие в скорости выполнения пользовательских циклов и встроенных функций может достигать 10-100 раз, поэтому при наличии соответствующей функции предпочтения должно быть отдано ей. Цикл for следует использовать только тогда, когда подходящей функции найти не удается.