Шаг 72.
Оператор цикла со счетчиком (с параметром) for

    На этом шаге мы рассмотрим цикл с известным числом повторений.

    Оператор цикла со счетчиком подходит для программирования только таких циклических фрагментов, в которых до выполнения цикла известны начальное и конечное значения счетчика повторений цикла. Это обусловливает его менее широкую сферу применения, чем более универсальных операторов while и repeat. Однако в тех случаях, когда его использование возможно, оператор for, благодаря своей высокой наглядности, имеет несомненное преимущество перед операторами цикла с условиями.

    Упрощенно общую структуру оператора цикла со счетчиком можно представить одним из следующих способов.

  1. Если счетчик при выполнении цикла наращивает свое значение:
      for <Переменная>:=<НачальноеЗначениеСчетчика> 
          to <КонечноеЗначениеСчетчика> do
              <Оператор>;
    
    Чтобы Оператор выполнился хотя бы один раз НачальноеЗначениеСчетчика должно быть не больше, чем КонечноеЗначениеСчетчика.
  2. Если счетчик при выполнении цикла уменьшает свое значение:
      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 имеет два существенных ограничения:

    На следующем шаге мы проведем небольшое сравнение результатов работы операторов цикла.




Предыдущий шаг Содержание Следующий шаг