Многомерные массивы
Массив в Фортране может иметь до семи измерений. Число измерений называется размерностью или рангом массива; количество элементов в измерении называется протяженностью массива в данном измерении.
При выделении памяти для многомерных массивов в атрибуте dimension описания массива следует указать границы индексов по каждому измерению массива:
тип, dimension(список границ):: список имен массивов
Длина списка границ массива равна рангу (размерности) массива. Границы массива – константные целые выражения, задающие нижнюю и верхнюю границы индекса по соответствующему измерению. Размер массива равен произведению его протяженностей по всем измерениям.
Из описания массива array
integer, dimension(0:6,0:12) :: array
следует, что это целочисленный массив, ранг которого равен 2. Протяженности двух измерений массива равны соответственно 7 и 13, размер массива равен 7*13 = 91.
Каждый элемент массива может иметь до семи индексов, характеризующих его положение в массиве, например:
A(3, 4, I, J), B(1, 2, 3, 4, 5, 6, 7), C(I+1).
Количество индексов должно быть равно рангу массива. Каждый индекс не должен выходить за пределы границ, указанных в описании массива для соответствующего измерения.
Многомерные массивы удобно рассматривать на примере двумерных массивов – массивов, ранг которых равен двум. Двумерный массив соответствует матрице в математике, поэтому его измерения принято называть строками и столбцами. Первый из двух индексов в записи элемента массива считается номером строки, в которой расположен элемент матрицы, второй индекс – номером столбца.
Массив, описанный оператором
integer, dimension(1:3,1:4) :: A
можно изобразить в виде матрицы
Подчеркнутый элемент A(2,3) находится в матрице на пересечении строки с номером i=2 и столбца с номером j=3.
Секции массива
Фортран допускает обращение к частям массива и операции с ними. Если в качестве индекса массива указать диапазон значений в рамках границ массива, то получится объект, называемый секцией массива. Секции массивов представляют собой подмножества элементов массива.
Для выбора подмножества элементов в измерении используется триплет вида:
index1:index2:index3
Здесь index1 и index2 – нижняя и верхняя границы диапазона индексов в выбранном измерении, index3 – шаг изменения индексов. Значения index1 и index2 не могут выходить за пределы границ массива в соответствующем измерении.
Все индексы в триплете – необязательные выражения целого типа. Если опущено выражение для верхней или нижней границы, то эта граница секции совпадает с соответствующей границей массива в данном измерении; опущенный шаг предполагается равным единице.
Секция массива, в свою очередь, представляет собой массив.
Примеры секций массива рассмотрим для массивов
integer, dimension(1:30)::A
real, dimension(0:5, 0:9)::B
1) A(i:k:1)– одномерный массив, состоящий из элементов массива A с i-го по k-ый включительно
2) A(:k)– одномерный массив, состоящий из элементов массива с первого по k-ый включительно
3) A(:9:2)– одномерный массив, состоящий из элементов массива A с нечетными индексами с первого по 9-ый включительно (A1, A3, A5, A7, A9)
4) A(i:i)– одномерный массив, состоящий из одного элемента, равного A(i)
5) B(2, 1:n-1:1)- одномерный массив, состоящий из элементов второй строки массива В с первого по (n-1)-ый включительно.
6) B(2, :) – одномерный массив, состоящий из всех элементов второй строки массива В.
7) B(:2, :4) – двумерный массив, левая верхняя четверть массива B.
8) Нижняя граница может превосходить верхнюю, а шаг при этом должен быть отрицательным – это позволяет выбирать элементы массива в обратном порядке, например, секция
B(I, 9:0:-2)
состоит из элементов B(I, 9), B(I, 7), B(I, 5), B(I, 3), B(I, 1)
Дата добавления: 2017-09-19; просмотров: 980;