Практически во всех серьезных программах используют подпрограммы. В Фортране существуют подпрограммы двух типов:
function (функция) и subroutine (подпрограмма общего вида).
Подпрограммы взаимодействуют с вызывающими их программными единицами (которые могут быть основными программами или, в свою очередь, являться подпрограммами) посредством обмена параметрами (аргументами). Подпрограммы-функции, в отличие от подпрограмм общего вида, возвращают также в своем имени некоторое значение.
Объявляется подпрограмма-функция так:
function <имя функции>(<список аргументов>)
<тело подпрограммы-функции>
return
end
А подпрограмма subroutine так:
subroutine <имя подпрограммы>(<список аргументов>)
<тело подпрограммы>
return
end
Отметим, что оператор return служит для возврата управления в вызывающую программную единицу. В случае его отсутствия выполнение программы просто будет завершено в подпрограмме.
Рекурсия- прием программирования, когда в подпрограмме встречается вызов этой же подпрограммы, в Фортране запрещена.
Приведем пример подпрограммы-функции, вычисляющей n-факториал(n!):
! основная программа
write(*,*)' n='
read(*,*) n
!считываем вводимое пользователем значение n
write(*,*) n,'!=',fu(n) !пишем возвращаемое функцией fu(n) значение n-факториала
end !конец основной программы
function fu(n)
!подпрограмма- функция fu
f=1
do i=1, n
f=f*i
!в цикле вычисляем факториал, f
end do
fu=f
!функция возвращает значение факториала
return
!передача управления в основную программу
end
!конец подпрограммы-функции fu
Приведем пример подпрограммы subroutine, вычисляющей n-факториал(n!).
Подпрограммы типа subroutine не возвращают в себе никаких значений: они взаимодействуют с вызывающей программой только через передаваемые аргументы. В подпрограмме
fu - два аргумента (параметра): n и f:
write(*,*)' n='
read(*,*) n
call fu(n,fuctorial) !!!обращение к подпрограмме fu оператором call
write(*,*) n,'!=',fuctorial
end
subroutine fu(n, f) !заголовок подпрограммы fu
f=1
do i=1, n
f=f*i
end do
return
end
!конец подпрограммы fu
то же на С то же на Basic то же на Pascal
аналог на JavaScript