Операторы циклов

Содержание: 

  1. Оператор цикла с параметром
  2. Оператор цикла с предусловием
  3. Оператор цикла с постусловием

 

 

Очень часто возникает необходимость выполнить один и тот же оператор (или группу операторов) несколько раз. Для этого в языке Pascal предусмотрены операторы циклов.

Циклом в программировании называют повторение одних и тех же действий (шагов). Последовательность действий, которые повторяются в цикле, называют телом цикла.

Существует несколько типов алгоритмов циклической структуры.

 

Оператор цикла с параметром

Этот оператор используют, когда количество повторений цикла известно заранее или необходимо изменять какую-либо величину на одно и то же значение в определенном диапазоне. Форма записи оператора:

For <параметр> := <начальное значение> To <конечное значение> Do <оператор>;

Служебное слово To указывает направление изменения параметра – увеличение на 1 (начальное значение меньше конечного значения; если это условие не выполнится, оператор не выполнится ни разу). Если необходимо, чтобы параметр уменьшался на 1, то используется слово DownTo (начальное значение больше конечного значения). В качестве оператора можно использовать любой простой или составной оператор.

 

Пример: требуется вычислить суму целых чисел от M до N путем прямого суммирования. Здесь M и N – целые числа. Задачу можно сформулировать так:

123

Здесь целая переменная I последовательно принимает значения в диапазоне от M до N. При каждом значении I выполняется тело цикла. После последнего выполнения тела цикла при I = N происходит выход из цикла на продолжение алгоритма. Цикл выполняется хотя бы один раз, если M ? N, и не выполняется ни разу при M > N.

Program Summering

Var I, M, N, Summa : Integer;

Begin

Write (‘M=’);

ReadLn (M);

Write(‘N=’);

ReadLn (N);

Summa := 0;

For I := M To N Do

Summa := Summa + I;

WriteLn (‘Сумма=’, Summa)

End.

 

Пример: в рассмотренной выше задаче можно складывать и в обратном порядке, т.е. от N до M (N / M). Для этого можно использовать второй вариант оператора цикла

For:

Summa := 0;

For I := N DownTo M Do

Summa := Summa + I;

 

При использовании оператора цикла For нужно помнить следующие правила:

  1. в качестве параметра можно использовать простую переменную, описанную в этом же блоке;
  2. параметр цикла не может иметь тип Real;
  3. начальное и конечное значения должны иметь тот же тип, что и параметр;
  4. в теле цикла (операторе) явное изменение значения параметра (например, оператором присваивания) может привести к бесконечному циклу;
  5. нельзя в теле цикла изменить начальное и конечное значение параметра, если они заданы переменными;
  6. после завершения работы цикла значение параметра становится равным конечному значению параметра, если цикл не был прерван оператором перехода;
  7. параметр цикла может изменяться (увеличиваться или уменьшаться) каждый раз при выполнении тела цикла только на единицу. Если нужен другой шаг изменения параметра, предпочтительнее циклы Repeat и While.

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

 

Примеры:

  1. Вывести на экран все символы от ‘a’ до ‘z’:
For I := ‘a’ To ‘z’ Do Write (I,‘  ’,);

 

  1. Вычислить y = x2 при x = 2, 4, 6, 8, 10.
x := 2;

For I := 1 To 5 Do

Begin

y := x *x ;

WriteLn (x : 3, y);

x := x + 2;                   {НЕ рекомендуется так делать!}

End;

 

Оператор цикла с предусловием

Форма записи:

                       

while <условие> do <оператор>;

 

В качестве оператора может быть любой простой или составной оператор. Оператор  выполняется только в том случае и до тех пор, пока условие истинно, причем условие проверяется каждый раз после выполнения оператора. Если с самого начала условие ложно, то есть имеет значение false, оператор цикла не выполнится ни разу.

Примеры:

  • Вычисление факториала:

 

while x <=N do

  begin

      Fact := Fact*x;

      x := x + 1

  end;

 

  • Вычислить у=х2 при х=2, 4, 6, 8, 10:
x:=2;

 while x<=10 do

    begin

      y:=sqr(x);

      writeln(‘x=’,x:3, ‘y=’,y:5);

      x:=x+2

    end;

 

Если в операторе цикла условие всегда истинно, то такой цикл называется бесконечным:

t:=true;

while t do x:=x+5;

 

 

Оператор цикла с постусловием

Форма записи:

repeat

<оператор1>;           

<оператор2>;    

…                           

 until    <условие>;

 

Последовательность операторов может     состоять из одного или нескольких любых операторов. В отличие от цикла с предусловием, в этом цикле условие проверяется всегда после выполнения оператора (или последовательности операторов), если оно ложно – оператор снова выполняется, иначе цикл прекращается. При такой структуре, оператор хотя бы один раз обязательно выполнится.

Примеры:

  • Вычислить у=х2 при х=2, 4, 6, 8, 10:
x:=2;

repeat

    y:=sqr(x);

    writeln(x:3,y:5);

    x:=x+2

  until x>10;

 

  • Вводить символы с клавиатуры до тех пор, пока не будет введен символ “!”

   

 repeat

    writeln(‘введите символ’);

     readln(c)

until c=’!’;

 

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

  • в цикле с предусловием условие проверяется до тела цикла, в цикле с постусловием – после тела цикла;
  • в цикле с постусловием тело цикла выполняется хотя бы один раз, в цикле с предусловием тело цикла может не выполниться ни разу;
  • в цикле с предусловием проверяется условие продолжения цикла, в цикле с постусловием – условие выхода из цикла.

При написании условных циклических алгоритмов следует помнить следующее:

  • чтобы цикл имел шанс когда-нибудь закончиться, содержимое его тела должно обязательно влиять на условие цикла;
  • условие должно состоять из корректных выражений и значений, определенных еще до первого выполнения тела цикла.