Компания ALT Linux
Опубликован: 10.04.2015 | Доступ: свободный | Студентов: 763 / 0 | Длительность: 14:03:00
Специальности: Программист, Преподаватель
Лекция 3:

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

3.5.3 Оператор цикла for..do

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

for параметр_цикла:=начальное_значение to конечное_значение do
	оператор;
for параметр_цикла:=конечное_значение downto начальное_значение do
	оператор;

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

Шаг изменения цикла for всегда постоянен и равен интервалу между двумя ближайшими значениями типа параметра цикла (при целочисленном значении параметра цикла шаг равен 1).

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

Алгоритм работы цикла for..do

увеличить изображение
Рис. 3.26. Алгоритм работы цикла for..do
Представление цикла for...do с помощью блок-схемы

увеличить изображение
Рис. 3.27. Представление цикла for...do с помощью блок-схемы
for параметр_цикла:=начальное_значение to конечное_значение do
	begin
		оператор_1;
		оператор_2;
		...
		оператор_N;
	end;

Опишем алгоритм работы цикла for..do (рис. 3.26).

  • Параметру_цикла присваивается начальное_значение.
  • Если значение параметра_цикла превосходит конечное_значение, то цикл завершает свою работу. В противном случае выполняется п. 3.
  • Выполняется оператор.
  • Значение параметра_цикла изменяется на соответствующий шаг и осуществляется переход к п. 2, и т. д.

Понятно, что этот алгоритм представляет собой цикл с предусловием.

В дальнейшем, чтобы избежать создания слишком громоздких алгоритмов, в блок-схемах цикл for будем изображать так, как показано на рис. 3.27 10Если шаг изменения параметра цикла равен единице, его в блок-схемах можно не указавать. .

Фрагмент подпрограммы, приведённый далее, демонстрирует применение цикла for:

var i : integer; c : char;
	begin
		{Вывод на экран чисел от 1 до 10.}
		for i :=1 to 10 do
			writeln ( i );
		{Вывод на экран чисел от 10 до -10.}
		for i :=10 downto -10 do
			writeln ( i );
		{Вывод на экран символов от a до r.}
		for c := ’ a ’ to ’ r ’ do
			writeln ( c );
	end.

Вернёмся к задаче вывода значений функции y = e^{sin(x)}cos(x) на отрезке [0; \pi] с шагом 0.1. Как видим, здесь количество повторений цикла явно не задано. Однако это значение, можно легко вычислить. Предположим, что параметр цикла x принимает значения в диапазоне от x_n до x_k, изменяясь с шагом dx, тогда количество повторений тела цикла можно определить по формуле:

n = \round\left(\frac{x_k-x_n}{dx}\right)+1 ( 3.6)

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

var i, n : integer; x, y : real;
	begin
	n:=round ( ( pi - 0)/0.1)+1; {Количество повторений цикла.}
	x : = 0; {Начальное значение аргумента.}
	{Цикл с известным числом повторений,}
	{i - параметр цикла, изменяется от 1 до n с шагом 1.}
	for i :=1 to n do
	begin {Начало цикла.}
		y:=exp ( sin ( x ) ) * cos ( x ); {Вычисление значения функции }
		{для соответствующего значения аргумента.}
		writeln ( ’ x= ’, x, ’    y= ’, y );
		x:=x + 0.1; {Вычисление нового}
		{значения аргумента.}
	end; {Конец цикла.}
end.
Юрий Шутиков
Юрий Шутиков

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

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

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