Оператор FOR используется для циклического выполнения действий определенное число раз.
Общий формат использования оператора FOR
Оператор FOR имеет следующий формат:
for <Index> := <Start> to <Finish> [step <Step>] do <statement>;
Здесь
- Index — переменная цикла
- Start — начальное значение переменной Index
- Finish — финальное значение переменной Index
- Step — шаг изменения переменной Index (необязательно)
- Statement — оператор или группа операторов, выполняющихся на каждой итерации цикла
Переменная цикла
Переменная цикла в операторе for
должна быть целым числом, т. е. иметь тип Integer
, LongInt
, Int64
или другой целочисленный тип.
В следующем примере пользователю дважды выводится сообщение "Message 1", "Message 2". Номер сообщения формируется переменной цикла i
:
var
i: Integer;
begin
for i := 1 to 2 do
ShowMessage('Message ' + IntToStr(i));
end;
Синтаксис TechEditor допускает упрощенный формат объявления переменных, поэтому тип переменной цикла можно не указывать:
var
i;
begin
for i := 1 to 2 do
ShowMessage('Message ' + IntToStr(i));
end;
Подобная сокращенная запись не рекомендуется из-за несовместимости с другими средами программирования. Чтобы код приложения можно было повторно использовать в других проектах, рекомендуется явно указывать тип переменной.
Начальное и финальное значения переменной цикла
Цикл FOR выполняется N раз. Количество итераций определяется формулой N = Finish - Start + 1. Переменная цикла последовательно получает значения Start, Start + 1, Start + 2 и так далее, до Finish включительно.
Разработчик приложения должен проконтролировать, возрастает или убывает значение переменной цикла. Следующий цикл не будет выполнен, поскольку начальное значение переменной превышает конечное:
var
i: Integer;
begin
for i := 2 to 1 do
ShowMessage('Message ' + IntToStr(i));
end;
Для исправления ситуации, используйте следующую конструкцию оператора:
var
i: Integer;
begin
for i := 2 downto 1 do
ShowMessage('Message ' + IntToStr(i));
end;
При уменьшении значения переменной в операторе for вместо директивы to
должна использоваться директива downto
.
Цикл с шагом, отличным от 1
Оператор FOR можно использовать с шагом, большим или меньшим 1:
var
i: Integer;
begin
for i := 1 to 10 step 2 do
ShowMessage('Message ' + IntToStr(i));
end;
В этом случае переменная цикла получает значения Start, Start+Step, Start+2*Step, и так далее. Она может не достигнуть величины Finish: в предыдущем примере i = 1, 3, 5, 7, 9.
Если значение переменной убывает, используйте отрицательный шаг цикла. При этом укажите директиву to
:
var
i: Integer;
begin
for i := 10 to 1 step -2 do
ShowMessage('Message ' + IntToStr(i));
end;
Примеры использования оператора FOR
Пример 1. Определение центра тяжести сечения
Следующий алгоритм вычисляет координаты центра тяжести сечения, состоящего из набора примитивов Primitives. С помощью оператора FOR, набор последовательно перебирается от начального значения 0 до последнего примитива с номером (Primitives.Count - 1).
Сначала в цикле накапливаются промежуточные значения, т. е. суммируются статические моменты сечения. Финальным действием статические моменты делятся на площадь сечения и результат записывается в исходные переменные X, Y.
begin
X := 0;
Y := 0;
for i := 0 to Primitives.Count - 1 do begin X := X + Primitives[i].GetAreaMomentX; Y := Y + Primitives[i].GetAreaMomentY; end; X := X / Area; Y := Y / Area;
end;