Инициализацияланатын және аяқталатын бөлік

 

Инициализацияланатын және аяқталатын бөлік көпшілік жағдайда initialization және finalization сөздерімен бірге болмауы мүмкін.Инициализацианалатын бөлікте басқаруды негізгі программада бергенге дейінгі операторлар орналасады, әдетте ол жұмысқа дайындау үшін пайдаланылады.мысалы, ондағы айнымалылар оқылып, қажетті файлдар оқылуы қажет.Аяқталатын бөлікте негізгі программаның жұмысы аяқталғаннан кейін орындалатын операторлар көрсетіледі.Егер инициализацияланатын бөлікте бірнеше модульдер болатын болса, онда бұл бөліктер Uses сөйлеміндегі келтірілген ретпен бірінен соң бірі орындалады..Егер бірнеше модульдің аяқталатын бөлігі болатын болса, онда бұл бөліктер Uses сөйлеміндегі келтірілген ретке кері, яғни алдымен е ішкі орналасқаны – бірінен со бірі орындалады.

 

Модульдегі хабарланған объектілерге кіру мүмкіндігі

Модульдегі хабарланған объектілерге кіру мүмкіндігін мысалдар арқылы қарастырайық.

1-мысал.Комплекс сандар арифметикасын орындайтын модуль құрайық.

Шешуі.Ол үшін Delphi-ді 6-нұсқасында комплекс сандар мен амалдар орындайтын пайдаланушының варианты қарастырылады.комплекс сандар арифметикасы төрт функция арқылы орындалады:

Unit Cmplx;

Interfase

Type

Complex=record

Re, im: real;

End;

Function AddC(x, y: Complex): Complex;

Function SubC(x, y: Complex): Complex;

Function MulC(x, y: Complex): Complex;

Function DivC(x, y: Complex): Complex;

Const C: Complex= (re: 0.1; im:-1);

Implementation

Function AddC(x, y: Complex): Complex;

//Комплекс сандарды қосу

Begin

Result.re:=x.re+y.re;

Result.im:=x.im+y.im;

 

End; //AddC

Function SubC(x, y: Complex): Complex;

//Комплекс сандарды азайту

Begin

Result.re:=x.re-y.re;

Result.im:=x.im-y.im;

End; // SubC

Function MulC(x, y: Complex): Complex;

// Комплекс сандарды көбейту

Begin

Result.re:=x.re*y.re- x.im*y.im;

Result.im:=x.re*y.im-x.im* y.re ;

End; // MulC

Function DivC(x, y: Complex): Complex;

// Комплекс сандарды бөлу

Var z: real;

Begin

Z: =sqr (y.re) +sqr (y.im);

//z=0 болған жағдайдағы программаның қорғалуы

Try Result.re :=( x.re*y.re+x.im-y.im)/z;

Result.im:= (x.re*y.im+x.im-y.re)/z;

Expect Result.re:=1.1e309;

Result.im:=1.1e309;

End//DivC

End.

Мұндай модуль құру үшін File-New-Unit опциясын шақыру қажет.Модуль мәтіні cmplx.pas файлында сақталынады: файл аты модуль атымен сәйкес келуі тиіс.Тек сонда ғана Delphi модульді автоматты түрде тауып, оны жаңартады.

Модуль құрғаннан кейін Uses сөйлемінде жаңадан құрылған қосалқы программалар, типтер, тұрақтыларда пайдалынатын атауды ескерту қажет ( біздің модульде – Complex типі, AddC, SubC, MulC, DivC қосалқы программалары және С тұрақтысы пайдаланылады).Оқу программасының BbRun батырмасын әрбір басқан сайын төрт арифметикалық амал орындалаиын екі кездейсоқ комплекс сан құрылады.Оның bbRunClick оқиға өдеушісі төмендегідей болады:

Implementation

Uses cmplx;

Procedure TForm1.BbRunClick (Sender: object);

Var x, y, z: complex;

 

Procedure output (Operation: Char);

Var S: String;

Begin

Case Operation of

‘+’: z: =AddC(x, y);

‘-‘: z: =SubC(x, y);

‘*’: z: =MulkC(x, y);

‘/‘: z: =DivC(x, y);

End;

S:=’(‘+Format Float(‘+0.0000;-0.0000’,x.re)+‘Format Float(‘+0.0000j;-0.0000j’,x.im)+’)’+Operation+’(‘+FormatFloat(‘+0.0000;-0.0000’,y.re)+ ‘FormatFloat(‘+0.0000j;-0.0000j’,y.im)+’=’+FormatFloat(‘+0.0000;-0.0000’,z.re)+‘FormatFloat(‘+0.0000j;-0.0000j’,x.im) ;

MmOutput.Lines.Add(S);

End; //Output

Begin // BbRunClick

x.re:=random;

x.im:=random;

y.re:=random;

y.im:=random;

Output (‘+’);

Output (‘-’);

Output (‘*’);

Output (‘/’);

MmOutput.Lines.Add(‘ ‘);

End;

Орындалатын бөліктің басындағы Uses cmplx сілтемесі cmplx модулінің объектілерін bbRunClick оқиға өңдеушісі мүмкін жасайды. Delphi ортасында бұл сілтемені File-Use-Unit опциясын таңдап, пайда болған терезеден cmplx модулінің атын белгілеу арқылы қоюға болады.

Тағы бір мысал қарастырайық.

2-мысал.Y(x)=(1- (x^2)/2 ) cos x – (x/2) sin x функциясының мәнін кесте

түрінде шығаратын және оны S (x) = ∑ (-1)ⁿ ((2n^2 + 1)/(2n)!)*x^2n қосынды түріндегі қатарға жіктейтін программа құрайық.Мұндағы Х-тің мәндері Xn-нен Xk-ға дейін h=(Xk-Xn)/10 қадаммен өзгеретін болсын. Y(X)-мәнін есептеу функция түрінде, ал S(X)-тің мәнін есептеу процедура түрінде ұйымдастырылсын.Модульді жоба қосылып, құрылған қосымшада орындалатын болсын.

Шешуі.Алдымен құрылатын қосымшаның интерфейсін жасау үшін формаға: Label1, Label2, Label3, Edit1, Edit2, SpinEdit1, Button1, Memo1, Button2 компоненттерін орналастырайық.Қосымшаның орындалу нәтижесі 7.2-суретте келтірілген.

Есеп шартына сәйкес, У(Х)-тің мәнін есептеуді функция түрінде, ал S(X)-тің мәнін есептеуді процедура түрінде жүзеге асыратын модуль құрайық.Модуль құру үшін бас менюден файл-құру модуль (файл-создать-модуль) командаларын орындаймыз.Нәтижесінде бос Unit2 модулі бар терезе ашылады.Содан кейін жоба файлдары сақталған папкаға модульді “UnFuncProc” деген атпен сақтаймыз.Модульдің мәтіні төмендегідей:

Unit UnFuncProc;

Interface

Var n:integer;

Function F(x:extended):extended;

Procedure Sum(x:extended; Var s:extended);

Implementation

Function F(x:extended):extended;

Begin

F:=(1-x*x*0.5)*cos(x)-0.5*x*sin(x);

End;

Procedure Sum(x:extended; Var s:extended);

Var c:extended; k:integer;

Begin

C:=-x*x*0.5;

S:=1;

For k:=1 to n do

Begin s:=s+c*(2*k*k+1); c:=-c*x*x/((2*k+2));

End; end; end.

“UnFuncProc” модулін жобаға қосу үшін Файл – модульді пайдалану командаларын орындаймыз.Нәтижесінде модулбді пайдалану сұхбат терезесі ашылады.Бұл терезеде модульдер тізімі орналасады.Біздің жағдайда бір ғана “UnFuncProc” модулі бар, Ок батырмасын басамыз.Одан кейін негізгі Unit1 модуліндегі Implementation бөлімінде Uses UnFuncProc операторының орналасқанына көз жеткізуіміз қажет (мұны Delphi өзі автоматты түрде қояды).

Жобаны негізгі файлының мәтіні төмендегідей:

Unit ;Interface

Uses

Windows, messages, sysUtils, variants, classes, graphics,

Controls, forms, Dialogs, spin;

Type

TForm1 = class(TForm)

Label1:TLabel;

Label2:TLabel;

Label3:TLabel;

Edit1:TEdit;

Edit2:TEdit;

 

 

SpinEdit1:TspinEdit;

Button1: T Button;

Memo1:TMemo;

Button2 :TButton;

Procedure FormCreate(Sender:TObject);

Procedure Button1.Click(Sender:TObject);

Procedure Button2.Click (Sender:TObject);

Private {Private declarations}

Public {Public declarations}

End;

Type

Func= Function F(x:extended):extended;

Proc=Procedure Sum(x:extended; Var s:extended);

Var Form:TForm1;

Implementation

Uses UnFuncProc; {$R*.dfm}

Procedure TForm1.FormCreate(Sender:TObject);

Begin

Spinedit1.text:=’4’;

Edit1.text:=’5’;

Edit2.text:=’6’;

Memo1.clear;

Memo1.lines.Add(‘модуль құру’);

End;

Procedure Tabl(Sum:proc;F:func;n:integer;Xn,Xk,h:extended);

Var x,y,s:extended;

Begin

Form1.Memo.Lines.Add(#9+’x’+#9+’s’+#9+’y’);

X:=Xn;

Repeat

Sum(x,s);

Y:=F(x);

Form1.Memo.Lines.Add(#9+FloatToStrF(x,ffFixed,5,2)+#9+FloatToStrF

(s,ffFixed,6,3)+#9+ FloatToStrF(y,ffFixed,6,3));

X:=x+h;

Unil x>Xk;

End;

Procedure Button1.Click(Sender:TObject);

Var Xn, Xk, h:extended;

 

Begin

N:=StrToInt(SpinEdit1.text);

Xn:=StrToFloat(Edit1.text);

Xk:=StrToFloat(Edit2.text);

H:=(Xk-Xn*0.5);

Tabl(Sum,F,n,Xn,Xk,h);

End;

Procedure Button2.Click (Sender:TObject);

Begin

Close;

End; end.

 

Бақылау сұрақтары :

1. Модульдер дегеніміз не?

2. Модульдердің құрылымы қандай?

3. Модуль тақырыбы қандай қызметші сөзден басталады?

4. Интерфейстік бөліктің қызметі қандай?

5. Орындалатын бөліктің қызметі қандай?

6. Инициализацияланатын және аяқталатын бөліктің қызметі қандай

 

Ұсынылатын әдебиеттер: 1 нег [956-958], 9 қос [11-30]