Название: Информатика. Алгоритмический язык Фортран - учебное пособие (Худяков Д.С., Саблина Г.В.)

Жанр: Информатика

Просмотров: 3010


2.6.5. операторы цикла

 

Операторы цикла предназначены для многократного выполнения операторов (тело цикла), находящихся между началом цикла (оператор DO) и последним выполняемым в теле цикла оператором CONTINUE с меткой или оператором END DO.

Оператор CONTINUE служит для принятия на себя управления вычислительным процессом.

Оператор цикла DO имеет вид:

DO n i=ml,m2,m3

Здесь n – метка последнего оператора тела цикла (оператора CONTINUE); i – переменная целого, вещественного или вещественного двойной точности типа, которая называется параметром цикла; ml, m2, m3 – константы, переменные или арифметические выражения целого, вещественного или вещественного двойной точности типов. После метки n может стоять необязательная запятая. Величина ml определяет начальное значение параметра цикла, m2 определяет конечное значение параметра цикла, а m3 определяет шаг или приращение.

Правило выполнения: оператор DO автоматически исполняет все операторы до оператора CONTINUE с меткой n для значений i от ml до m2 с шагом m3. Таким образом, вначале параметр i устанавливается равным m1, и с этим значением выполняются все операторы тела цикла; затем i изменяется до величины ml + m3, и с этим значением также выполняются все операторы тела цикла. Этот процесс продолжается до тех пор, пока параметр цикла не перейдет границу значения m2, т.е. при положительном шаге m3 цикл повторяется при всех значениях i £ m2, а при отрицательном шаге m3 цикл повторяется при всех значениях i ³ m2. Если в записи цикла значение шага m3 отсутствует, то оно принимается равным единице. После окончания цикла выполняется оператор, следующий за оператором CONTINUE.

Примеры:

DO 10 I=1,N-1

...

10 CONTINUE

 

DO 5, A=K,X*Y+5,H

...

 5 CONTINUE

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

Рассмотрим пример использования оператора цикла. Пусть задана функция  f(x)  в виде ряда по степеням х:

f(x) ,

где N – параметр.

Программа, которая для любых X и N вычисляет соответствующее значение функции F, может иметь следующий вид:

READ(*,*) X,N

F=0

DO 5 I=1,N

F=F+(X**I)/I

 5 CONTINUE

WRITE (*,*)F

STOP

END

В качестве оператора, завершающего тело цикла, можно использовать оператор END DO. В этом случае в заголовке цикла не указывается метка, а вместо оператора CONTINUE записывается END DO. Последняя программа для этой формы записи цикла имеет вид:

READ(*,*) X,N

F=0

DO I=1,N

F=F+(X**I)/I

END DO

WRITE (*,*)F

STOP

END

Оператор цикла DO WHILE имеет вид:

DO n WHILE(L)

Здесь n – метка последнего оператора тела цикла (оператора CONTINUE); L – логическое выражение. После метки n может стоять необязательная запятая.

Правило выполнения: вычисляется логическое выражение L. Если оно принимает значение .TRUE., то выполняются все операторы тела цикла до оператора CONTINUE с меткой n. Этот процесс продолжается до тех пор, пока логическое выражение не примет значение .FALSE. Тогда ни один оператор тела цикла не выполняется, а выполняется оператор, следующий за CONTINUE. Примеры такого цикла:

DO 25 WHILE(X**2+Y**2.LE.R**2)

DO 10,WHILE(Y.GE.A.OR.X.GE.B)

Рассмотрим пример использования оператора DO WHILE. Пусть задана функция  f(x)   в виде ряда по степеням х:

f(x) ,

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

READ(*,*)X,E

F=1.0

А=-Х

I=1

DO 10 WHILE(ABS(A).GE.E)

F=F+A

I=I+1

A=-X*A/I

10 CONTINUE

WRITE(*,*)F

STOP

END

В приведенной программе присутствует обращение к библиотечной функции Фортрана ABS, которая вычисляет абсолютное значение вещественной величины.

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

DO WHILE(ABS(A).GE.E)

END DO

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

1. Если оператор цикла указан внутри другого DO-цикла, его тело должно полностью содержаться внутри тела внешнего DO-цикла.

2. Если оператор DO указан внутри блоков IF THEN или IF THEN ELSE, то тело цикла должно полностью содержаться внутри блока.

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

4. Переход в тело DO-цикла извне цикла не разрешен.

5. Два или более циклов DO или DO WHILE могут оканчиваться одним терминальным оператором CONTINUE. Однако оператор END DO может быть концом только одного цикла.

6. При выходе из цикла сохраняется текущее значение параметра цикла i для DO-цикла или значение логического выражения L для DO WHILE цикла.