Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИиП_3.doc
Скачиваний:
1
Добавлен:
21.04.2019
Размер:
303.1 Кб
Скачать

Integer n, m, kp

real r, ost

integer, allocateble :: kr(:,:) ! объявление размещаемых массивов

real, allocateble :: p(:), ct(:,:,:) ! в операторе описания типа

! объявление размещаемых массивов с использованием атрибута allocateble

dimension kp[allocateble (:,:)], r[allocateble (:)], ost[allocateble(:,:)]

read *, n, m ! ввод размерностей массивов

allocate (kr(n,m), p(n), ct(n,n,n), kp(m,n), r(m), ost(m,m)) ! размещение динамических массивов

read *, kr ! ввод

read *, p ! массивов

.........

deallocate (kr, p, ct) ! освобождение памяти, занимаемой

....... ! размещаемыми массивами kr, p, ct

end

Автоматические массивы

Пример обмена содержимого двух массивов

program main

integer, parameter :: n=5

Integer I

real :: a(n) = (/1., i=1,n /), b(n) = (/2., i=1,n/)

Interface

subroutine su ! при использовании перенимающих форму

real a(:), b(:) ! массивов требуется задание явного интерфейса

end subroutine su

end interface

call su(a,b)

print *, a, b ! результат: 2 2 2 2 2 1 1 1 1 1

end

subroutine su(a,b) ! описание процедуры

real a(:), b(:) ! а и b - массивы, перенимающие форму

real c(size(a)) ! с - автоматический массив

c = a

a = b

b = c

end subroutine su

3.8.5. Массивы – формальные параметры процедур

Массивы заданной формы.

Пример. Вывести первый отрицательный элемент каждого столбца матрицы.

Integer n, m, j

real, allocateble :: kr (:,:) ! объявление размещаемого массива

read *, n, m ! ввод размерностей массивов 3 , 4

allocate (kr(n,m)) ! размещение динамического массива

read *, kr ! ввод исходного массива 1 2 3 -4

! -1 0 2 -3

! 2 -2 3 0

do j=1,m

call sub(kr(1,j),n,j) ! в sub доступны все элементы j-го столбца

end do ! начиная с первого и все последующие элементы матрицы kr

deallocate (kr) ! освобождение памяти

end

subroutine sub(b,n,j) ! количество строк n передается как параметр

Integer n, I, j

real b(n) ! вектор b содержит все элементы

do i=1,n ! столбца j матрицы kr

if(b(i)<0) then

print *, ‘Стобец ’, j, ‘, элемент ‘, b(i)

return

end if

end do

print *, “В столбце ”, j, ‘ нет отрицательных элементов

end subroutine sub

Результат: Столбец 1, элемент -1

Столбец 2, элемент -2

В столбце 3 нет отрицательных элементов

Столбец 4, элемент -4

Массивы, перенимающие форму

При описании формального параметра каждая размерность имеет вид:

< нижняя граница > :

Пример описания синтаксиса массива, перенимающего форму.

program main

real x(0:3,0:6)