Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Параметры процедур




Пример подпрограммы

Написать подпрограмму, меняющую местами первую и последнюю строки вещественной матрицы.

subroutine Transform(Matrix, cRows, cCols)! заголовок

! операторы описания:

implicit none! оператор должен быть в каждой программной единице

! формальные параметры

integer:: cRows, cCols! количество строк и столбцов массива

real, dimension (1:cRows, 1:cCols)::Matrix! матрица

! локальный временный массив для одной строки:

real, dimension (1:cCols):: Temp

! исполняемые операторы:

cRows = size (Matrix,1)! количество строк матрицы

Temp = Matrix(1,:)! первая строка матрицы

Matrix(1,:) = Matrix(cRows,:)! последняя строка на место первой

Matrix(cRows,:) = Temp! первая строка на место последней

end subroutine Transform

В главной программе:

integer, parameter:: cR = 6, cCol = 8

real, dimension (1:cR, 1:cCol):: Array

...

call Transform(Array, cR, cCol)

В подпрограмме используется временный локальный массив Temp, длина которого равна длине строки матрицы (cCols). Память для этого массива выделяется динамически при выполнении подпрограммы.

Рассмотрим подробнее способ передачи данных между вызывающей программной единицей и процедурой через параметры. В этом случае в заголовке процедуры указывается список формальных параметров. Формальными параметрами могут быть переменные и массивы, а также имена функций.

В операторах вызова процедуры указывается список фактических параметров. В отличие от формальных параметров, фактическими параметрами могут быть:

- переменные;

- массивы;

- имена функций;

- элементы массивов;

- секции массивов;

- константы – только входные параметры;

- выражения – только входные параметры.

Каждый параметр процедуры имеет следующие основные характеристики:

- тип;

- ранг – размерность или количество измерений; ранг переменной равен 0;

- назначение параметра – входной, выходной или универсальный (изменяемый).

Назначение формального параметра определяет атрибут intent.

Пример.

subroutine Transform(N, Pin, Result)! заголовок

! операторы описания:

implicit none! оператор должен быть в каждой программной единице

integer, intent (in):: N! входной параметр

real, intent (out):: Pin! выходной параметр

! Result – изменяемый параметр – одномерный массив:

real, dimension (:), intent (inout):: Result

Атрибут intent (in) в описании параметра определяет параметр как входной: такой параметр не должен изменяться во время работы подпрограммы.

Атрибут intent (out) определяет параметр как выходной, то есть параметр должен быть переопределен в процедуре, поэтому при входе в подпрограмму он переходит в состояние неопределенности. Соответствующий фактический параметр не может быть константой или выражением.

Универсальные параметры описываются с атрибутом intent (inout). Предполагается, что значение универсального параметра может быть переопределено, поэтому соответствующий фактический параметр не может быть константой или выражением.




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


Дата добавления: 2014-01-06; Просмотров: 300; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.