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