Инициализацияланатын және аяқталатын бөлік
Инициализацияланатын және аяқталатын бөлік көпшілік жағдайда 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]