Цикл с параметром

Цикл с параметром используют, когда известно сколько раз должно выполниться тело цикла.

Формат оператора:


for < параметр цикла > := < начальное значение > to < конечное значение > do
begin
   < тело цикла >
end;

 

Пояснения:
1. параметр цикла – переменная-счетчик, в которой отсчитывается число шагов цикла;
2. начальное значение (может быть выражением) – значение параметра цикла на первом шаге;
3. конечное значение (может быть выражением) – значение параметра цикла на последнем шаге.

 

Механизм выполнения оператора:
1. Вычисляется начальное значение оператора цикла.
    Вычисляется конечное значение оператора цикла.
    Параметру цикла присваивается начальное значение.
2. Если значение параметра цикла не превышает конечного значения, то выполняются операторы тела цикла, иначе происходит выход из цикла на последующий за ним оператор.
3. Параметр цикла увеличивает свое значение на единицу;
4. Переход на пункт 2.

 

 

Особенности использования оператора цикла:

  • Параметр цикла, начальное и конечное значения должны быть переменными одного и того же порядкового типа. Частным случаем порядкового типа является целый тип.
  • Параметр цикла нельзя изменять внутри тела цикла. Это требование поддерживается в языке Delphi, но не противоречит синтаксису языка Pascal, что может приводить к бесконечным циклам.

 

Например, пусть переменная i описана как переменная целого типа (integer, longint, byte, shortint, word). Тогда

 

for  i := 1   to 10   do writeln ('привет');                 

{ текст привет будет напечатан 10 раз }

for  i := 10 to 10   do writeln ('привет');

{ текст привет будет напечатан 1 раз  }

for  i := 10 to 1     do writeln ('привет');

{ текст привет не будет напечатан ни разу }

for  i := 1   to sqrt(100) do writeln ('привет');

{ ERROR! Конечное значение есть значение вещественного типа,

поскольку функция SQRT возвращает вещественный результат }

for  i := 1   to 10 div 2   do writeln ('привет');

{ текст привет будет напечатан 5 раз }

for  i := 1   to 10 / 2      do writeln ('привет');

ERROR! Конечное значение есть значение вещественного типа,

поскольку операция / возвращает вещественный результат }


Антипример 1.

k := 5;
for  i := 1  to k do
begin
    writeln ('привет');
    read (i);                        ошибка на этапе выполнения программы
end;

Антипример 2.


k := 5;
for i := 1 to k do
begin
   writeln ('привет');
   i := i + 1;
end;
Строка привет будет напечатана 3 раза в среде Pascal, а в Delphi будет синтаксическая ошибка.

Антипример 3.


k := 6;
for i := 1 to k do
begin
   writeln ('привет');
   i := i+1;
end;

Cтрока привет будет печататься бесконечное количество раз (если в настройках компиляции указан ключ $-) в среде Pascal, а в Delphi будет синтаксическая ошибка.

ЗАПОМНИ! Изменять параметр цикла в теле цикла нельзя. 


Пример 1. Вычислить  сумму n введенных целых чисел.

 

var i, n : integer;

       a, sum : integer;

begin

   writeln ('Введите количество чисел');  

   read (n);

   sum := 0;

   for i := 1 to n do

   begin

      read (a);

      sum := sum + a;

   end;

writeln (sum);

end.

 

 

 

 

{ n — количество чисел }

{ почистили переменную sum, в которой будет собираться сумма вводимых чисел }

{ в цикле n раз делать }

 

{ вводим число в переменную a }

{ добавляем a к сумме }

 

 


Пример 2. Найти сумму четных чисел из n введенных.

   

for i :=1 to n do

   begin

      read (a);

      if  a mod 2 = 0 then sum := sum + a;

   end;

 

 

 

{ если введенное число a четное, то добавляем его к сумме }


Пример 3. Вывести на экран все трехзначные числа, кратные 15.

  

for i := 100 to 999 do

       if  i mod 15 = 0 then write (i, ' ');

  

{ перебираем все трехзначные числа от 100 до 999 }

{ если очередное трехзначное число кратно 15, то выводим его на экран }


Если необходимо вести отсчет шагов в обратном направлении (от большего значения до меньшего), то используется конструкция for следующего вида:

for  i :=< большее значение >  downto < меньшее значение > do < тело цикла>;

 

for i :=999 downto 100 do

       if  i mod 15 = 0 then write (i, ' ');

  

{ перебираем все трехзначные числа от 999 до 100 }

 

Пример 4. Найти сумму чисел из промежутка от a до b, где a и b целые числа.

 

var i, n : integer;

       a, b, sum : integer;

begin

   writeln ('Введите концы промежутка – два числа');  

   read (a, b);

   sum := 0;

   if a > b then begin temp := a; a := b; b := temp end;

   for i := a to b do   sum := sum + i;

   writeln (sum);

end.

 

 

 

 

 

{ почистили переменную sum, в которой будет собираться сумма вводимых чисел }

{ если a > b поменяем их местами, чтобы всегда a было меньше, чем b }

{ суммируем все числа от a до b  }

 

Адрес: 614039, г. Пермь, ул. Комсомольский проспект, 45
Телефон: +7 (342) 212-80-71
E-Mail: school9-perm@ya.ru
Вопрос администратору сайта