
- •Функция.
- •Function имя (список; параметров):тип;
- •1) Возвращаемое значение – скаляр;
- •2) Тип возвращаемого значения должен быть базовым;
- •3) Обязательной является хотя бы однократная запись в теле функции оператора вида:
- •I,max: integer;
- •Модули.
- •Interface
- •Implementation
- •Interface
- •Implementation
- •I,j, X:integer;
- •1: Begin
- •2: Begin
- •3: Begin
- •Var max,imax:integer);
- •I: integer;
формат процедуры
Процедура – это Паскаль-программа стандартного формата, но отличающаяся от программы заголовком, а также она не может выполняться самостоятельно, а обязательно должна быть вызвана для выполнения.
Процедуры размещаются в специальном разделе описательной части программы, вслед за разделом описаний.
Любая процедура состоит, аналогично программе, из заголовка процедуры и блока.
PROCEDURE ИМЯ_Процедуры (список ; формальных; пар-в);
Type . . . . .;
var . . . . .;
const . . . . ;
begin
{ операторы процедуры }
. . . . . .
end;
Заголовок процедуры представляет собой:
PROCEDURE ИМЯ (список ; формальных; пар-в);
где
PROCEDURE – служебное слово,
ИМЯ – имя процедуры,
СПИСОК ФОРМАЛЬНЫХ ПАРАМЕТРОВ - перечень имен для обозначения исходных данных и результатов работы процедуры с указанием их типов.
Параметры, перечисленные в списке, называются формальными. Допускается описание процедуры, не содержащей формальных параметров:
PROCEDURE <ИМЯ>;
Содержательная часть процедуры представляет собой блок и состоит, следовательно, из раздела описаний (меток, констант, типов, переменных, процедур, и функций) и раздела операторов, представляющего собой составной оператор BEGIN – END. Заканчивается блок процедуры точкой с запятой.
Type . . . . .;
var . . . . .;
const . . . . ;
begin
{ операторы процедуры }
. . . . . .
end;
Для того, чтобы процедура работала, она должна быть вызвана из программы.
Вид обращения к процедуре:
ИМЯ_Процедуры (список,фактических,параметров);
Входные и выходные параметры.
При обращении к процедуре с ней происходит обмен данными через элементы списка параметров. Данные, которые передаются в процедуру, называются входными. Данные, которые возвращаются из неё в вызывающую программу, называются выходными. Специальных описаний для входных и выходных параметров нет. Об этом даёт представление вид технологии передачи параметров.
Некоторые переданные в процедуру данные должны сохранять сделанные над ними изменения. Кроме того, из процедуры могут передаваться результаты обработки данных. Оба эти вида данных должны быть переданы в вызывающую программу и/или возвращены по специальной технологии – «по ссылке» (по адресу данных). При этом все действия с такими данными производятся над их оригиналами, так как используются их реальные адреса в ОП. Такие параметры в списке формальных параметров имеют специальный описатель VAR перед именем. (Не путать с разделом VAR из описательной части).
Если переданные в процедуру данные не изменяются или изменения сохранять не нужно, то можно применить технологию передачи – «по значению». В этом случае для каждого такого параметра автоматически создаётся копия, которая и передаётся в процедуру. После окончания работы процедуры копия так же автоматически уничтожается, а оригинал остаётся неизменным.
При составлении списка формальных параметров нет специальных требований к порядку размещения входных и выходных параметров. Однако можно рекомендовать в начале списка размещать входные, а в конце – выходные параметры.
Формальные и фактические параметры.
Все действия в процедуре описываются над формальными параметрами.
Данные в процедуру для обработки передаются, а результаты возвращаются из процедуры через список параметров.
При обращении к процедуре обмен данными с ней происходит с использованием списка фактических параметров. Список фактических параметров – это перечень объектов данных, которые передаются в процедуру для обработки или возвращаются из неё как результаты обработки.
Требования к соответствию формальных и фактических параметров:
ведущим в этой паре является список формальных параметров, список фактических параметров подстраивается под него;
количество фактических параметров в списке должно быть таким же, как и количество формальных параметров («количество»)
описания фактических параметров должны быть точно такими же, как и описания соответствующих формальных параметров («качество»);
порядок расположения фактических параметров в списке должен точно соответствовать порядку параметров в списке формальных параметров («порядок следования»).
в списке фактических параметров имена фактических параметров записываются через запятую без каких-либо описаний. Когда процедура выполняется, происходит замещение формальных параметров фактическими, которые и обрабатываются.
Обращение к процедуре в вызывающей программе имеет операторы и заканчивает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.
Структура модуля отличается от структуры обычной программы на языке Турбо Паскаль.
Модули имеют четыре основные части:
заголовок, который следует за зарезервированным словом UNIT;
описательную (интерфейсную) часть, которая начинается за зарезервированным словом INTERFACE (в ней помещаются объявления переменных, процедур, функций, констант и типов данных, которые должны быть доступны для других программных модулей, использующих данный модуль);
исполнительную (внутреннюю) часть, которая начинается словом IMPLEMENTATION (в нее входит текст подпрограмм и локальные объекты, доступные только внутри данного модуля) и
необязательную часть (секцию инициализации), расположенную после исполнительной части между словами BEGIN и END (при этом, если инициализация модуля не нужна, то в секции помещается лишь слово END).
Начинается модуль заголовком, состоящим из зарезервированного слова UNIT и имени модуля. Имя модуля обязательно должно совпадать с именем файла (имеющим расширение PAS), в котором он находится.
Модуль имеет следующую структуру:
UNIT имя модуля ; { должно совпадать с именем файла модуля }