Цикл for в паскале
Оператор For состоит из заголовка и тела цикла. Он может быть представлен в двух форматах:
for <имя> := N1 to N2 do
<оператор>;
for <имя> := N1 downto N2 do
<оператор>;
Здесь for … do – заголовок цикла; <имя> – это имя переменной – параметра цикла; N1 – ее начальное значение; N2 – ее конечное значение; <оператор> – тело цикла.Тело цикла может быть простым или составным оператором.Переменная цикла (счетчик), нижняя граница N1 (переменная, константа или выражение) и верхняя граница N2 (переменная, константа или выражение) должны относиться к эквивалентным порядковым типам данных.Если тип нижней или верхней границы не эквивалентен типу счетчика, а лишь совместим с ним, то осуществляется неявное приведение: значение границы преобразуется к типу счетчика, в результате чего возможны ошибки.
Цикл for-to работает следующим образом:
1) вычисляется значение верхней границы N2;2) переменной цикла присваивается значение нижней границы N1;
3) производится проверка того, что переменная цикла не превосходит N2;
4) если это так, то выполняется <оператор>;
5) значение переменной цикла увеличивается на единицу;
6) пункты 3-5, составляющие одну итерацию цикла, выполняются до тех пор, пока переменная цикла не станет строго больше, чем N2; как только это произошло, выполнение цикла прекращается, а управление передается следующему за ним оператору.
Из этой последовательности действий можно понять, какое количество раз отработает цикл for-to в каждом из трех случаев:
Ø N1 < N2: цикл будет работать N2-N1+1 раз;
Ø N1 = N2: цикл отработает ровно один раз;
Ø N1 > N2: цикл вообще не будет работать.
После окончания работы цикла переменная-счетчик может потерять свое значение. Таким образом, нельзя с уверенностью утверждать, что после того, как цикл завершил работу, обязательно окажется, что ее значение равно N2+1.Поэтому попытки использовать переменную-счетчик сразу после завершения цикла (без присваивания ей какого-либо нового значения) могут привести к непредсказуемому поведению программы при отладке.
Цикл for-downto работает следующим образом:
1) вычисляется значение верхней границы N2;2) переменной цикла присваивается значение нижней границы N1;
3) производится проверка того, что переменная цикла не меньше N2;
4) если это так, то выполняется <оператор>;
5) значение переменной цикла уменьшается на единицу;
6) пункты 1-3 выполняются до тех пор, пока переменная цикла не станет меньше, чем N2; как только это произошло, выполнение цикла прекращается, а управление передается следующему за ним оператору.
Из этой последовательности действий можно понять, какое количество раз отработает цикл for-downto в каждом из трех случаев:
Ø N1 < N2: цикл вообще не будет работатьØ N1 = N2: цикл отработает ровно один раз;
Ø N1 > N2: цикл будет работать N1-N2+1 раз.
Замечание о неопределенности значения счетчика после окончания работы цикла справедливо и в этом случае.
Основные требования к оператору FOR
Ø Параметр цикла, начальное и конечное значения должны быть одного и того же порядкового типа (лучше всего – целого типа, недопустимо - вещественного).Ø Начальное и конечное значения вычисляются лишь один раз – при входе в цикл, и, следовательно, должны быть определены до входа в цикл и не могут быть изменены в теле цикла.
Ø Дополнительно (принудительно) изменять значение параметра в теле цикла не рекомендуется, поскольку контроль за правильностью исполнения такого цикла очень затруднен.
Ø Не допускается изменение параметра цикла на величину, отличную от единицы.
Примеры:
For i:=1 to 20 do writeln(Sqrt(i));{выведет 20 результатов извлечения квадратного корня из i }
For ch:=’A’ to ’z’ do writeln(ch); {выведет латинские буквы }
For j:=14 downto 10 do writeln(j);{выведет числа от 14 до 10}
Задача. Вывести на экран квадраты и кубы целых чисел от 8 до 1 (в обратном порядке).
Особенность: переменная цикла должна уменьшаться.
Решение:
for i:=8 downto 1 dobegin
i2 := i*i;
i3 := i2*i;
writeln(i:4, i2:4, i3:4);
end;