Функции 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;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.006 сек.