На этом шаге мы рассмотрим цикл с известным числом повторений.
Оператор цикла со счетчиком подходит для программирования только таких циклических фрагментов, в которых до выполнения цикла
известны начальное и конечное значения счетчика повторений цикла. Это обусловливает его менее широкую сферу применения, чем более универсальных
операторов while и repeat. Однако в тех случаях, когда его использование возможно, оператор for, благодаря своей высокой наглядности,
имеет несомненное преимущество перед операторами цикла с условиями.
Упрощенно общую структуру оператора цикла со счетчиком можно представить одним из следующих способов.
for <Переменная>:=<НачальноеЗначениеСчетчика> to <КонечноеЗначениеСчетчика> do <Оператор>;
Чтобы Оператор выполнился хотя бы один раз НачальноеЗначениеСчетчика должно быть не больше, чем КонечноеЗначениеСчетчика.
for <Переменная>: = <НачальноеЗначениеСчетчика> downto <КонечноеЗначениеСчетчика> do <Оператор>;
Чтобы Оператор выполнился хотя бы один раз НачальноеЗначениеСчетчика должно быть не меньше, чем КонечноеЗначениеСчетчика.
Пример.
begin . . . . Summa := 0; for i := 1 to n do Summa := Summa + A[i]; . . . . end.
Заметим, что для оператора for, в отличие от while и repeat, установка начального значения счетчика циклов (i:=l) выполняется
не перед заголовком цикла, а прямо в заголовке. Кроме того, после окончания тела цикла наращивание/уменьшение значения счетчика происходит
автоматически. Таким образом, специальный оператор для увеличения значения счетчика (i:=i+l) не требуется.
Более того, такой оператор привел к неправильной работе цикла.
Пример с ошибкой:
begin . . . . Summa := 0; for i:= 1 to n do begin Summa :=Summa + A[i]; i : = i + 1; { Ошибка! } end; . . . . end.
В большинстве реализаций языка Pascal изменение значений переменных, используемых в заголовке цикла for, запрещено и
приводит выдаче сообщения об ошибке на этапе компиляции. В реализации Вorland (Turbo) и Object Pascal этот запрет снят, однако такие действия
рамках цикла for, как правило, приводят к его непредсказуемому поведению и считаются плохим стилем программирования.
В Object Pascal, также как и во всех других реализациях языка Pascal, оператор for имеет два существенных ограничения:
- шаг изменения счетчика циклов может быть только или +1 (если используется ключевое слово to), или -1 (если используется ключевое слово downto);
- переменная, выступающая в роли счетчика циклов, может быть
только порядкового типа и должна быть локальной для того блока, в котором находится оператор for.
На следующем шаге мы проведем небольшое сравнение результатов работы операторов цикла.