Цикл с параметром for.. do применяется в тех случаях, когда заранее известно количество повторений, необходимых для выполнения каких-то действий. Синтаксическая конструкция выглядит следующим образом:
for <параметр цикла>:=<стартовое значение> to (downto) <конечное значение> do <оператор>;
Отличие ключевого слова to от downto в том, что при использовании в цикле слова to параметр цикла увеличивает свое значение на 1, а при использовании downto -уменьшает на 1.
Параметром цикла может быть любая порядковая переменная. При каждом проходе цикла она получает приращение (уменьшение) на единицу. Цикл продолжается до тех пор, пока значение параметра не достигнет конечного значения. Например, требуется обнулить все элементы массива:
MyArray : array[0..99] of integer; for X:=0 to 99 do MyArray[X]:=0;
Если же шаг цикла отличен от 1 или заранее неизвестно количество повторений тела цикла, вместо цикла с параметром следует применять цикл с предусловием или цикл с постусловием.
Ни в коем случае не допускается изменять значения параметра внутри тела цикла for..do. Ведь это не более чем счетчик количества итераций. Если же ваша интуиция и логика программы подсказывают, что необходимо найти решение, в котором параметр цикла будет выступать не только в виде банального счетчика, но и в роли управляемого параметра, то вместо цикла for..do надо использовать цикл while..do или repeat, .until.
Цикл с предусловием while..do
Особенность цикла с предусловием while..do заключается в том, что код внутри тела цикла будет выполняться до тех пор, пока соблюдается условие, описанное в заголовке цикла. Конструкция цикла выглядит так:
while <условие - логическое выражение> do <оператор>;
Условие цикла задается в виде булевого выражения:
X :=0;
while X<=99 do //выполнять, пока значение X не превышает 99 begin
MyArray[X]:=0;
X:=X+1;
Предложенный пример повторил задачу обнуления массива, но уже при помощи цикла while..do.
Цикл с предусловием уже свободен от недостатков своего предшественника -цикла for..do. В нем можно определять любое приращение шага и не задумываться о количестве повторений тела цикла.
Организация цикла while, .do требует от программиста большой внимательности, т. к. высока вероятность погони за своим хвостом, другими словами, возникновения бесконечного цикла.