- •Алфавит, лексемы, ключевые слова языка Фортран. Метки. Комментарии.
- •Структура программы. Внешние подпрограммы. Внутренние подпрограммы. Модули.
- •Переменные. Переменная – это величина, которая может в программе принимать различные значения.
- •Условный оператор if... Then...End if.
- •12.Неявное определение типа.
- •13. Синтаксис определения производных типов
- •14. Атрибут parameter. Именованные константы и константные выражения
- •15. Атрибуты dimension и allocatable. Описание массивов.
- •16. Атрибут intent. Описание формальных параметров.
- •17. Определенные и неопределенные переменные. Выражения с массивами и присваивание массивов.
- •24,Внешние подпрограммы.
- •30.Оператор use
- •31.Основные сведения о массивах
- •32.Массивы. Динамические массивы.
- •33.Операторы allocate, deallocate.
- •34.Форматирование ввода-вывода. Оператор format.
- •35.Соединение файла с логическим устройством
- •Алфавит, лексемы, ключевые слова языка Фортран. Метки. Комментарии.
- •15. Атрибуты dimension и allocatable. Описание массивов.
- •18. Скалярные числовые выражения и скалярное числовое присваивание.
- •27. Модули. Области общей памяти.
15. Атрибуты dimension и allocatable. Описание массивов.
Атрибут dimension описывает массивы. Параметром этого атрибута должен
быть список экстентов описываемых массивов в виде
(экстент_1, экстент 2, , экстент_n)
Число экстентов определяет ранг массива. Каждый экстент выражается как
[ нижняя_граница : ] верхняя_граница
Например:
REAL, DIMENSIONS(0: 10, 2, -3:3,11) :: FGRID
Если значение нижней границы опущено, ее значение полагается равным 1
Двоеточие, разделяющее нижнюю и верхнюю границы измерения, при от-
сутствии указания нижней фаницы тоже может быть опущено.
В некоторых случаях список экстентов сводится к списку разделенных запя-
тыми двоеточий, число которых равно рангу массива Только число экстен-
тов задается при описании указателя массива:
REAL, POINTER, DIMENSION( :,:,:,:):: TO_GRID
и при объявлении динамического массива:
REAL, ALLOCATABLE, DIMENSION(:, :) :: BE_LATER
Динамический массив — это массив, размер которого определяется при вы-
полнении программы, тогда же происходит и выделение памяти под него
Экстенты динамического массива в блоке описания еще неизвестны, и ат-
рибут dimension определяет только ранг "будущего" массива (пример).
пример. Описание динамического массива
PROGRAM dyn_array
IMPLICIT NONE
INTEGER SIZE
REAL, ALLOCATABLE, DIMENSION(:) ::array
WRITE(*, *) "SIZE”
READ(*, *) SIZE
IF(SIZE > 0) ALLOCATE(array(SIZE))
IF(ALLOCATED(array)) DEALLOCATE(array)
END PROGRAM dyn_array
Оператор описания массива может не содержать атрибута dimension, форма
массива может быть указана непосредственно после его идентификатора:
REAL Х(10, 20, 30), Y(100), Z(2, 300, 2, 4)
Как уже упоминалось, такая форма удобна для одновременного описания
массивов разной формы, но нежелательна, если описываемые массивы
имеют какие-либо атрибуты.
Атрибут allocatable несовместим с атрибутом pointer; его нельзя назна-
чать формальным параметрам и совмещать с атрибутом parameter.
16. Атрибут intent. Описание формальных параметров.
Атрибуты optional и intent имеют смысл и применяются только к фор-
мальным параметрам процедур Атрибут optional отмечает необязательные
формальные параметры, т. е. такие, которые могут не присутствовать среди
фактических параметров при вызове процедуры. Атрибут optional можно
назначать в операторе описания или оператором назначения атрибута:
SUBROUTINE SUBTRACE( А, В, С, D, E, F)
REAL, OPTIONAL, DIMENSION(:) : : Е, F
REAL :: А, В, С
INTEGER :: D
OPTIONAL :: С, D
Формальный параметр, имеющий атрибут optional, не должен иметь ника-
ких других атрибутов.
Атрибут intent указывает назначение формального параметра: формальный
параметр может быть входным, выходным и универсальным. Этим назначе-
ниям соответствуют параметры атрибута in, out и inout. Объявление назна-
чения параметра способствует улучшению контроля за их использованием и
повышает надежность процедуры и всей программы в целом. Атрибут
intent назначается или в атрибутах оператора описания, или непосредст-
венно оператором назначения атрибута:
SUBROUTINE SUBBY(A, В,С, D, E, F)
REAL, INTENT(IN) :: А,В, С
INTEGER, DIMENSION( :, : ) :: D
COMPLEX :: E, F
INTENT(INOUT) :: D, E
INTENT(OUT) :: F
Атрибут intent нельзя применять к формальным процедурам и ссылкам.
