Использование процедуры

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

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: