Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
327582.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
392 Кб
Скачать
☆

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 нельзя применять к формальным процедурам и ссылкам.

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