Функции shape и size
Определить в программе форму или размер массива можно, обратившись к функциям shape или size. Эти функции могут использоваться для массивов в подпрограммах или для динамических массивов.
Функция shape(array) с одним аргументом – именем массива – возвращает форму массива – одномерный целочисленный массив, число элементов которого равно рангу массива-аргумента, а каждый элемент равен протяженности массива-аргумента в данном измерении. Для двумерного массива это количество строк и количество столбцов.
Пример.
integer, dimension(1:11, -3:0):: A2
integer, dimension(1:2):: Sh
. . .
Sh = shape(A2) ! Sh – массив; Sh(1)=11; Sh(2)=4
У функции size(array,[dim]) два аргумента: первый – имя массива – обязательный, второй – номер измерения – необязательный. Если номер измерения указан в числе аргументов, функция возвращает протяженность массива-аргумента по заданному измерению, если нет – функция возвращает полный размер массива-аргумента.
Пример.
integer, dimension(1:11, -3:0):: A2
integer:: Sz, Sz1, Sz2
. . .
Sz1 = size(A2, 1) ! Sz1 = 11
Sz2 = size(A2, 2) ! Sz2 = 4
Sz = size(A2) ! Sz = 44
Выражения с массивами и присваивание массивов
Операндами выражений и операций присваивания могут быть не только скалярные объекты, но и массивы и секции массивов.
Например, выполнение для массива array оператора присваивания
array = -array
приведет к перемене знака всех элементов массива
Для конформных массивов, и только для них, определены все арифметические, логические операции и операции отношения. Результатом этих операций является массив, конформный исходным, элементы которого получены применением соответствующей операции к элементам массивов-операндов. Операндами выражений с массивами могут быть секции массивов.
Пример1. Сложение массивов.
integer, dimension(1:20, 1:20) :: A, B, S
S = A + B
Выполнение оператора присваивания равносильно выполнению операторов
do i = 1, 20
do j = 1, 20
S(i, j) = A(i, j) + B(i, j)
Enddo
Enddo
Пример2. Умножить на константу вторую строку матрицы.
integer, dimension(1:20, 1:20) :: A
integer, parameter :: C=12
A(2,:) = A(2,:) * C
Результат будет таким же, как и при выполнении операторов
do j = 1, 20
A(2, j) = A(2, j) * C
Enddo
Внимание! Произведением массивов А*В является массив произведений элементов с одинаковыми индексами, а не произведение векторов и матриц в алгебраическом смысле.
Пример3. Сравнение массивов.
integer, dimension(1:40) :: A
logical, dimension(1:20) :: L
L = A(:20) == A(21:)
Конформны логический массив, первая и вторая половины массива A.
Выполнение оператора присваивания равносильно выполнению операторов
do i = 1, 20
L(i) = A(i) == A(i+20)
Enddo
Дата добавления: 2017-09-19; просмотров: 293;