Процедуры и функции пользователя.
Если в программе возникает необходимость частого обращения к некоторой группе операторов, выполняющих действие или вычисляющих значение какого-либо выражения, то рационально сгруппировать такую группу операторов в самостоятельный блок, к которому можно обращаться, указывая его имя. Такие разработанные программистом самостоятельные программные блоки называются подпрограммами пользователя. Они являются основой модульного программирования. Разбивая задачу на части и формируя логически обособленные модули как процедуры и функции, программист реализует основные принципы широко используемого в практике системного подхода и методов нисходящего программирования.
При вызове подпрограммы (процедуры или функции), определенной программистом, работа главной программы на некоторое время приостанавливается и начинает выполняться вызванная подпрограмма. Она обрабатывает данные, переданные ей из главной программы. По завершении выполнения подпрограмма-функция возвращает главной программе результат (подпрограмма-процедура не возвращает явно результирующего значения).
Передача данных из главной программы в подпрограмму и возврат результата выполнения функции осуществляется с помощью параметров.
Параметром называется переменная, которой присваивается некоторое значение в рамках указанного применения. Различают формальные параметры – параметры, определенные в заголовке подпрограммы, и фактические параметры – выражения, задающие конкретные значения при обращении к подпрограмме. При обращении к подпрограмме ее формальные параметры заменяются фактическими, переданными из главной программы.
Процедуры.
Описание процедуры включает заголовок (имя) и тело процедуры. Заголовок состоит из зарезервированного слова procedure, идентификатора (имени) процедуры и необязательного, заключенного в круглые скобки, списка формальных параметров с указанием типа каждого параметра. Имя процедуры – идентификатор, уникальный в пределах программы. Тело процедуры представляет собой локальный блок, по структуре аналогичный программе.
Описание меток, констант, типов и т. д. действительны только в пределах данной процедуры. В теле процедуры можно использовать любые глобальные константы и переменные.
procedure <имя>(формальные параметры);
const ...;
type ...;
var ...;
brgin
<операторы>;
end;
Процедура не может выполниться сама, ее необходимо вызвать по имени и указать фактические параметры того же типа, что и формальные. Количество и тип формальных параметров равны количеству и типу фактических параметров.
Пример.
Функции.
Функция, определенная пользователем, состоит из заголовка и тела функции. Заголовок содержит зарезервированное слова function, идентификатор (имя) функции, заключается в круглые скобки, необязательный список формальных параметров и тип возвращаемого функцией значения. Тело функции напоминает собой локальный блок, по структуре аналогичный программе.
function <имя>(формальные параметры):<тип результата>;
const ...;
type ...;
var ...;
brgin
<операторы>;
end;
В разделе операторов должен находиться, по крайней мере, один оператор, присваивающий имени функции значение. В точку вызова возвращается результат последнего присвоения.
Обращение к функции осуществляется по имени с необязательным указанием списка аргументов. Каждый аргумент должен соответствовать формальным параметрам, указанным в заголовке, и иметь тот же тип.
Пример.
Механизм передачи параметров.
Как было указано выше, в заголовке процедуры или функции, может быть задан список параметров, которые называются формальными. Название «формальные» эти параметры получили в связи с тем, что в этом списке заданы только имена для обозначения исходных данных и результатов работы процедуры, а при вызове подпрограммы на их место будут подставлены конкретные значения (выражений) и имен.
В списке должны быть перечислены имена формальных параметров и их типы. Имя параметра отделяется от типа двоеточием, а параметры друг от друга – точкой с запятой. Имена параметров одного типа можно объединять в подсписки, в которых имена отделяются друг от друга запятой.
Пример заголовков.
procedure P(q,w:char; i:byte);
procedure ABC;
Между формальными и фактическими параметрами должно быть полное соответствие:
· Формальных и фактических параметров должно быть одинаковое количество;
· Порядок следования фактических и формальных параметров должен быть один и тот же;
· Тип каждого фактического параметра должен совпадать с типом соответствующего формального параметра.
Параметры-значения. Параметры-значения используются только для передачи исходных данных из основной программы в подпрограмму (процедуру или функцию), в списке формальных параметров они перечисляются через запятую с обязательным указанием типов.
Если формальный параметр объявлен как параметр-значение, то фактическим параметром может быть произвольное выражение. При вызове подпрограммы фактические параметры вычисляются и используются как начальные значения формальных параметров, т. е. осуществляется подстановка значений. Если формальный параметр определен как параметр-значение, то перед вызовом процедуры это значение вычисляется, полученный результат помещается во временную память и передается процедуре. Даже если фактический параметр – простейшее выражение в виде константы или переменной, все равно процедуре будет передана лишь копия этой константы (переменной). В процессе выполнения подпрограммы формальные параметры могут изменяться, но это никак не отразиться на соответствующих фактических параметрах-переменных, которые сохранят те значения, которые имели до вызова подпрограммы, так как меняются не они, а их копия. Поэтому параметры-значения нельзя использовать для передачи результатов из подпрограммы в основную программу.
Параметры-переменные. Параметры-переменные используются для определения результатов выполнения процедуры и в списке формальных параметров перечисляются после зарезервированного слова var с обязательным указанием типа. Каждому формальному параметру, объявленному как параметр-переменная, должен соответствовать фактический параметр в виде переменной соответствующего типа.
procedure P(q,w:char; var i:byte);
Если формальный параметра определен как параметр переменная, то при вызове процедуры ей передается сама переменная, а не ее копия, и изменение параметра-переменной приводит к изменению фактического параметра в вызывающей программе.
Следовательно, исходные данные в процедуру из программы могут передаваться как через параметры-значения, так и через параметры-переменные, а результаты работы процедуры возвращаются в вызывающую программу только через параметры-переменные.
<== предыдущая лекция | | | следующая лекция ==> |
Сортировка вставками. | | | Функции обработки строк |
Дата добавления: 2016-02-02; просмотров: 1222;