Опубликован: 01.11.2012 | Уровень: для всех | Доступ: платный | ВУЗ: Томский государственный университет систем управления и радиоэлектроники
Лекция 6:

Процедуры

< Лекция 5 || Лекция 6: 123 || Лекция 7 >
Аннотация: Шестая лекция рассказывает о создании пользовательских функций и подпрограмм. Рассматриваются внутренние, внешние и модульные процедуры, область видимости и механизм передачи параметров, optional-параметры, оператор interface, return, external, intrinsic. Уделяется внимание созданию рекурсивных процедур, чистых и элементных процедур.

Вы можете скачать презентацию к данной лекции здесь.

Назначение процедур

  • Разбиение исходной задачи на подзадачи
  • Устранение дублирования кода
  • Повторное использование написанного кода
  • Библиотеки готовых подпрограмм и функций
  • Раздельное написание программ

Виды процедур


Модульные процедуры

Описываются в модулях после оператора contains.

Обладают явным интерфейсом.

Имеют доступ ко всем объектам модуля (типы данных, переменные, внутренние процедуры) при несовпадении имён

Могут содержать другие внутренние процедуры.

Внутренние процедуры

Описываются в головной программе после оператора contains.

Обладают явным интерфейсом.

Имеют доступ ко всем объектам головной программы (типы данных, переменные, внутренние процедуры) при несовпадении имён

Не могут содержать другие внутренние процедуры.

Внешние процедуры

Описываются отдельно от головной программы или в других файлах.

Обладают неявным интерфейсом.

Обмен данными с головной программы происходит посредством формальных параметров.

Могут содержать другие внутренние процедуры.

Функции

тип function имя_функции (формальные
                          параметры)
	типы формальных параметров
	типы внутренних переменных
	исполняемые операторы
	имя_функции = вычисленное значение
end function имя_функции

Результатом может выступать также переменная описанная в операторе result после объявления функции.

Пример.

Функция представлена тригонометрическим рядом

f(x,N)=\sum^N_{k=1} \frac{sin\ kx}{k}

Тип функции – вещественный;

формальные параметры – x -вещественный, k -целый;

внутренние переменные – сумма (вещественный), индекс суммирования (целый).

!**************************************************
!                     Функция f(x)
!**************************************************
real function f(x,N)
!------------- формальные параметры ---------------
  real x
  integer N
!------------- внутренние переменные --------------
  real sum
  integer k
!--------------------------------------------------
  sum = 0.0d0
  do k = 1,N
    sum = sum + sin(k*x)/k
  end do
  f = sum  ! результат присвоили имени функции
end function f

Вызов функции

Вызов созданной функции аналогичен вызову стандартной функции


Вызов функции без параметров

program func2

 write(*,*) pi() 

end

!**************************************************
!        Функция возвращает число Пи
!**************************************************
real function pi()
  pi = 2.0*acos(0.0)
end function pi

При вызове должны соответствовать:

  1. тип функции и тип переменной, которой присваивается результат функции
  2. тип формальных и фактических параметров

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

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

Подпрограмма печати прямоугольной таблицы символов


формальные параметры – M, Т (целый), CH (символьный);

внутренние переменные – индексы таблицы (целый).

!**************************************************
!        Подпрограмма печати таблицы символов
!**************************************************
subroutine table(M,N,CH)
!------------- формальные параметры ---------------
  integer M,N
  character CH
!------------- внутренние переменные --------------
  integer i,j
!--------------------------------------------------
  do k = 1,M
    do j = 1,N
      write(*,"(A,\)") CH
    end do
    write(*,*)
  end do
end subroutine table

Вызов подпрограммы

Оператор call вызывает подпрограмму


< Лекция 5 || Лекция 6: 123 || Лекция 7 >
Игорь Артёмов
Игорь Артёмов
Россия, Томск, Томский государственный университет, 1998