next up previous contents
След.: Упражнения Выше: Массивы Пред.: Упражнения   Содержание


Атрибут DIMENSION

Этот атрибут объявляет массив. В скобках необходимо указать нижние и верхние границы всех измерений, либо обозначить измерения символом двоеточия :, в этом случае границы указываются в скобках при идентификаторе. Причем границы при идентификаторе перекрывают предыдущее объявление границ при DIMENSION. Границы обозначаются так: [L:]U, где L -- нижняя граница (по умолчанию 1), а U -- верхняя. Например,

REAL, DIMENSION(5):: A,B(6)

REAL, DIMENSION(-5:0,2):: A1,B1(2,2)

Эти же объявления можно сделать так:

REAL, DIMENSION(:):: A1(5),B1(6)

REAL, DIMENSION(:,:):: A1(-5:0,2),MATRIX(2,2)

Максимальное число измерений массива -- 15. Доступ к элементам массива (и для чтения, и для записи) осуществляется посредством индексов в круглых скобках, например

A(1) = B(6) или A1(-3,1) = 2*A1(-4,1)+MATRIX(1,1)

Помимо явной конфигурации, когда границы всех измерений массива заданы константными выражениями, существуют неявные формы. Это массивы перенимаемой конфигурации §11.2, которые не являются размещаемыми и указателями и для которых опущены верхние границы (могут быть опущены также и нижние границы всех или некоторых измерений, в этом случае они полагаются равными 1 по умолчанию); двоеточие обязательно присутствует, число двоеточий определяет ранг массива. Это массивы-формальные аргументы процедур, протяженности измерений определяются конфигурацией фактического аргумента. Таким образом, на этапе разработки не требуется знать конфигурацию массива. Возможен сдвиг нумерации, если нижние границы формального и фактического аргумента различны. Это массивы отложенной конфигурации -- размещаемые массивы §4.7 или указатели §4.6, когда опущены как нижние, так и верхние границы, а ранг определяется числом двоеточий. Реальная конфигурация, границы и размер определяются при размещении массива; до этого к массиву нельзя обращаться, но он может быть параметром некоторых справочных функций. Размещение массива -- это выделение памяти под этот объект данных на этапе исполнения, причем размеры определяются в программе и могут не быть известны на этапе разработки. Это массивы, перенимающие размер §11.2, у которых верхняя граница последнего измерения указана звездочкой. Размер массива и значение этой границы определяется по фактическому аргументу процедуры. Возможности таких массивов перекрываются возможностями массивов, перенимающих размер, но в ряде случаев они тоже удобны. Например, когда передается массив ранга два, содержащий заданное число столбцов, в которых записаны отсчеты времени и некоторые величины в эти моменты времени; число столбцов известно на этапе разработки, поскольку имеет четкий физический смысл, а вот число строк зависит от многого и на этапе разработки неизвестно. Наконец, это массивы с наследуемой конфигурацией, которые являются именованными константами; их конфигурация определяется конфигурацией инициализирующего выражения. Верхние границы всех измерений заменяются звездочками. Это удобно, если инициализирующее выражение сложно и подсчет количества элементов затруднен; нет необходимости в этом, поскольку конфигурация известна компилятору лучше, чем программисту.

Массив можно объявить без атрибута DIMENSION, указав границы в скобках через запятую при имени переменной в операторе объявления типа: INTEGER A(2:7)



Подсекции

Ilya A. Chernov 2012-12-19
X