Использование процедуры. Повторное использование функций и процедур.
Листинг 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.
Повторное использование функций и процедур
Разработав некоторую функцию, программист может использовать ее в другой программе, поместив текст этой функции в раздел implementation. Однако этот способ неудобен, т. к. приходится набирать текст функции заново или копировать его из текста другой программы.