AMALIY MASHG’ULOT. MODULLAR VA ULARDAN
FOYDALANISH.
Delphida juda ko’p
maxsus tayyor prosedura va funksiyalar mavjudki ular har qaysi o’z vazifasiga
ega bo’lib unga biblioteka modullari deyiladi. Har bir biblioteka
funksiya va proseduralardan tashkil topgan bo’lib ma’lum bir turdagi masalani
yechishga muljallangan.
Modul deb
prosedura va funksiyaning alohida kompilyasiya qilinib maxsus .tpu kengaytmali
fayl shaklidagi ifodalangan dastursiga aytiladi. Moduldan ixtiyoriy dastur
ichida foydalanish mumkin. Moduldan foydalanish ya’ni uni aktivlashtirish uchun
dasturning bosh qismida quyidagilarni keltirish zarur.
Uses <Modul1 nomi, modul2 nomi, . . .
,moduln nomi>;
Misol:
Program SS;
Uses Crt,Graph;
Turbo-Paskal
sistemasida har bir foydalanuvchi o’z modulini yaratishi uchun yaratiladigan
modul strukturasini quyidagicha tashkil kilish zarur.
Uses <modul nomi>;
Interface
. . . . .
{Interfeys qism- ochiq (yozuvlar) qismi}
. . . . .
Implementation
. . . . .
{Yopiq (yozuvlar) qismi}
. . . . .
Begin
. . . . .
{Modulning asosiy qismi}
. . . . .
End.
Bu yerda
Unit - modulning sarlavhasi;
Interface - modulning interfeysi, ya’ni
dastur va boshqa modullar uchun ochiq (ko’rinarli) qismining boshlanishini
bildiradi. Bu qismda o’zgarmaslar, kattaliklar tiplari, prosedura va
funksiyalar aniklanib kursatilgan bo’ladi, lekin ularning butun ko’rinishi
keyingi yopiq qismda beriladi.
Implementation - modulning dastur va
modullar uchun yopiq, ya’ni ko’rinmaydigan qismining boshlani-shini bildiradi.
Bu yerda interfeys qismda aniqlangan prosedura va funksiyalar yana bir marta
ko’rsatilishi shart (ularning sarlavhalari bir xil bo’lishi kerak).
Inisializasiya
qismi Begin yozuvidan keyin boshlanadi, agar bu qism mavjud bo’lmasa Begin ham
bo’lmaydi. Bu qismda boshqaruvni asosiy programaga o’tkizishgacha qadar
bajarilishi kerak bulgan operatorlar ruyxati joylashadi.
MISOL: Ikki sonning eng katta va eng kichigini topish modulini yaratish
dastursini qaraymiz. Quyidagi dastur Min(x,y) va Max(x,y) funksyalarini o’z ichiga olgan.
Unit Study; Interface {Interfeys kism} Function Min(x,y:Integer):Integer; Function Max(x,y:Integer):Integer; Implementation {Yopik kism} Function Min(x,y:Integer):Integer; Begin If x<=y Then Min:=x Else
Min:=y; End; Function Max(x,y:Integer):Integer; Begin If x>=y Then Max:=x Else
Max:=y; End; {Inisializasiya qismi mavjud emas} End. |
Bu modul
kompilyasiya qilinib Stadu.tpu fayl nomga ega bo’lishi kerak. Undan dasturda
foydalanish uchun dastur bosh kismida Uses Study qatorini yozish kerak bo’ladi.
Turbo Paskal
sistemasida quyidagi biblioteka modullari majud:
System - standart
prosedura va funksiyalarni o’z ichiga olgan bo’lib, bu modul avtomatik ravishda
aktivlashtirilgan bo’ladi.
Dos - Ms Dos
operasion sistema imkoniyatlaridan foydalanuvchi prosedura va funksiyalarni o’z
ichiga olgan.
Crt - monitor
ekrani va klaviatura bilan ishlash imkoniyatini yaratuvchi proseduralar
to’plamini o’z ichiga olgan.
Graph - har xil
monitor videoadapterlarini qullagan holda kompyuter grafik imkoniyatlaridan
foydalanuvchi ko’plab proseduralar tuplamini o’z ichiga oladi.
Printer - printer
bilan ishlovchi kichik modul.
2)
Dinamik bog’lanuvchi bibliotekalar (DLL)
Dinamik
boglanuvchi bibliotekalar dasturda boshka tillarda yaratilgan prosedura va
funksiyalardan foydalanishga imkon beradi. Dinamik bibliotekalar bilan oddiy
modullar orasida juda ko’p o’xshashliklar mavjud ,lekin ikki jixatdan farq qiladi.
Birinchidan
dinamik bibliotekada e’lon qilingan o’zgaruvchilar va konstantalardan asosiy dasturda foydalanib bo’lmaydi.
Ikkinchidan
modullar statik usulda, ya’ni kompilyasiyaning komponovka bosqichida bog’lanadi. Dinamik
bibliotekalar dinamik ya’ni dastur bajarilish jarayonida bog’lanadi. Agarda
ikki dastur oddiy modulga murojaat qilsa shu modul ishlatilayotgan qismining
ikki nusxasi
xotirada yaratiladi. Dinamik bibliotekaning ikki dastur murojaat qilaetgan qismi faqat bir nusxada
yaratiladi.
Dinamik
bibliotekaning o’zgarishi dasturni qaytadan kompilyasiya kilishga olib kelmaydi.
DLL yaratish uchun
maxsus Library suzi ishlatiladi.
DLL e’lonlar
bulimi Exports suzidan boshlanib, eksport kilinaetgan podprogrammalar
ro’yxatini o’z ichiga oladi:
Library MyLibrary;
Function MyFunc (...):...;
begin
end;
Procedure MyProc;
begin
end;
Exports
MyFunc, MyProc;
begin
end.
Podprogramma
nomidan tashqari DLL ga uning tartib
nomeri joylashtiriladi: birinchi podprogramma
nomeri 0, keyingisi - 1 va xokazo. Dasturchi bu indeksasiyani o’zgartirishi va 0 dan 32767 gacha nomer
qo’yishi mumkin:
Expots
MyFunc index 1,
MyProc index 2;
Dasturchi eksport qilinayotgan
podprogramma uchun tashqi nom berishi mumkin:
Exports
MyFunc index I
name 'NEWFUNC';
Chaqirayotgan dastur
eksport qilinayotgan podprogramma tashqi nomi yoki indeksi bo’yicha chaqirishi mumkin.
Misol tariqasida cmplx
modulini kuramiz.
Library Cmplx;
uses
SysUtils, Classes;
{$R *.RES}
type
TComplex = record
Re, Im: Real;
end;
function AddC(x, y: TComplex): TComplex; stdcall;
begin
Result.Im := x.Im
+ y.Im;
Result.Re := x.Re
+ y.Re end;
function SubC(x, y: TComplex): TComplex;
stdcall;
begin
Result.Im := x.Im
- y.Im;
Result.Re := x.Re
- y.Re
end;
function MulC(x, u: TComplex): TComplex;
stdcall;
begin
Result.Re := x.Re
* y.Re + x.Im * y.Im;
Result.Im := x.Re
* y.Im - x.Im * y.Re
end;
function DivC(x, y: TComplex): TComplex;
stdcall;
var
z: Real;
begin
z := sqr(y.Re) +
sqr(y.Im);
try
Result.Re := (x.Re
* y.Re + x.Im * y.Im)/z;
Result.Im := (x.Re
* y.Im - x.Im * y.Re)/z
except
Result.Re :=
le+309;
Result.Im :=
le+309
end
end;
Exports
AddC index 1 name
'ADDC' resident,
SubC index 2,
MulC index 3,
DivC index 4;
begin
end.
Bu yerda stdcall
bu DLL ga Delphi dan boshqa tillardan murojaat qilishga imkon beradi. Agar bibliotekaga fakat Delphi tilidagi dasturdan
murojaat qilinsa bu so’zning keragi yo’q.
Podprogrammalarga
murojaat qilish uchun ularni kuyidagicha e’lon qilish lozim:
Procedure MyProc; External 'MyDLL';
Agar indeks
bo’yicha chaqirish lozim bulsa:
Procedure MyProc; External 'MyDLL' index 2;
Bundan tashqari dasturchi tashqi nomni
o’zgartirishi xam mumkin:
Procedure MyProc; External 'MyDLL' Name 'ExtName';
Dasturda Smpix
bibliotekasi quyidagicha e’lon qilinishi lozim.
type
TComplex = record
Re, Im: Real;
end;
function ADDC(x, y: TComplex): TComplex; stdcall; External 'Cmplx' ;
function SubC(x, y: TComplex): TComplex; stdcall; External 'Cmplx' ;
function MulC(x, y: TComplex): TComplex; stdcall; External 'Cmplx' ;
function DivC(x, y: TComplex): TComplex; stdcall; External 'Cmplx';
DLL-podprogrammalarni
chaqirishda
yozuv kabi murakkab turdagi ma’lumotlarni uzatishga to’g’ri kelishi mumkin.
Agar biror DLL ga kup murojaat qilinsa murakkab
tur e’lon kilingan interfeysli moduldan foydalanish
qulaydir.
Masalan:
Unit Complx;
Interface
type
TComplex = record
Re, Im: Real;
end;
function AddC(x, y: TComplex): TComplex; stdcall;
External 'Cmplx' index 1;
function SubC(x, y: TComplex): TComplex; stdcall;
External 'Cmplx' index 2;
function MulC(x, y: TComplex): TComplex; stdcall;
External 'Cmplx' index 3;
function DivC(x, y: TComplex): TComplex; stdcall;
External 'Cmplx' index 4;
Implementation end.
Boshqa tilda yozilgan DLL proseduralariga murojaat
qilinganda ularning tashqi nomi Delphi qoidasiga to’g’ri kelmasligi mumkin. Masalan C++ tili identifikatorlarda “@” simvolidan foydalanishga ruxsat
beradi. Bu xolda Delphi qoidasiga mos nom berib name suzidan sung asl nomini ko’rsatish kerak.
Masalan:
function MyFunction: WordBool; stdcall;
external 'MyDLL' name '_MyFunction@12'
Delphi dasturlash muhitida modul yaratish uchun fileàNewàUnit buyrug’i yordamida
modul yaratish uchun oyna oching, uning ko’rinishiga e’tibor bering. unit Unit1; interface implementation end. Nazariy materiallarga tayangan holda u=sin(ax)+cos(bx) funksiya qiymatini
hisoblashda qo’llanuvchi sincos moduli yarating. unit sincos; interface function
sc(a,b,x:real):real; implementation function sc(a,b,x:real):real; begin sc:=sin(a*x)+cos(a*x); end; end. Modulga nom
berishda file menyusidagi Save buyrug’idan foydalaning. Bu moduldan foydalanishga yangi forma yaratib,
quyidagi prosedurani joylashtiring va natijani kuzating. procedure TForm1.Button1Click(Sender:
TObject); var a1,b1,x1,y:real; begin a1:=random(56);b1:=random(67);x1:=random(90);
y:=sc(a1,b1,x1); label1.Caption:=floattostr(y); end; end. |
Mustahkamlash maqsadida ikkita berilgan sondan
kattasini aniqlovchi funksiyani qamrab oluvchi modul keltirilgan, foydalanib
xulosa chiqaring. unit max2; interface function
ff(a1,b1:real):real; implementation function
ff(a1,b1:real):real; begin if
a1>b1 then ff:=a1 else ff:=b1; end; end. Јuyida keltirilgan
proosedurada va FF –funksiyadan foydalanib, natijasini kuzating. procedure TForm1.Button1Click(Sender: TObject); var a1,a2:real; begin a1:=random(2000);a2:=random(3000); label1.Caption:=floattostr(a1);label2.Caption:=floattostr(a2); label3.Caption:=floattostr(ff(a1,a2));end;end. |
Masala. 20-elementli massivning elementlari 0..2000 oralig’ida tasodufiy xolda
yaratilan natural sonlardan iborat. Massivning maksimal qiymatini FF-funksiya
yordamida aniqlang. procedure TForm1.Button1Click(Sender: TObject); var max:real; i:byte; a: array [1..20]of real; begin label1.caption:=''; randomize; for i:=1 to 20 do begin a[i]:=random(2000); label1.Caption:=label1.caption+'massivning '+inttostr(i)+'
-chi elementi '+floattostr(a[i])+#13; end; max:=a[1]; for i:=1
to 20 do begin
max:=ff(max,a[i]); end; label3.Caption:=floattostr(max); end;end. Quyida keltirilgan modul va funksiyalarni qanday
maqsadda tuzilganligini aniqlang. unit darfact; interface function
dar(x:real;n:byte):real; function fact(n:byte):longint; implementation function dar(x:real;n:byte):real; var i:byte; p:real; begin dar:=1; for i:=1 to n do p:= p*x;
dar:=p; end; function fact(n:byte):longint; var i:byte; p:longint; begin fact:=1; for i:=1 to n do p:=p*i; fact:=p;
end; end. |
Mustaqil ish
topshiriqlari:
1.
3 ta sondan kattasini topuvchi modul yarating.
2.
Ctg(x) funksiyasini hisoblovchi modul yarating.
3.
Uchburchak yuzasini hisoblovchi modul yarating.
4.
a,b,c xaqiqiy sonlar berilgan.
f(t,-2s,1.17)+f(2.2t,t,s-1) ni hisoblang, bu erda f(a,b,c)=
5.
s,t xaqiqiy sonlar berilgan.
g(1.2,-s)+g(t,s)-g(2s-1,st) ni hisoblang,bu erda g(a,b)=
6.
u -xaqiqiy son berilgan. qiymatini hisoblang,
bu erda f(x)=
7.
a,b,c xaqiqiy sonlar berilgan, bo’lsa hisoblang,
8.
x,y,z berilgan. Hisoblang: max(x+y+z,
xyz)+3
9.
x,y,z berilgan.
Hisoblang:
min()-4.
10. butun sonlar berilgan.
qiymatini hisoblang, bu erda u,v,w-rasional sonlar bo’lib, , , ga teng.
11. Kal’kulyator
dasturini tuzing.Unda “+”,”-”,”*”,”/” amallarini aloxida proseduralarda
ifodalang.
12. 9.Radian
qiymatli burchakni gradus qiymatga o’tkazuvchi prosedura tuzing va undan
dasturda foydalaning.
13. Hisoblang:
Комментарии
Отправить комментарий