Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Fortran 90. ANSI Standard.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
861.18 Кб
Скачать

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

Fortran 90 имеет три главных типа структур управления

  • IF

  • CASE

  • DO

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

Условные операторы

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

 •оператор и конструкция IF

 •конструкция выбора CASE

В управлении порядком выполнения операторов используется оператор GOTO.

 Оператор и конструкция IF

 Простейшая форма оператора IF это единственное действие, основанное на единственном условии:

 IF( выражение ) оператор

 Только если выражение (логическая переменная или выражение) имеет значение .TRUE. оператор выполним. Например, в:

 IF( x<0.0 ) x=0.0

 если x меньше чем нуль, то дается новое значение (0.0); в противном случае x сохраняет свое прежнее значение.

 Структура конструкции IF зависит от числа условий , которые могут быть проверены и имеет следующую общую форму:

 [имя:] IF (выражение1) THEN

блок1

ELSEIF (выражение 2) THEN [имя]

блок 2

...

[ELSE [имя]

блок]

ENDIF [имя]

 Где выражение№ есть логическая переменная или выражение.

 Конструкция используется, когда число операторов зависит от условия. Например, 'если идет дождь, то взять пиджак и взять зонт'. Это требуется в части THEN . Заметим, что оператор END IF (или ENDIF) требуется, чтобы обозначить конец условного блока в операторе.

 LOGICAL :: rain

INTEGER :: numb=0, ncoat

...

IF ( rain ) THEN

ncoat = 1

numb = numb+1

ENDIF

  If дождь есть .TRUE. , блок операторов выполним и управление переходит к следующему оператору после ENDIF; в противном случае, блок операторов опускается и управление переходит прямо к следующему оператору после ENDIF.

 Более сложная ситуация может возникать, когда представляющая альтернативные действия зависимость в единственном условии. Для примера, предыдущие примеры не делают различий между уровнями ливня . Пример выше может быть перефразирован 'если здесь легкий дождь, то взять пиджак, в противном случае (иначе) взять пиджак и зонт'.

REAL :: inches_of_rain

INTEGER :: numb=0, ncoat

...

IF( inches_of_rain>0.05 ) THEN ! сильный дождь

ncoat = 1

numb = numb+1

ELSE ! легкий дождь

ncoat = 1

ENDIF

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

Здесь рассмотрена ситуация, когда альтернативные действия зависят от нескольких условий. Например, скидка (discount) , представляемая для покупки, может очень зависеть от числа покупаемых лотов - больше покупок, больше скидка:

REAL :: cost, discount

INTEGER :: n ! число покупок

...

IF ( n>10 ) THEN ! 25% скидка на 11 или более

discount = 0.25

ELSEIF ( n>5 .AND. n<=10 ) THEN ! 15% скидка на 6-10 покупок

discount = 0.15

ELSEIF ( n>1 .AND. n<=5 ) THEN ! 15% скидка на 2-5 покупок

discount = 0.1

ELSE ! без скидки для 1 покупки

discount = 0.0

ENDIF

cost = cost-(cost*discount)

WRITE(*,*) `Накладная для ', cost

 

Заметим, что ELSEIF используется для добавления новых условий к блоку (другая скидка используется). Оператор ELSE действует как умолчание в случае защиты от других событий. Снова те же правила перехода управления.

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

 outer: IF( x==0 ) THEN

...

ELSE outer

inner: IF( y==0.0 ) THEN

...

ENDIF inner

ENDIF outer

 Я

 Конструкция SELECT CASE

 Конструкция SELECT CASE обеспечиввает альтернативу серии повторяющихся операторов IF ... THEN ... ELSE IF. Ее общий вид таков:

 [имя:] SELECT CASE( выражение )

CASE( значение ) [имя]

блок

...

[CASE DEFAULT

блок]

END SELECT [имя]

 Результат выражения может быть типа CHARACTER, LOGICAL или INTEGER; значение должно быть того же типа, что и результат выражения и может быть любой комбинацией из:

 •единичной integer, character, или logical, связывающим в типе

•min : max

любого значеиия между двумя ограничениями

•min:

любое значение минимального значения из вышеприведенных

•:max

любое значение выше минимального значения

 

CASE DEFAULT не обязателен и закрывает все другие возможные значения выражения, еще не закрытые другими операторами CASE. Например:

 INTEGER :: month

...

season: SELECT CASE( month )

CASE(4,5) ! months 4 и 5

WRITE(*,*) 'Spring'

CASE(6,7) ! months 6 и 7

WRITE(*,*) 'Summer'

CASE(8:10) ! months 8,9 и 10

WRITE(*,*) 'Autumn'

CASE(11,1:3,12) ! months 1,2,3,11,12

WRITE(*,*) 'Winter'

CASE DEFAULT ! целое вне диапазона 1-12

WRITE(*,*) 'not a month'

END SELECT season

 Приведенный выше пример печатает сезон года, ассоциированный с заданным месяцем. Если значение целого месяца не лежит в диапазоне 1-12, выбирается вариант умолчания и печатается сообщение об ошибке 'not a month'; в других случаях выбирается один из операторов CASE. Заметим, что они не определяют порядок значеиий в операторе CASE.

 Я

 GOTO

 Оператор GOTO можно использовать дле передачи управления другому оператору в виде:

 GOTO label

 

Оператор GOTO просто передает управление оператору, помеченному числовой меткой, перепрыгивая любые операторы между ними. Например:

 ...

IF( x<10 ) GOTO 10

...

10 STOP

  

Оператор GOTO можно бы не применять, где возможно, программы , содержащие такие оператороы, заведомо трудно поддерживать. Оператор STOP завершает программу.

Я

Конструкция SELECT CASE

 Конструкция SELECT CASE обеспечиввает альтернативу серии повторяющихся операторов IF ... THEN ... ELSE IF. Ее общий вид таков:

 [имя:] SELECT CASE( выражение )

CASE( значение ) [имя]

блок

...

[CASE DEFAULT

блок]

END SELECT [имя]

 Результат выражения может быть типа CHARACTER, LOGICAL или INTEGER; значение должно быть того же типа, что и результат выражения и может быть любой комбинацией из:

 •единичной integer, character, или logical, связывающим в типе

•min : max

любого значеиия между двумя ограничениями

•min:

любое значение минимального значения из вышеприведенных

•:max

любое значение выше минимального значения

 

CASE DEFAULT не обязателен и закрывает все другие возможные значения выражения, еще не закрытые другими операторами CASE. Например:

 INTEGER :: month

...

season: SELECT CASE( month )

CASE(4,5) ! months 4 и 5

WRITE(*,*) 'Spring'

CASE(6,7) ! months 6 и 7

WRITE(*,*) 'Summer'

CASE(8:10) ! months 8,9 и 10

WRITE(*,*) 'Autumn'

CASE(11,1:3,12) ! months 1,2,3,11,12

WRITE(*,*) 'Winter'

CASE DEFAULT ! целое вне диапазона 1-12

WRITE(*,*) 'not a month'

END SELECT season

 Приведенный выше пример печатает сезон года, ассоциированный с заданным месяцем. Если значение целого месяца не лежит в диапазоне 1-12, выбирается вариант умолчания и печатается сообщение об ошибке 'not a month'; в других случаях выбирается один из операторов CASE. Заметим, что они не определяют порядок значеиий в операторе CASE.

 Я

 GOTO

 Оператор GOTO можно использовать дле передачи управления другому оператору в виде:

 GOTO label

 

Оператор GOTO просто передает управление оператору, помеченному числовой меткой, перепрыгивая любые операторы между ними. Например:

 ...

IF( x<10 ) GOTO 10

...

10 STOP

  

Оператор GOTO можно бы не применять, где возможно, программы , содержащие такие оператороы, заведомо трудно поддерживать. Оператор STOP завершает программу.

Я

**************** DO *************************

http://parallel.uran.ru/alpha/f90www/loops_rus.htm

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]