Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Выражения для массивов

Материал взят из проекта Lahey: http://www.lahey.com/index.html, http://www.lahey.com/other.htm). | Возможности расширения языка | Вид семейства | Модули и процедуры | Более подробная информация | Спецификации или объявления | Тип Character | Логические выражения | Массивы и производные типы | Оператор и конструкция IF |


Читайте также:
  1. Quot;Used to" и "would" для выражения повторяющегося действия или обычного состояния в прошлом.
  2. Акты самовыражения
  3. Акэно улыбался Buchou с тонким выражения.
  4. Арифметические выражения
  5. В повествовании для выражения ряда прошедших действий.
  6. Важные выражения с глаголом Do
  7. Важные выражения с глаголом Make

 

Компилируемый цикл 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 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Управление программой| Секция (вырезка) массива

mybiblioteka.su - 2015-2024 год. (0.006 сек.)