Использование процедуры
Разработанную процедуру нужно поместить в раздел 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.
Решение квадратного уравнения (использование процедуры)
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.