
- •Управление векторами и матрицами
- •Компиляция и выполнение Компиляция
- •Связывание (редактирование связей )
- •Выполнение
- •Примеры
- •Соглашения о записи кода
- •Арифметические выражения
- •Операции отношения
- •Логические выражения
- •Сравнение символов
- •Переносимость результата
- •Спецификация массивов
- •Сечения массива Индивидуальные элементы
- •Сечения
- •Векторные указатели
- •Память для массива Физическая память:
- •Присваивание массива Присваивание всего массива
- •Присваивание секции (вырезки) массива
- •Повторная нумерация
- •Основные встроенные процедуры
- •Массивы нулевого размера
- •Массивы и производные типы
- •Инициализация массивов Конструкторы
- •Оператор data
- •Встроенные функции для массива
- •Пример упрощения
- •Пример исследования (запроса)
- •Пример конструирования
- •Пример локализации
- •Я Операторы управления
- •Вложения
- •Порядок операторов
- •Синтаксис программы Main
- •Формат представления программы
- •Программные единицы
- •Уровни доступа
- •Дополнения
- •Спецификация входных-выходных параметров
- •Использование модуля
- •Родовые подпрограммы
- •Интерактивный ввод-вывод
- •Простой Input и Output
- •Форматирование по умолчанию
- •Форматированный ввод-вывод I/o
- •Дескрипторы редактора
- •Вещественные - форма с фиксированной точкой
- •Вещественные - экспотенциальная форма
- •Символьные
- •Логические
- •Заполнение пробелами (пропуск символьных позиций)
- •Специальные символы
- •Списки ввода-вывода
- •Производные типы данных
- •Неявный цикл do
- •Ввод-вывод без продвижения
- •Файловый ввод-вывод
- •Номера устройств
- •Операторы read и write
- •Оператор write
- •Оператор open
- •Оператор close
- •Оператор inquirе
- •Динамический массив
- •Распределяемые массивы
- •Спецификация
- •Выделение и возвращение памяти
- •Статус распределяемых массивов
- •Потоки памяти (куча)
- •Что есть указатели?
- •Указатели и адресаты
- •Спецификации указателя Общая форма для операторов определения указателя и адресата такая:
- •Присваивание указателя
- •Разыменование (Dereferencing)
- •Статус (состояние) связи указателя
- •Динамическая память
- •Общие ошибки
- •Указатели в производных типах данных
- •Связанные списки
- •Параметры - указатели
- •Функции для указателей
Я Операторы управления
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