
- •Lesson 4 Массивы
- •Одномерные массивы Описание одномерных массивов
- •Ввод и вывод одномерных массивов Ввод одномерного массива
- •Вывод одномерного массива
- •Integer:: I
- •Примеры задач.
- •Многомерные массивы
- •Секции массива
- •Размещение массивов в памяти
- •Ввод и вывод массивов
- •Ввод двумерного массива
- •Вывод двумерного массива
- •Примеры задач.
- •Характеристики массивов
- •Форма массива. Конформные массивы
- •Функции shape и size
- •Выражения с массивами и присваивание массивов
- •Оператор и конструкция where
- •Динамические массивы
Секции массива
Фортран допускает обращение к частям массива и операции с ними. Если в качестве индекса массива указать диапазон значений в рамках границ массива, то получится объект, называемый секциеймассива. Секции массивов представляют собой подмножества элементов массива.
Для выбора подмножества элементов в измерении используется триплетвида:
index1:index2:index3
Здесь index1иindex2– нижняя и верхняя границы диапазона индексов в выбранном измерении,index3– шаг изменения индексов. Значенияindex1иindex2 не могут выходить за пределы границ массива в соответствующем измерении.
Все индексы в триплете – необязательные выражения целого типа. Если опущено выражение для верхней или нижней границы, то эта граница секции совпадает с соответствующей границей массива в данном измерении; опущенный шаг предполагается равным единице.
Секция массива, в свою очередь, представляет собой массив.
Примерысекций массива рассмотрим для массивов
integer, dimension(1:30)::A
real, dimension(0:5, 0:9)::B
A(i:k:1)–одномерный массив, состоящий из элементов массиваAсi-го поk-ый включительно
A(:k)– одномерный массив, состоящий из элементов массива с первого поk-ый включительно
A(:9:2)– одномерный массив, состоящий из элементов массиваAс нечетными индексами с первого по 9-ый включительно (A1, A3, A5, A7, A9)
A(i:i)–одномерный массив, состоящий из одного элемента, равногоA(i)
B(2, 1:n-1:1)-одномерный массив, состоящий из элементов второй строки массиваВс первого по(n-1)-ый включительно.
B(2, :) – одномерный массив, состоящий из всех элементов второй строки массиваВ.
B(:2, :4)– двумерный массив, левая верхняя четверть массиваB.
Нижняя граница может превосходить верхнюю, а шаг при этом должен быть отрицательным – это позволяет выбирать элементы массива в обратном порядке, например, секция
B(I, 9:0:-2)
состоит из элементов B(I, 9), B(I, 7), B(I, 5), B(I, 3), B(I, 1)
Размещение массивов в памяти
Для правильного использования массивов необходимо представлять, как они хранятся в памяти. Память компьютера является одномерной. Массив размещается в последовательно расположенных ячейках памяти. Например, элементы одномерного массива
real, dimension(0:6):: A
хранятся в памяти в порядке возрастания их индексов:
a(0), a(1), a(2), a(3), a(4), a(5), a(6)
В Фортране естественным порядком размещения элементов массива является такой, когда крайний левый индекс изменяется быстрее всего, второй слева – медленнее и так далее. Медленнее всего изменяется крайний правый индекс. Каждый индекс последовательно принимает все значения из диапазона индексов.
Например, элементы трехмерного массива
real, dimension(1:2, 1:2, 1:2):: A
хранятся в памяти в следующем порядке:
a(1,1,1), a(2,1,1), a(1,2,1), a(2,2,1), a(1,1,2), a(2,1,2), a(1,2,2), a(2,2,2),
Используя математическую терминологию, можно сказать, что двумерные массивы (матрицы) хранятся в памяти по столбцам.
Например, элементы матрицы
,
объявленной оператором
real, dimension(1:2, 1:3):: A
хранятся в памяти в следующем порядке:
a(1,1), a(2,1), a(1,2), a(2,2),a(1,3), a(2,3)