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

Спецификация массивов

 

Подобно переменным массивы специфицируются типом данных (INTEGER, REAL, derived type, и т.д.). Для статических массивов ранг (не более 7) и границы (верхняя и нижняя) задаются по каждому измерению. Объявление нижней границы не обязательно. Если нижняя граница не задана, то Fortran 90 полагает, что нижнее значение индекса равно 1.

 Альтернативными и эквивалентными формами можно объявлять массив следующим образом

 тип, DIMENSION(граница) [, атрибут] :: имя

тип [,атрибут ] :: имя (граница)

где атрибут учитывается декларациями других атрибутов, если требуется.

 

Следующие декларации эквивалентны. Обе объявляют целый массив а с шестью элементами, вещественный массив b с десятью элементами и двумерный логический массив yes_no.

Первое объявление:

INTEGER, DIMENSION(6) :: a

REAL, DIMENSION(0:9) :: b

LOGICAL, DIMENSION(2,2) :: yes_no

Второе объявление:

INTEGER :: a(6)

REAL :: b(0:9)

LOGICAL :: yes_no(2,2)

 

Используется форма атрибута DIMENSION, когда одни и те же границы типы несколько массивов необходимо объявить. Используется вторая форма , когда несколько массивов разных типов и/или границ необходимо объявить. Третья форма смешивается из двух предыдущих:

тип, DIMENSION(граница1) [, атрибут] :: a, b(граница2)

где для а берется по умолчанию граница как граница1, но для b берется с другим явно определенным значением граница2.

Смесь трех форм дана в следующей программе :

 

INTEGER, DIMENSION(8) :: x, y, z(16)

REAL :: alpha(1:3), beta(4:9)

REAL, DIMENSION(0:5,12:45, 6) :: data

CHARACTER(len=10) :: names(25)

Первый оператор объявляет x и y из 8 элементов каждый и z из 16 элементов. Второй оператор объявляет два массива одинакового типа, но с различными границами. Третий оператор объявляет массив ранга 3. Последний оператор объявляет массив из 25 элементов, каждый элемент - это символьная строка длины 10.

Можно включать массивы в качестве компонент производных типов данных и объявлять массивы производных типов данных:

 

TYPE point

REAL :: position(3)

END TYPE point

TYPE(point) :: object(10)

Тип point содержит 3 числа типа real, тогда массив object содержит 10 точек (элементов типа point), каждый из которых содержит 3 числа типа real.

Сечения массива Индивидуальные элементы

Индивидуальные элементы и сечения массива дают уникальный идентификатор с помощью одного в ранге, отделенного запятыми. Каждый указатель может быть целым значением или выражением, дающим целое значение.

REAL, DIMENSION(8) :: a

INTEGER, DIMENSION(5,4) :: b

...

a(5) ! пятый элемент

b(4,2) ! элемент на пересечении 4-й строки и 5-й колонки

Указатели (такие как (i,j) ) отсылают к элементу на пересечении ряда i и колонки j, где i и j имеют целые значения в диапазоне между нижним и верхней границами в их измерениях.

Используя выражение (например (2*k) ) обращаются к элементу, указвние которого дает результат оценки выражения. Результат выражения должен быть целым внутриобъявленных границ. Ошибкой будет ссылка вне диапазона границ массива (выше или ниже).

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