Часть полного текста документа:Массив - это объект данных, который содержит конечное число скалярных данных одного типа. В отличие от простой переменной массив обладает атрибутом DIMENSION. Массивы заданной формы Границы размерностей массивов - формальных параметров могут определяться передаваемыми в процедуру значениями других параметров. Так, в рассмотренной в разд. 6.3.1 задаче пользовательская функция md имеет синтаксис result = md(d,n) где d - массив - формальный параметр заданной формы; an- целочисленный скаляр, используемый для задания размера массива d. функция вызывается 3 раза: а = md(a, na); mb = md(b, nb); me = md(c, nc) При каждом вызове фактическим параметром является массив той же формы, что и массив - формальный параметр. Передаваемые размерности пассивов имеют разные значения. Однако форма ассоциируемых при вызове процедуры массивов фактических и формальных параметров может различаться, что позволяет в ряде случаев упростить написание программы. Так это происходит при создании подпрограммы обмена содержимого двух многомерных массивов: integer, parameter :: n = 5, m = 10, k = m*n real a(m, n) /k*1.0/, b(m, n) /k*2.0/ call swap(a, b, m, n) write(*, *) b end subroutine swap(a, b, m, n) integer m, n real a(m*n), b(m*n) ! а и b - массивы заданной формы) real c(size(a)) ! с - автоматический массив с = а a= b end subroutine swap В общем случае для формального параметра - массива могут вычисляться как нижняя, так и верхняя границы размерности. Общий вид размерности таких массивов: [нижняя граница] : [верхняя граница] Нижняя и верхняя границы - целочисленные описательные выражения. Вычисленные границы массива фиксируются на время выполнения процедуры и не меняются при изменении значения соответствующего описательного выражения. При работе с такими массивами необходимо следить, чтобы размер массива - формального параметра не превосходил размера ассоциированного с ним массива - фактического параметра. Если фактическим параметром является многомерный массив и соответствующим ему формальным параметром является массив заданной формы с тем же числом измерений, то для правильного ассоциирования необходимо указать размерности массива - формального параметра такими же, Как и у массива - фактического параметра. Исключение может составлять верхняя граница последней размерности массива, которая может меньше соответствующей границы массива - фактического параметра. Если в качестве фактического параметра задан элемент массива, т формальный параметр ассоциируется с элементами массива-родителя начиная с данного элемента и далее по порядку. Массивы, перенимающие форму Такие массивы - формальные параметры перенимают форму у соответствующего фактического параметра. В результате ранг и форма фактического и формального параметров совпадают. При описании формы формального параметра каждая размерность имеет вид: [нижняя граница] : где нижняя граница - это целое описательное выражение, которое може! зависеть от данных в процедуре или других параметров. Если нижняя граница опущена, то ее значение по умолчанию равно единице. Например" ПРИ вызове real х(0:3, 0:6, 0:8) interface subroutine asub(a) real a(:, :, :) end end interface call asub(x) Соответствующий перенимающий форму массив объявляется так: subroutine asub(a) real a(:, :, :) prnt *, lbound(a, 3), ubound(a, 3) ! 1 9 Так как нижняя граница в описании массива а отсутствует, то после вызова подпрограммы в ней будет определен массив а(4, 7, 9). ............ |