Циклы в Pascal

Циклы в Pascal: repeat, while, for

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

       Любой цикл состоит из тела и заголовка. 

       Тело цикла — это набор повторяющихся операторов, а условие — это логическое выражение, в зависимости от результата которого и происходит повторное выполнение цикла.

Возьмем одну задачу, которую будем решать, используя различные виды циклов.

Задача 1. Вывести все числа от 1 до числа, введенного с клавиатуры.

While, или цикл с предусловием

       Как вы, наверное, уже поняли из названия, while — это цикл, в котором условие стоит перед телом. Причем тело цикла выполняется тогда и только тогда, когда условие true; как только условие становится false, выполнение цикла прекращается.

While имеет формат:

while < условие> do <оператор 1>;  {Пока … делай ….}

       Данный цикл подходит только для одного оператора, если же вы хотите использовать несколько операторов в своем коде, вам следует заключить их в операторные скобки — begin и end;.

Решение задачи.

program example_while;  

var  i, N: integer; { объявляем переменные } 

begin  i := 1; { Присваиваем i значение 1 }  

readln(N); { Считываем последнее число }  

       while i <= N do {Как только i станет больше N, цикл прекратится (можно было бы написать просто <, но пришлось бы добавлять 1 к N) }  

               begin {Открываем операторные скобки}    

               write(i, ' '); {Выводим i}    

               Inc(i);  {увеличиваем i на один.}  

               end; { закрываем скобки }

end.

Repeat, или цикл с постусловием

Repeat  — полная противоположность while

       Repeat — это цикл, в котором условие стоит после тела. Причем оно выполняется тогда и только тогда, когда результат условия false; как только логическое выражение становится true, выполнение цикла прекращается.

Repeat имеет формат:

repeat { повторяй … }
<оператор 1>;
< оператор 2>;

until {до…} <условие>

Begin и end не требуются.

Решение задачи.

program example_repeat; 

var  i, N: integer;{ объявляем переменные } 

begin  i := 1; { Присваиваем i значение 1 }  

readln(N); { Считываем последнее число }  

       repeat {после repeat не требуется begin и end }    

       write(i, ' '); {Выводим i}    

       Inc(i);  {увеличиваем i на один.}  

       until i = N + 1; {Например, i = 11, а N = 10. Цикл прекратится, так условие стало true.}

end.

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

       For — это  цикл, в котором тело выполняется заданное количество раз.

Существует две формы записи этого цикла:

Первая форма

for <счетчик1> := <значение1> to <конечное_значение> do <оператор1>;

       После каждой итерации значение <счетчик1> будет увеличиваться на 1.

       <значение1> — это начальное значение счетчика. Это может быть переменная или число.
       <конечное_значение> : как только значение <счетчик1> станет больше <конечное_значение>, выполнение цикла прекратится.

       Если требуется написать несколько операторов в теле цикла, используем begin и end.

И <счетчик1>, и <конечное_значение>, и <значение1> —  переменные целого типа.

Чаще всего в качестве счетчика используется переменная i.

Вторая форма

for <счетчик2> := <значение2> downto <конечное_значение> do <оператор1>;

После каждой итерации значение <счетчик2> будет уменьшатся на 1.

       <значение2> — это начальное значение счетчика.
       <конечное_значение> : как только значение <счетчик2> станет меньше <конечное_значение>, выполнение цикла прекратится.

Два важных примечания:

  1. Цикл повторяется, пока значение значение счетчика лежит в отрезке [значение ; конечное_значение].
  2. Изменять значение счетчика внутри тела нельзя!  Вот что выводит компилятор:



Решение задачи:

 program example_for; 

var  i, N: integer; 

begin  

read(N); {предположим, что мы ввели 10}  

for i := 1 to N do 

write(i, ' '); {количество итераций - 10 - 1 + 1 = 10}

end.

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