Подпрограммы в Паскале (процедуры и функции)

Ход работы:

- понятие процедуры;

- понятие функции;

- роль формальных и фактических параметров;

- примеры составления процедур и функций.

При написании больших программ используется структурный подход, называемый также структурным программированием.

Программы, написанные с использованием структурного подхода, отличаются удобством в наладке и эксплуатации, а также легкостью понимания программного кода.

Это возможно благодаря тому, что:

- большая программа разбивается на относительно самостоятельные модули (вспомогательные алгоритмы). Такие модули можно разрабатывать и отлаживать независимо один от другого.

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

Подпрограмма – это выделенный в самостоятельную единицу участок программы, имеющий собственное имя, которое позволяет вызывать подпрограмму из основной программы.

Применение подпрограмм дает возможность:

- уменьшить число повторений одной и той же последовательности операторов.

Два вида подпрограмм:

- процедуры

- функции.

Процедуры.

Формальные и фактические параметры.

Процедуры (подпрограммы) и функции, приводятся в разделе описания основной программы.

Процедура - это независимая именованная часть программы, которую можно вызвать из любой точки программы для выполнения определенных действий.

Чтобы процедурой можно было воспользоваться из основной программы, она должна быть описана.

Описание процедуры размещается в программе после раздела описания переменных.

В состав описания входят заголовок и тело процедуры.

Заголовок процедуры состоит из:

- служебного слова procedure,

- именипроцедуры

- списка формальных параметров, заключенного в круглые скобки (список параметров не обязателен). Элементы списка параметров отделяются друг от друга запятыми.

Например:

Procedure Name_P(p1, p2,...: "тип";

Var p3, p4,...: "тип";...;

Здесь Procedure - служебные слова,

Name_P- имя процедуры,

p1, p2- имена формальных параметров-значений,

p3, p4 - имена формальных параметров-переменных,

. . . - многоточие означает возможность перечисления большего числа параметров.

В дальнейшем, если не оговаривается особо, все сказанное к процедуре относится также и к функции.

Процедуры и функции имеют заголовок, раздел описания и раздел операторов.

Тело процедуры по структуре аналогично программе, то есть включает в себя описания меток, констант, типов, переменных, а также раздел операторов:

procedure <имя> (формальные параметры);

const ...;

type . . .;

var ...;

Begin

<операторы>

end;

Вызов процедурыосуществляется в разделе выполнения основной программы или других процедур (вложенные процедуры).

Программа (процедура), внутри которой вызывается другая процедура называется внешней по отношению к вызываемой процедуре.

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

Например:

Name_P(p11, p22,..., p33, p44,...); - вызов процедуры Name_P,

Y:= Name_F("список фактических параметров"): - вызов функции Name_F,

Здесьp11, p22, . . . - имена или значения переменных,

p33, p44, . . . - имена переменных, значения которых возвращаются в программу.

Y- переменная, которой присваивается значение, возвращаемое функцией.

Типы соответствующих формальных и фактических параметровдолжны совпадать.

Имена могут совпадать или быть различными.

Вместо параметров-значений можно подставлять имена переменных, значения переменных или выражения.

Вместо параметров-переменных подставляются имена переменных.

Функция и параметры-переменные возвращают во внешнюю программу значения, полученные после окончания работы функции или процедуры. Изменения параметров-значений в процедуре носит локальный характер, во внешней программе соответствующие фактические параметры не изменяются.

Если не требуется передавать во внешнюю программу новые значения, то следует использовать параметры-значения, а не параметры-переменные.

В целях универсальности процедур следует все значения в процедуру передавать через список параметров, а переменные внутри процедуры описывать.

Пример процедуры вывода на экран визитной карточки программиста.

Program NP_1;

Var Dat, Fam: string;{ Fam: глобальная переменная }

Procedure VIZ(D_R :string); { D_R - формальный параметр }

Var S_t: string; { S_t: локальная переменная }

Begin Writeln('| -------------------------------- |');

Writeln('| Разработчик программы:', Fam:14,' |');

Writeln('| |');

Writeln('| г. УФА, ', D_R:14,' |');

Writeln('| Телефон: 22-44-66 |');

Writeln('| -------------------------------------- |');

Write(' Комментарий: ');

Readln(S_t)

end;

Begin

Fam:='И.И.Иванов';

Dat:='06.12.95';{Dat - фактический параметр }

VIZ(Dat); { вызов процедуры }

Readln

END.

Пример:

Процедура вычисления дискриминанта квадратного уравнения:

procedure Discr (А, В, С, D: real);

begin

D:=B*B-4*A*C;

end;

В этой процедуре использованы переменные А, В, С, D типа real.

Они являются формальными параметрами.

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

При этом соблюдаются следующие правила:

Соответствие между параметрами команды вызова и формальными параметрами процедуры устанавливается не по именам, а по порядку следования:

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

- второй фактический параметр - второй переменной и т.д.

В качестве фактических параметров (аргументов) могут использоваться не только имена переменных или табличных величин, но и константы, арифметические выражения.

Типы соответствующих параметров команды вызова и заголовка процедуры должны совпадать.

Наши рекомендации