Тема: «СОЗДАНИЕ СОБСТВЕННЫХ ПРОЦЕДУР И ФУНКЦИЙ В DELPHI»
Подпрограмма - именованная, логически законченная группа операторов языка, которую можно вызвать для выполнения по имени любое количество раз из различных мест программы. В языке Паскаль существуют два вида подпрограмм:
¨ процедуры;
¨ функции.
Главное отличие процедур от функций: результатом функции является одно единственное значение.
Все процедуры и функции языка Паскаль можно разделить на 2 класса:
· стандартные процедуры и функции языка Паскаль.
· процедуры и функции, определенные пользователем.
ПРОЦЕДУРЫ.
Для того, чтобы можно было пользоваться новой процедурой или функцией, ее нужно описать в разделе описания процедур и функций. Затем там, где это необходимо, вызвать процедуру (функцию).
Описание процедуры состоит из заголовка процедуры и тела процедуры. Заголовок процедуры состоит из служебного слова procedure, имени процедуры и заключенного в круглые скобки списка формальных параметров с указанием их типов (именно типов, а не их описаний!).
procedure < имя > (<список формальных параметров>);
Например:
procedure a17 (a:integer; b,c:real; var x1,x2:real; var k:integer);
Формальные параметры разных типов отделяются точкой с запятой. После заголовка в процедуре идут разделы описаний (констант, типов переменных, процедур и функций, используемых в процедуре) и операторы, реализующие алгоритм процедуры.
Например:
procedure f (r:integer; var r1:integer);
var i:integer;
Begin
if r<=0 then
Begin
r1:=0;
exit;
end;
r1:=1;
for i:=2 to r do
r1:=r1*i;
end;
Формальные параметры нельзя описывать в разделе описаний процедуры. Для обращения к процедуре необходимо использовать оператор вызова процедуры. Он имеет следующий вид:
<имя> (<список фактических параметров>);
Например:
f (n,fn);
В списке фактических параметров параметры отделяются друг от друга запятой. Применение формальных-фактических параметров обеспечивает механизм замены, который позволяет выполнять процедуру с различными данными. Между фактическими параметрами в операторе вызова процедуры и формальными параметрами в заголовке процедуры устанавливается взаимно однозначное соответствие. Количество, типы и порядок следования формальных и фактических параметров должны совпадать.
Пример:
……….
var r,r1,r2:real;
//--------------------------- описание процедуры ------------------------------
procedure f1 (x:real; var y:real; var c:real); //
Begin
y:=sin(x)/cos(x);
c:=ln(x)/ln(10);
end;
//---------------------------------------------------------------------------------------
Begin
r:=StrToFloat(Edit_r.Text);
f1(r,r1,r2); //вызов процедуры
Edit_r1.Text:=FloatToStr(r1);
Edit_r2.Text:=FloatToStr(r2);
end;
………….
Формальные и фактические параметры.
Можно выделить 2 класса формальных параметров:
· параметры-значения;
· параметры-переменные;
Группа параметров, перед которыми отсутствует служебное слово var, называется параметрами-значениями. Группа параметров, перед которыми есть служебное слово var, называется параметрами-переменными.
Параметры-значения используются в качестве входных параметров подпрограммы. При их использовании фактические параметры никак не изменяются. При обращении к подпрограмме значения фактических параметров передаются в подпрограмму и там обрабатываются уже формальные параметры.
Параметры-переменные могут использоваться как в качестве входных параметров, так и в качестве выходных параметров. При их использовании в результате выполнения подпрограммы изменяются фактические параметры. При обращении к подпрограмме фактические параметры замещают формальные и сами непосредственно участвуют в выполнении процедуры. В результате выполнения подпрограммы изменяются значения фактических параметров.
В качестве входных параметров нужно использовать параметры-значения, в качестве выходных - параметры-переменные.
Пример процедуры решения квадратного уравнения.
procedure korni (a,b,c:real;var x1,x2:real;var pr:integer);
var d:real;
Begin
d:=b*b-4*a*c;
if d>=0 then
Begin
pr:=1;
x1:=(-b+sqrt(d))/2/a; x2:=(-b-sqrt(d))/2/a;
End
else pr:=0
end;
Функции
Описание функции состоит из заголовка функции и тела функции. Заголовок содержит служебное слово function, имя функции, список формальных параметров с указанием типа и типа возвращаемого результата.
function <имя> (<список формальных параметров>):<тип>;
Например:
function tan (x:real):real;
function max(x,y:real):real;
function a1(x:real; y:integer):real;
Обращение к функции осуществляется по имени с указанием списка фактических параметров. Количество, типы и порядок следования формальных и фактических параметров должны совпадать.
<имя> (<список фактических параметров>);
Функции могут возвращать значения целых, вещественных, логических, символьных типов. В теле функции всегда (!!!) должен быть один оператор, присваивающий имени функции или специальной зарезервированной переменной Result возвращаемое функцией значение.
procedure Имя_процедуры(список формальных параметров);
Begin
Код процедуры;
end;
function Имя_функции(список формальных параметров): тип_результата;
begin
Код функции;
Result:=результат; // или Имя_функции:= результат;
end;
Рассмотрим программу суммирования двух чисел.