Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Процедуры_функции_осень_2012ред.doc
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
120.32 Кб
Скачать

формат процедуры

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

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

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

PROCEDURE ИМЯ_Процедуры (список ; формальных; пар-в);

Type . . . . .;

var . . . . .;

const . . . . ;

begin

{ операторы процедуры }

. . . . . .

end;

Заголовок процедуры представляет собой:

PROCEDURE ИМЯ (список ; формальных; пар-в);

где

PROCEDURE – служебное слово,

ИМЯ – имя процедуры,

СПИСОК ФОРМАЛЬНЫХ ПАРАМЕТРОВ - перечень имен для обозначения исходных данных и результатов работы процедуры с указанием их типов.

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

PROCEDURE <ИМЯ>;

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

Type . . . . .;

var . . . . .;

const . . . . ;

begin

{ операторы процедуры }

. . . . . .

end;

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

Вид обращения к процедуре:

ИМЯ_Процедуры (список,фактических,параметров);

Входные и выходные параметры.

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

Некоторые переданные в процедуру данные должны сохранять сделанные над ними изменения. Кроме того, из процедуры могут передаваться результаты обработки данных. Оба эти вида данных должны быть переданы в вызывающую программу и/или возвращены по специальной технологии – «по ссылке» (по адресу данных). При этом все действия с такими данными производятся над их оригиналами, так как используются их реальные адреса в ОП. Такие параметры в списке формальных параметров имеют специальный описатель VAR перед именем. (Не путать с разделом VAR из описательной части).

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

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

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

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

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

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

Требования к соответствию формальных и фактических параметров:

  1. ведущим в этой паре является список формальных параметров, список фактических параметров подстраивается под него;

  2. количество фактических параметров в списке должно быть таким же, как и количество формальных параметров («количество»)

  3. описания фактических параметров должны быть точно такими же, как и описания соответствующих формальных параметров («качество»);

  4. порядок расположения фактических параметров в списке должен точно соответствовать порядку параметров в списке формальных параметров («порядок следования»).

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

Обращение к процедуре в вызывающей программе имеет операторы и заканчиваетcя на (;). После имени процедуры указывается список фактических параметров, написанных через запятую (см. требования к фактическим и формальным параметрам) без описателей типа и технологии передач. Когда в программе встречается имя процедуры, происходит приостановка работы основной программы и управление передаётся внутрь процедуры, где осуществляются вычисления согласно алгоритму. После завершения процедуры управление возвращается в вызывающую программу на оператор, стоящий за обращением к процедуре.

В списках фактических и формальных параметров имена соответствующих друг другу параметров могут быть одинаковыми, похожими или совершенно различными. Подпрограмма в виде процедуры имеет от одного до m входных параметров и от одного до n выходных параметров.

Пример.

Процедуры ввода и вывода одномерного массива могут иметь вид:

{ процедура ввода вектора }

PROCEDURE vvodmas (var n: integer; var a: mas);

{выходные параметры}

var

I : integer;

begin

writeln ('введите количество ’,

элементов вектора < 25');

readln (n);

for i:= 1 to n do

begin

write ('a[',i,']= ' ) ;

readln (a[i]);

end;

end;

{ процедура вывода вектора }

PROCEDURE vivmas (n: integer; a: mas);

var

I : integer;

begin

writeln ('М А С С И В');

for i:=1 to n do

write (a [i] : 6 );

readln;

end;

Тогда вызывающая программа может иметь такой вид (фрагмент)

PROGRAM MAIN;

uses

Vect_fir; { подключение модуля пользователя}

{ если процедуры размещены в нём}

Type

mas = array [1..25] of integer;

var

N : integer;

A : mas;

. . .

{ либо она размещена в модуле }

. . .

. { процедура вывода вектора, либо она размещена в модуле }

. . .

BEGIN

. . .

vvodmas (N,a);

. . .

vivmas (N,a);

. . .

END.

В вызывающей программе обращение к процедурам остаётся одинаковым и при внутренних процедурах, и при размещённых в модуле.

Можно рекомендовать давать соответствующим параметрам похожие, но не одинаковые имена, чтобы подчеркнуть, что это разные вещи.

Обращение к процедуре в вызывающей программе имеет операторы и заканчиваетcя на (;). После имени процедуры указывается список фактических параметров, написанных через запятую (см. требования к фактическим и формальным параметрам) без описателей типа и технологии передач. Когда в программе встречается имя процедуры, происходит приостановка работы основной программы и управление передаётся внутрь процедуры, где осуществляются вычисления согласно алгоритму. После завершения процедуры управление возвращается в вызывающую программу на оператор, стоящий за обращением к процедуре.

В списках фактических и формальных параметров имена соответствующих друг другу параметров могут быть одинаковыми, похожими или совершенно различными. Подпрограмма в виде процедуры имеет от одного до m входных параметров и от одного до n выходных параметров.

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

Из процедуры возможен принудительный выход с помощью оператора Exit.

Функция.

Функция – это подпрограмма, результат выполнения которой есть единственное скалярное значение, присваиваемое имени этой функции. Следовательно, функции являются частным случаем процедур и принципиально отличаются от них тем, что, во-первых, результат выполнения функции – одно значение, а процедуры – одно или несколько; во-вторых, результат выполнения функции передается в основную программу, как значение имени этой функции, а результаты выполнения процедуры – как значения ее параметров.

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

Function имя (список; параметров):тип;

где

FUNCTION – служебное слово,

ИМЯ – имя функции,

СПИСОК ПАРАМЕТРОВ – перечень формальных параметров (исходных данных) с указанием их типов,

ТИП – тип результата: значение, которое должно приобретать имя функции.

Допускается описание функции без параметров:

FUNCTION <ИМЯ>: <ТИП>;

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

Подпрограмма в виде функции оформляется тогда, когда в качестве результата работы алгоритма формируется одно значение (скаляр, но не массив), например, максимум в массиве, const True или False, когда определяется, простое ли число. Хотя в таком виде может быть использована и процедура.

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

Function имя_функции[(список[;формальных;параметров…] )]: тип_возвращаемого_значения;

{ раздел описаний } Begin

.

Имя_функции : = Результат;

End:

1) Возвращаемое значение – скаляр;

2) Тип возвращаемого значения должен быть базовым;

3) Обязательной является хотя бы однократная запись в теле функции оператора вида:

Имя_функции : = Результат;

Этот оператор обеспечивает возврат вычисленного значения в вызывающую программу. В качестве результата может быть const, имя переменной или выражение соответствующего типа.

Обращение к функции в вызывающей программе происходит путём записи имени функции в правой части оператора присваивания, возможно в составе выражения.

Q : = ABS(P+x) / Z;

R : = ABS(x);

Когда в составе выражения встречается имя функции, то происходит приостановка вызывающей программы, управление передаётся функции, где согласно алгоритму производятся вычисления. После завершения функции, управление возвращается в вызывающую программу, в выражение вместо имени функции подставляется вычисленное значение и вычисление выражения продолжается далее.

FUNCTION MAX_in_VECT(n:integer; A : VCT):INTEGER;

VAR

I,max: integer;

BEGIN

MAX:=A[1];

Imax:=1;

FOR I:=1 TO N DO

IF A[I]>max

THEN BEGIN

max:=A[I];

END;

MAX_in_VECT := max;

END;

Обращение к функции в программе

. . .

Y := MAX_in_VECT( n1, A1 );

Модули.

Процедуры и функции могут быть сгруппированы в отдельный модуль. Модуль (unit)- это программная единица, текст которой компилируется автономно (независимо от главной программы). Если модуль откомпилирован , то результат имеет расширение TPU.

Структура модуля отличается от структуры обычной программы на языке Турбо Паскаль.

Модули имеют четыре основные части:

  1. заголовок, который следует за зарезервированным словом UNIT;

  2. описательную (интерфейсную) часть, которая начинается за зарезервированным словом INTERFACE (в ней помещаются объявления переменных, процедур, функций, констант и типов данных, которые должны быть доступны для других программных модулей, использующих данный модуль);

  3. исполнительную (внутреннюю) часть, которая начинается словом IMPLEMENTATION (в нее входит текст подпрограмм и локальные объекты, доступные только внутри данного модуля) и

  4. необязательную часть (секцию инициализации), расположенную после исполнительной части между словами BEGIN и END (при этом, если инициализация модуля не нужна, то в секции помещается лишь слово END).

Начинается модуль заголовком, состоящим из зарезервированного слова UNIT и имени модуля. Имя модуля обязательно должно совпадать с именем файла (имеющим расширение PAS), в котором он находится.

Модуль имеет следующую структуру:

UNIT имя модуля ; { должно совпадать с именем файла модуля }