Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Процедуры-подпрограммы




...

Enddo

Enddo

Endif

Пример функции

Процедуры-функции

Структура процедуры-функции имеет вид:

[ Тип ] function имя функции (список формальных параметров)

[ Операторы описания ]

[ Исполняемые операторы ]

[ contains

внутренние процедуры ]

end [ function [ имя функции ]]

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

Оператор function называется заголовком функции. Тип функции, указанный в ее заголовке, является типом возвращаемого значения. Кроме того, в заголовке указывается уникальное имя функции, составленное по правилам Фортрана, и список формальных параметров в круглых скобках.

Среди операторов описания должны присутствовать описания формальных параметров функции и внутренних (локальных) переменных и массивов.

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

Если в операторе end указано имя функции, оно должно совпадать с именем в заголовке функции.

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

real:: A

A = имя функции (список фактических параметров)

Примеры обращения к функции:

y = sin(x)

a = sqrt(x) + sqrt(s)

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

real function Max_Abs(Array, cRows, cCols)

! заголовок функции; возвращаемое значение вещественного типа

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

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

! формальные параметры функции – массив, количество его строк и столбцов

integer, intent (in):: cRows, cCols

real, dimension (1:cRows,1:cCols), intent (in):: Array

! локальные переменные

integer:: i, j! переменные циклов

integer:: NumI, NumJ! координаты элемента матрицы

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

NumI = 1; NumJ = 1! максимальным по модулю считаем Array(1,1)

do i = 1, cRows

do j = 1, cColumns

if (abs (Array(i,j)) > abs (Array(NumI,NumJ))) then

NumI = i; NumJ = j

Max_Abs = Array(NumI,NumJ)! возвращаемое значение

end function Max_Abs

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

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

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

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

real:: Max_Abs! описание типа возвращаемого значения функции

! фактические параметры функции Max_Abs –

! массив, число его строк и столбцов

Array = Array / Max_Abs(Array, cR, cCol)

Комментарии к примеру:

1) Обратите внимание на соответствие формальных и фактических параметров. Правила их соответствия будут описаны ниже.

2) Формальные параметры cRows и cColumns в процедуре-функции должны быть описаны до их использования при описании массива.

3) Переменные i, j, NumI, NumJ в процедуре-функции локальны, они недоступны за ее пределами.

4) В алгоритме функции поиск максимального по модулю элемента заменен поиском его координат в массиве. После завершения циклов найти значение элемента массива по его координатам не представляет труда.

5) В главной программе должно присутствовать описание типа возвращаемого значения функции.

6) В главной программе использована возможность деления всех элементов на одно число без построения циклов.

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

Структура подпрограммы имеет вид:

subroutine Имя подпрограммы (список формальных параметров)

[ Операторы описания ]

[ Исполняемые операторы ]

[ contains

внутренние процедуры ]

end [ subroutine [ имя подпрограммы ]]

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

Оператор subroutine называется заголовком подпрограммы. Тип подпрограммы не существует, так как у нее нет возвращаемого значения. В заголовке указывается уникальное имя подпрограммы, составленное по правилам Фортрана и список формальных параметров в круглых скобках.

Так же, как и в функции, среди операторов описания должны присутствовать описания формальных параметров подпрограммы и внутренних (локальных) переменных и массивов.

Если в операторе end указано имя подпрограммы, оно должно совпадать с именем в заголовке подпрограммы.

Обращение к подпрограмме осуществляется оператором call, имеющим вид:

call имя подпрограммы [(список фактических параметров)]




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


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


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



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




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