Название: Квантовая механика - Учеб. пособие. (Краснопевцев Е. А.)

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

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


2. теоретические сведения

 

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

В Фортране различают три вида циклов:

– цикл с “параметром” (или счетный цикл);

– цикл “пока” (или цикл по условию);

– цикл Do ( бесконечный цикл).

Цикл с “параметром”

Общий вид:

[имя:] DO dovar = start, stop, [, inc]                   

        …                                                           Блок-схема:

      тело цикла

Подпись:          …

     ENDDO [имя]

dovar – целая, вещественная (одинарной или двойной точности) переменная, называемая переменной цикла или параметром цикла;

start, stop – целые, вещественные (одинарной или двойной точности) скалярные выражения, задающие диапазон изменения  dovar;

inc – приращение или шаг цикла; целое, вещественное (одинарной или двойной точности) скалярное выражение. Inc может быть > 0 (тогда start < stop) и < 0 (тогда start > stop), но inc ¹ 0. Если inc = 1, то, как правило, 1 не указывается.

Число итераций цикла определяется по формуле

,

где max – функция выбора наибольшего значения, а функция int возвращает значение, равное целой части числа.

После завершения цикла значение переменной цикла dovar равно (inc > 0):

– dovar_ni + inc, если stop > start и цикл не содержит операторов выхода из цикла, где dovar_ni – значение переменной цикла на последней итерации;

– dovar_ni, если stop ³ start и цикл досрочно прерван, где dovar_ni – значение переменной цикла в момент прерывания цикла;

– start, если stop < start.

Для случая inc < 0 значение переменной цикла определяется аналогично.

Конструкция цикла с “параметром” работает следующим образом:

– при первом выполнении DO dovar = start, stop, inc вычисляются и запоминаются значения выражений start, stop и inc;

– переменной dovar присваивается значение start, выполняется тело цикла, затем осуществляется переход на начало цикла автоматически;

– переменной dovar присваивается значение dovar = dovar +

+ inc, это вновь полученное значение сравнивается со значением stop; если dovar ¹ stop, то тело цикла выполняется повторно и осуществляется переход на начало цикла, и т. д. пока dovar не станет равно значению stop;

– если в цикле нет операторов прерывания цикла (GOTO, EXIT, CYCLE), то цикл повторяется ni раз.

Правила:

1) нельзя изменять значение переменной цикла dovar в теле цикла;

2) если start, stop, inc – простые переменные (не выражения) и их значения изменяются в теле цикла, то на работе цикла это не отразится.

 

Цикл “пока” 

Общий вид:

[имя:] DO WHILE (Л.В.)

       …

тело цикла                                                    Блок-схема:

Подпись:         …    

ENDDO [имя]

Если в теле цикла отсутствуют операторы прерывания цикла (GOTO, EXIT, CYCLE), то тело цикла выполняется до тех пор, пока истинно скалярное Л.В. Причем проверка истинности Л.В. выполняется перед началом очередной итерации (цикл с условием).

 

Цикл DO (бесконечный цикл)                      Блок-схема:

Подпись:  Общий вид:

[имя:] DO

       …

 тело цикла

       …

ENDDO [имя]

 

Цикл DO отличается от цикла “пока” тем, что проверка истинности Л.В. осуществляется после выполнения очередной итерации (итеративный цикл). 

Конструкция цикла DO задает бесконечный цикл. Поэтому такой цикл должен содержать по крайней мере один оператор прерывания цикла, например, GOTO, EXIT, CYCLE.

Оператор EXIT

Общая форма:  EXIT [имя]

Передает управление из DO-конструкции на первый, следующий за конструкцией выполняемый оператор. Если [имя] опущено, то EXIT обеспечивает выход из текущего цикла, в противном случае EXIT обеспечивает выход из цикла, имя которого присутствует в операторе EXIT.

Оператор EXIT отдельно не применяется, а встраивается в конструкцию IF.

Оператор CYCLE

Общая форма: CYCLE [имя]

Передает управление на начало DO-конструкции. При этом операторы, расположенные между CYCLE и оператором ENDDO конца цикла, не выполняются. Если имя опущено, то CYCLE обеспечивает переход на начало текущего цикла, в противном случае CYCLE обеспечивает переход на начало цикла, имя которого присутствует в операторе CYCLE.

Оператор CYCLE отдельно не применяется, а встраивается в конструкцию IF.

Вложенные циклы

DO-конструкции могут быть вложенными (цикл в цикле). Степень вложенности не ограничена. Вложенным DO-конструкциям целесообразно давать имена, что повышает их наглядность.

 

     Для каждой итерации цикла D1 будут выполняться все итерации внутреннего цикла D2.

 
D1: DO while( Л.В.1)

         …

      D2: DO while ( Л,В.2)

          …

      ENDDO D2

          …

      ENDDO D1

Для каждой итерации внешнего цикла DX (т. е. для каждого x) будут выполняться все итерации внутреннего цикла DY (т. е. все y).

Общее число итераций:

 

 
 

DX: DO x = a, b, hx

         …

       DY: DO y = c, d, hy         

         …

       ENDDO DY         

         …

       ENDDO DX

 

.