Каждая подпрограмма определяется уникальным именем (идентификатором). Замечание: тексты подпрограмм помещаются в раздел описаний процедур и функций

Вид материалаПрограмма

Содержание


Оператор1, ОператорN – операторы, входящие в состав процедуры.
ТипВозвращаемогоРезультата – тип данных, соответствующий типу значения, возвращаемому через имя функции
Оператор1, ОператорN – операторы, входящие в состав процедуры.
ИмяПараметра – идентификатор параметра
Подобный материал:
Лекция № 11.


§ 10. Процедуры и функции

1. Основные сведения.


Алгоритм решения задачи проектируется путем декомпозиции всей задачи в отдельные подзадачи. Обычно подзадачи реализуются в виде подпрограмм.


Определение: подпрограмма - это именованная последовательность операторов, которые определены и записаны только в одном месте программы, однако их можно вызвать для выполнения из нескольких точек программы.


Замечание: в языке Паскаль существует два типа подпрограмм – процедуры и функции.

Определение: процедура – выполняет определенные действия (операторы).

Определение: функция – выполняет определенные действия (операторы) и возвращает через свое имя рассчитанное в функции значение (результат).


Замечание: каждая подпрограмма определяется уникальным именем (идентификатором).

Замечание: тексты подпрограмм помещаются в раздел описаний процедур и функций.

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

Замечание: внутренние переменные подпрограммы являются локальными, т.е. недоступны извне подпрограммы и могут совпадать с именами переменных основной программы, в этом случае внутренняя переменная «перекрывает» внешнюю.


Формат процедуры:

procedure ИмяПодпрограммы [(список параметров подпрограммы)];

Раздел описания подпрограммы;

begin Оператор1; Оператор2; … ОператорN; end;,

где список параметров подпрограммы – предаваемые в процедуру и возвращаемые процедурой данные;

Раздел описания подпрограммы – раздел в котором подключаются необходимые модули, описываются константы, типы данных, переменные, внутренние процедуры и функции;

Оператор1, ОператорN – операторы, входящие в состав процедуры.


Формат функции:

function ИмяПодпрограммы [(список параметров подпрограммы)]: ТипВозвращаемогоРезультата;

Раздел описания подпрограммы;

begin Оператор1; Оператор2; … ОператорN; end;,

где список параметров подпрограммы – предаваемые в процедуру и возвращаемые процедурой данные;

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

Раздел описания подпрограммы – раздел в котором подключаются необходимые модули, описываются константы, типы данных, переменные, внутренние процедуры и функции;

Оператор1, ОператорN – операторы, входящие в состав процедуры.


2. Передача данных в подпрограмму и из подпрограммы.


Данные передаются в подпрограмму и из подпрограммы через список параметров.


Формат списка параметров: (ОписаниеПараметра1; ОписаниеПараметра2; … ОписаниеПараметраN)


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


Формат описания параметра: [var] ИмяПараметра: ТипДанныхПараметра;

где var – признак того, что передаваемые через параметр данные (переменная) могут изменяться в подпрограмме;

ИмяПараметра – идентификатор параметра;

ТипДанныхПараметра – тип данных, соответствующий типу значения, передаваемому через параметр.


Замечание: передача данных через параметр без использования ключевого слова var – называется передача данных «по значению».

Замечание: передача данных через параметр с использованием ключевого слова var – называется передача данных «по адресу».

Замечание: var-параметры должны следовать после не-var-параметров.

Замечание: параметры подпрограммы являются локальными, т.е. недоступны извне подпрограммы.


Примеры.
  1. Очистка экрана через процедуру ClearScreen;
  2. Возведение числа в произвольную степень через функцию(Ln и Exp);
  3. Деление двух чисел через процедуру и через функцию (в функции проверка на ноль в качестве результата).


Замечание: если в операторе внутри подпрограммы используется имя процедуры, то подпрограмма будет вызываться рекурсивно (бу­дет при выполнении обращаться сама к себе).


Пример.

Функция нахождения n!

function NFactor(n: integer): longint;

begin

if (n = 0) then

NFactor := 1

else

NFactor := NFactor(n - 1) * n;

end;