Читайте также: |
|
Компилируемый цикл DO может быть теперь свернут в один оператор. Используем целиком массивы в выражениях или как аргументы встроенных функций.
! Пример программы, использующей атрибуты внутри типа stmt, и выражение для массива.
program main
! Объявляем dim1 как parameter, со значением 5.
integer, parameter:: dim1=5
! Объявляем res, x, & y как 5-элементные массивы, и инициализируем x & y.
real, dimension(dim1):: res, x=(/1.,2.,3.,4.,5./),y=(/5.,4.,3.,2.,1./)
! Прибавим соответствующие элементы из x & y, и присвоим res.
res = x + y
! Все элементы из res будут равны 6.
write(*,10) res
10 format(1x,5(f3.0,4x))
end program
з
Распределяемые (динамические) массивы *
Память для массивов может распределяться во время выполнения.
Fortran 90 содержит четыре различных способа для обеспечения динамического доступа. Первый путь - использование указателей для вектора и матрицы.
Второй способ - использование распределяемого массива, то есть с помощью операторов ALLOCATE и DEALLOCATE вы получаете и возвращаете область памяти для массива с типом, образом и именем (и возможно и другими атрибутами), которая специфицирована заранее с дополнительным атрибутом ALLOCATABLE.
REAL, DIMENSION(:), ALLOCATABLE:: x: Allocate(x(N:M))! N и M целые выражения.: x(j) = q! Некое присваивание массива. CALL sub(x)! Использование массива в подпрограмме.: DEALLOCATE (x)Освобождение происходит автоматически (если атрибут SAVE не был задан), когда достигается RETURN или END в этой программной единице.
Третий вариант - это автоматический массив, это почти такой же как в старом Fortran, где x в примере ниже может быть в списке аргументов. Этого больше не требуется. (см. ниже).
SUBROUTINE sub (i, j, k) REAL, DIMENSION (i, j, k):: xРазмеры для x задаются целыми величинами в вызове программы.
Наконец "массив с неявным образом", где память определена в вызове процедуры и для которой даны только тип, ранг и имя.
SUBROUTINE sub(a) REAL, DIMENSION (:,:,:):: a Заметим, что в одном из примеров компилятор на Alfa не передал образ в подпрограмму.з
Неявный массив образов (форм)
Формальные массивы могут взять форму своего образа (своей формы) из соответствующих фактических параметров (см. замечание выше).
з
Автоматические массивы
Массивы в процедуре имеют размеры, определяемые значениями переменных.
! Пример использования автоматических и неявных образов массивов
program main
integer:: dim=8
real:: a(4)=(/44.3,77.5,88.21,14.35/)
call sub1(a,dim)
end program
subroutine sub1(x,dim1)
integer dim1
real x(:), b(dim1)! Объявляет 'x' с тем же самым образом как у фактического аргумента 'a'
.
.! Объявляет 'b' с 'dim1' элементами.
.
end subroutine sub1
з
Дата добавления: 2015-11-14; просмотров: 45 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Управление программой | | | Секция (вырезка) массива |