
- •Введение
- •Описание подпрограмм
- •Заголовок подпрограммы
- •Список формальных параметров
- •Параметры-значения
- •Параметры-переменные
- •Нетипизированные параметры
- •Умалчиваемые параметры
- •Параметры-массивы
- •Параметры-строки
- •Параметры-записи
- •Локальные элементы подпрограмм
- •Тело подпрограммы
- •Рекурсивные подпрограммы и опережающее описание
- •Примеры использования подпрограмм
- •Вычисление значений выражений
- •Ввод-вывод переменных типа запись
- •Работа с массивами
- •Сортировка методом прочесывания
- •Процедурные типы
- •Задания к лабораторной работе
- •Вопросы к лабораторной работе
- •Справочные таблицы

Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»
Параметры-строки
Так как параметр типа ShortString по сути является массивом символов, то передача такого параметра в подпрограмму осуществляется аналогично массивам, например
type NameStr=string[15];
procedure ShowName(AName: NameStr);
Строки типа AnsiString передаются как обычные параметры, например
procedure ShowName(AName: String);
Совет: В обоих выше приведенных случаях строки, как и массивы, рекомендуется передавать как параметры-константы. Не смотря на то, что переменная типа AnsiString по сути не содержит саму строку, а лишь адрес памяти где она располагается, компилятор все равно при передаче такого параметра в подпрограмму создаст копию строки. Именно по этому оптимальнее использовать параметрконстанту, а не параметр-значение, например
type NameStr=string[15];
procedure ShowName(const AName: NameStr);
или
procedure ShowName(const AName: String);
Параметры-записи
В качестве формальных параметров могут использоваться переменные и константы типа запись. Правила объявления таких параметров схожи с объявлением параметровмассивов. Кроме того, для таких параметров лучше использовать параметры-константы вместо параметров-значений, например
type TPerson=record name:string[15]; fam :string[15]; oth :string[23];
end;
procedure ShowInfo(const APerson:TPerson);
Локальные элементы подпрограмм
Локальные элементы являются необязательными при описании подпрограмм. Они располагаются между заголовком подпрограммы и телом подпрограммы. В качестве локальных элементов могут использоваться переменные, константы, типы, метки, а также другие подпрограммы, например:
procedure TestProc(var a:integer; b:real);
type TVector=array [1..3] of real; var i:integer;
В примере приведены два локальных описания. Локальный тип и локальная переменная. Обратите внимание, что недопустимо совпадение идентификаторов формальных параметров и идентификаторов локальных элементов подпрограмм (переменных, констант и т.п.). Особенностью локальных элементов является ограниченное время существования и ограниченная область видимости.

Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»
Время существования локальных элементов подпрограммы ограничено временем выполнения тела подпрограммы. После выхода из подпрограммы все локальные элементы уничтожаются.
Обратите внимание что значение локальных переменных после выхода из подпрограммы теряется и при следующем вызове данной подпрограммы локальные переменные содержат некоторые случайные значения. Поэтому перед их использованием им необходимо присвоить нужные значения.
Область видимости локальных элементов ограничена подпрограммой, включая вложенные подпрограммы, т. е. обращение к любым локальным элементам подпрограмм разрешено в теле подпрограммы и во всех вложенных подпрограммах и запрещено вне данной подпрограммы.
Типичная структура программы использующей подпрограммы имеет следующий вид
program ManyProc;
procedure A; procedure A1;
..........
begin
.....
end;{A1}
procedure A2;
..........
begin
.....
end;{A2}
begin
.....
end;{A}
procedure B; procedure B1;
..........
begin
.....
end;{B1}
procedure B2; procedure B21;
begin
....
end;{B21}
procedure B22; begin
....
end;{B22}
begin
....
end;{B2}
begin
.....
end;{B}

Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»
begin
end.{ManyProc}
Структуру выше приведенной программы можно представить в виде следующей схемы
ManyProc
A
procedure A1;
procedure A2;
Bprocedure B1; procedure B2;
procedure B21;
procedure B22;
Рисунок 1 – Структура программы
Тело подпрограммы
Тело подпрограммы находится в операторных скобках следующих за заголовком подпрограммы.
begin
<тело подпрограммы> end.
Тело подпрограммы может содержать выражения и любые операторы Object Pascal, в том числе и вызовы других подпрограмм.
При описании тела функции существует одна особенность. Так как функция может использоваться в выражениях, то необходимо указать результат вычисления функции который следует использовать в выражении. Сделать это можно двумя способами:
−в теле функции должна присутствовать строка вида <имя функции>:=<результат>;
−в теле функции должна присутствовать строка вида Result:=<результат>.
Следует отметить, что после указанных строк выполнение функции не прерывается. Практически, имя функции (или идентификатор Result) рассматривается как формальный параметр-переменная и соответственно к нему применимы все правила для работы с переменными, например