Использование
процедуры
Разработанную процедуру
нужно поместить в раздел implementation, перед подпрограммой, которая использует
эту процедуру.
Инструкция вызова процедуры
в общем виде выглядит так:
Имя(СписокПараметров);
где:
П имя — имя вызываемой
процедуры;
Фактическим параметром,
в зависимости от описания формального параметра в объявлении процедуры, может
быть переменная, выражение или константа соответствующего типа.
Например, инструкция
вызова приведенной выше процедуры решения квадратного уравнения может выглядеть
следующим образом:
SqRoot(StrToFloat(Edit1.Text),
StrToFloat(Edit2.Text),
StrToFloat(Edit3.Text),
k1,k2,rez);
Если в описании процедуры
перед именем параметра стоит слово var, то при вызове процедуры на месте соответствующего
параметра должна стоять переменная основной программы. Использование константы
или выражения считается ошибкой, и компилятор в этом случае выведет сообщение:
Types of actual and formal var parameters must be identical (ТИП фактического
параметра должен соответствовать типу формального параметра).
В листинге 6.6 приведена
программа решения квадратного уравнения, в которой используется процедура SqRoot.
Окно программы представлено на рис. 6.2.
Рис. 6.2.
Окно программы Квадратное уравнение
Листинг 6.6.
Решение квадратного уравнения (использование процедуры)
unit SqRoot_;
interface
uses
Windows, Messages, SysUtils, Variants, Classes,
Graphics,
Controls, Forms, Dialogs, StdCtrls;
type
TForml
= class(TForm)
Editl:
TEdit;
Edit2:
TEdit;
Edit3:
TEdit;
Label1:
TLabe1;
Label2:
TLabe1;
Label3:
TLabe1;
Label4:
TLabe1;
Button1:
TButton;
Label5:
TLabel;
procedure
ButtonlClick(Sender: TObject); private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1:
TForm1;
implementation
{$R
*.dfm}
//
решает квадратное уравнение
procedure SqRoot(a,b,c : real; var xl, x2 : real; var ok : boolean);
{
a,b,c — коэффициенты уравнения x1,x2 — корни уравнения
ok = True — решение есть ok = False — решения нет }
var
d
: real; // дискриминант begin
d:=
Sqr(b) - 4*a*c; if d < 0 then
ok := False // уравнение не имеет решения
else
begin
ok
:= True;
xl := (-b + Sqrt(d)) / (2*a); x2 := (b + Sqrt(d)) / (2*a) ;
end;
end;
procedure TForml.ButtonlClick(Sender: TObject);
var
k1,k2:
real; // корни уравнения
rez: boolean; // True —решение есть, False —решения нет mes:
string;
// сообщение begin
SqRoot(StrToFloat(Editl.Text),
StrToFloat(Edit2.Text) ,
StrToFloat(Edit3.Text) , k1,k2,rez);
if
rez then
mes
:= 'Корни уравнения' + #13 +
'x1='+FloatToStrF(kl,ffGeneral,
4,2)+#13+
'x2='+FloatToStrF(k2,ffGeneral,4,2)+#13 else
mes := 'Уравнение не имеет решения'; labels.Caption := mes;
end;
end.