Внутренние процедуры
End
Endif
If (YesPlus) then
End interface
Interface
Endif
If (Yes) then
Enddo
Enddo
Endif
Yes = cPos>0 ! признак наличия положительных элементов
Ar = Summa / cPos
Geom = Prod ** (1./cPos)
end subroutine Primer
В главной программе:
implicit none! оператор должен быть в каждой программной единице
integer, parameter:: cR = 6, cCol = 8
real, dimension(1:cR, 1:cCol) :: Array
! локальные переменные
logical:: YesPlus ! признак – есть эл-ты >0
real :: Ar, Geom ! средние значения
! интерфейс подпрограммы
subroutine Primer(Matrix, Yes, Ar, Geom) ! заголовок процедуры
implicit none! оператор должен быть в каждой программной единице
! формальные параметры
real, dimension(:,:), intent(in) :: Matrix ! матрица
logical, intent(out) :: Yes ! признак – есть эл-ты >0
real, intent(out) :: Ar, Geom ! средние значения
end subroutine Primer
! исполняемые операторы:
. . .
call Primer(Array, YesPlus, Ar, Geom)
. . . ! печать результатов
В этом примере при описании массива – формального параметра – указаны только его тип и ранг; протяженности массива по измерениям не включены в список параметров. Форма массива перенимается у соответствующего фактического параметра. В этом случае присутствие интерфейса процедуры в вызывающей программе обязательно.
Среди исполняемых операторов подпрограммы с помощью функции shape определяется форма массива-параметра – одномерный массив Shape_Matr. Протяженности массива по измерениям равны Shape_Matr(1) (количество строк матрицы) и Shape_Matr(2) (количество ее столбцов).
Внутренние процедуры, в отличие от внешних, не могут содержать собственных внутренних процедур и имеют вид:
Заголовок процедуры
[Операторы описания]
[Исполняемые операторы]
Оператор end процедуры
Текст внутренней процедуры включается в текст вызывающей ее программы после всех исполняемых операторов этой программы. Оператор contains отделяет исполняемые операторы внешней программы от описания внутренних процедур. Во внешнюю программу после оператора contains может быть вложена одна или несколько внутренних процедур.
Внутренняя процедура, будучи вложенной во внешнюю программу, не является самостоятельной и импортирует обозначения программы-носителя, поэтому может компилироваться только в составе внешней программной единицы.
Все обращения к внутренним процедурам могут производиться только из компонента-носителя. Обмен данными с внутренними процедурами может происходить не только через параметры подпрограмм, но и путем заимствования их у программы-носителя.
Среди внутренних процедур различаются процедуры-функции function и процедуры-подпрограммыsubroutine.
Пример внутренней процедуры-функции:
program main