Використання процедури

Розроблену процедуру потрібно помістити в розділ 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.