Опубликован: 10.04.2015 | Уровень: для всех | Доступ: платный | ВУЗ: Компания ALT Linux
Лекция 3:

Операторы управления

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

Циклический процесс, или просто цикл — это повторение одних и тех же действий. Последовательность действий, которые повторяются в цикле, называют телом цикла. Один проход цикла называют шагом, или итерацией9Понятие итерации в математике и программировании несколько отличаются. В математике под итерацией понимают повторение какой-либо математической операции, использующее результат предыдущей аналогичной операции. В программировании итерация — это организация обработки данных, при которой действия повторяются многократно, не приводя при этом к вызовам самих себя (http://ru.wikipedia.org/wiki/Итерация ).. Переменные, которые изменяются внутри цикла и влияют на его окончание, называются параметрами цикла.

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

В языке Free Pascal для удобства программиста предусмотрены три оператора, реализующих циклический процесс: while, repeat..until и for.

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

На рис. 3.24 изображена блок-схема алгоритма цикла с предусловием.

Оператор, реализующий этот алгоритм, в языке Free Pascal имеет вид:

while выражение do оператор;

Алгоритм циклической структуры с предусловием

увеличить изображение
Рис. 3.24. Алгоритм циклической структуры с предусловием

Выражение должно быть логической константой, переменной или логическим выражением.

Работает оператор while следующим образом. Вычисляется значение выражения.

Если оно истинно (True), выполняется оператор. Выполнение цикла заканчивается, если условие ложно, после этого управление передается оператору, следующему за телом цикла. Выражение вычисляется перед каждой итерацией цикла. Если при первой проверке выражение ложно (False), цикл не выполнится ни разу.

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

while условие do
	begin
		оператор_1;
		оператор_2;
		...
		оператор_n;
	end;

Рассмотрим пример. Пусть необходимо вывести на экран значения функции y = e^{sin(x)}cos(x) на отрезке [0;\pi] с шагом 0.1.

Применим цикл с предусловием :

var x, y : real;
begin
	{Присваивание параметру цикла стартового значения.}
	x : = 0;
	{Цикл с предусловием.}
	while x<=pi do {Пока параметр цикла не превышает}
		{конечное значение, выполнять тело цикла.}
	begin
		{Вычислить значение y.}
		y:=exp ( sin ( x ) ) * cos ( x );
		{Вывод на экран пары х и y.}
		writeln ( ’ x= ’, x, ’    y= ’, y );
		{Изменение параметра цикла - переход к следующему значению x.}
		x:=x + 0.1;
	end; {Конец цикла.}
end.

В результате работы данного фрагмента программы на экран последовательно будут выводиться сообщения со значениями переменных x и y:

x= 0; y=1
x= 0.1; y =1.0995
...
x= 3.1; y= -1.0415

3.5.2 Оператор цикла с постусловием repeat..until

Если в цикле с предусловием проверка условия осуществляется до тела цикла, то в цикле с постусловием условие проверяется после тела цикла (см. рис. 3.25). Сначала выполняются операторы, являющиеся телом цикла, после чего проверятся условие, если последнее ложно, то цикл повторяется. Выполнение цикла прекратится, если условие станет истинным.

Алгоритм циклической структуры с постусловием

увеличить изображение
Рис. 3.25. Алгоритм циклической структуры с постусловием

В языке Free Pascal цикл с постусловием реализован конструкцией

repeat
	оператор;
	until выражение;

или, если тело цикла состоит более чем из одного оператора

repeat
	оператор_1;
	оператор_2;
	...
	оператор_N;
until выражение;

Выражение должно быть логическим.

Работает цикл следующим образом. В начале выполняется оператор, представляющий собой тело цикла. Затем вычисляется значение выражения. Если оно ложно (False), оператор тела цикла выполняется ещё раз. В противном случае цикл завершается, и управление передается оператору, следующему за циклом.

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

Если применить цикл с постусловием для создания подпрограммы, которая выводит значения функции y = e^{sin(x)}cos(x) на отрезке [0; \pi] с шагом 0.1, получим:

var x, y : real;
	begin
	{Присваивание параметру цикла стартового значения.}
	x : = 0;
	{Цикл с постусловием.}
	repeat {Начало цикла}
		y:=exp ( sin ( x ) ) * cos ( x );
		writeln ( ’ x= ’, x, ’   y= ’, y );
		x:=x + 0.1; {Изменение значения параметра цикла.}
	until x > pi; {Закончить работу цикла,}
		{когда параметр превысит конечное значение.}
	end.
Юрий Шутиков
Юрий Шутиков

По первому тесту выполнил дважды задания. Результат получается правильный (проверял калькулятором). Пишет, что "Задание не проверено" и предлагает повторить. 
 

Евгений Силуков
Евгений Силуков

Еще в декабре выполнил тест №1, а его все так и не проверили.

Aalbaz Turaew
Aalbaz Turaew
Азербайджан, Баку
Руфия Биккулова
Руфия Биккулова
Россия, р.п. Старая Кулатка, УлГПУ имени И.Н. Ульянова, 2005