Mirsaid Aripov, Nurillo Otaxanov



Download 9,81 Mb.
bet140/209
Sana16.01.2022
Hajmi9,81 Mb.
#371485
1   ...   136   137   138   139   140   141   142   143   ...   209
Bog'liq
DELPHI dasturlash titli 2018

Qiymati

Animatsiyasi


Ma`nosi







aviCopyFiles



Fayllardan nusxa olish







AviDeleteFile



Fayllarni o`chirish







AviRecycleFile



Fayllarni korzinaga jo`natish



13.2. MediaPlayer komponentasi


MediaPlayer komponentasi System panelida joylashgan bo’lib, videorlik, ovoz va ovozli animatsiyalar ko`rish uchun mo`ljallangan.

MediaPlayer komponetasi qo`yilgan formada tugmalar gruppasi paydo bo`ladi. (12.5-rasm.) Bu tugmalarning vazifalari 12.4-jadvalda, MediaPlayer komponentasi hususiyatlari esa 12.5-jadvalda berilgan.



12.5-rasm. MediaPlayer komponentasi

MediaPlayer komponentasining tugmalari 12.4-jadval.



Tugma

Ma’nosi

nomi

Vazifasi



Boshlash

btPlay

Animatsiyani qo`yishni boshlash



Pauza

btPause

Ko`rsatishda pauza qilish



Stop

btStop

Ko`rsatishni to`xtatish



Navbatdagisi

btNext

Navbatdagi kadrga o`tish



Avvalgisi

btPrev

Avvalgi kadrga o`tish



Qadam

btStep

Navbatdagi parchaga o`tish



Orqaga

btBack

Avvalgi ovozli parchaga o`tish



Yozish

btRecord

Yozish



Ochish Yopish

btEject

Disk yuritgishni ochish (yopish)

MediaPlayer komponentasning hususiyatlari 12.5-jadval.

Hususiyati

Vazifasi

DeviceType

Qurilma nomi. DtAutoselect – qurilma nomini to’g’ridan-to’g’ri aniqlash; dtCDAudio - CD-proigrivatel; dtAVIVideo — videoproigrivatel.

FileName

Faylning nomi. Qo`yib eshitilmoqchi bo`lgan ovozli fragment yoki videorolik yozilgan fayl.

AutoOpen

Ovoz yoki videorolik yozilgan faylni dastur ishga tushganda avtomatik ochish belgisi.

Display

Sirtida videorolik qo`rsatiladigan komponenta nomi (odatda Panel dan foydalaniladi).

VisibleButtons

Komponentaning ko`rinadigan tugmalarini belgilaydi. Ayrim tugmalarni ko`rinmaydigan qilish mumkin.

Ovozlarni eshitish. Ovozli fragmentlar odatda kengaytmasi WAV bo`lgan fayllarda saqlanadi. Masalan, C:WinntMedia katalogida Windows ning standart ovozli fayllari saqlanadi.

12.2-listingdagi dastur (12.6-rasm) MediaPlayer komponentasidan ovozli (wav) fayllarni eshitish uchun foydalanish usulini namoyish qiladi.

Formada MediaPlayer dan tashqari ListBox va ikkita Label (biri – axborotlarni chiqarish uchun, ikkinchisi - foydalanuvchi tanlagan ovozli fayl nomi) komponentalari joylashtirilgan. Unga ko`ra, ekranda dialog oynasi ochilganidan keyin "Zvuk Microsoft" fragmenti eshitiladi. So`ngra foydalanuvchi taklif qilingan ro`yxatdan C:WindowsMedia papkasidagi ovozli fayllardan birini tanlaydi va eshitish tugmasi chertib, bu faylda qanday ovoz yozilganligini eshitib ko`rish mumkin.

MediaPlayer1 komponentasi hususiyatlari 12.6-jadvalda keltirilgan, qolgan qiymatlari o`zgarmaydi.

MediaPlayer1 komponentasining hususiyatlari 12.6-jadval.



Komponenta

Qiymati

DeviceType

DtAutoSelect

FileName

C:WindowsMediaZvuk Microsoft-zaпуск.wav

AutoOpen

True

VisibleButtons . btNext

False

VisibleButtons .btPrev

False

VisibleButtons . btStep

False

VisibleButtons . btBack

False

VisibleButtons . btRecord

False

VisibleButtons .btEject

False

12.6-rasm. Microsoft Windows ovozlari dasturining dialog oynasi



12.3-listing. Microsoft Windows ovozlarini tinglash

const

SOUNDPATCH  'c:windowsmedia ';  ovozli fayllar papkasi

ModeStr: array[TMPModes] of string  ('Not ready', 'Stopped', 'Playing', 'Recording', 'Seeking', 'Paused', 'Open');

var

Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormActivate(Sender: TObject);

var SearchRec: TSearchRec;

 qidirish shartini qanoatlantiruvchi struktura



begin

Form1.MediaPlayer1.Play;

 c:  windows  media katalogidagi WAV-fayllar ro`yxati



if FindFirst(SOUNDPATCH'*.wav', faAnyFile, SearchRec)0 then

begin  katalogda WAV kengaytmali fayl mavjud

 Bu faylning nomini ro`yxatga qo`shamiz



Form1.ListBox1.Items.Add(SearchRec.Name);

 xozircha papkada WAV kengaytmali boshqa fayllar bor



while (FindNext(SearchRec)  0) do

Form1.ListBox1.Items.Add(SearchRec.Name);

end;

end;

 ro`yxatdagi element chertilsa



procedure TForm1.ListBox1Click(Sender: TObject);

begin

 Label2 maydonida tanlangan fayl nomini qo`rsatish



Label2.Caption : ListBox1.Items[ListBox1.itemIndex];

end;

 MediaPlayer komponentasi tugmasi chertilsa



procedure TForm1.MediaPlayer1Click(Sender: TObject; Button: TMPBtnType;

var DoDefault: Boolean);

begin

if (Button  btPlay) and (Label2.Caption <> '') then

begin  Play tugmasi bosilganda

with MediaPlayer1 do

begin

FileName: SOUNDPATCH  Label2.Caption;  tanlangan fayl

Open;

MediaPlayer1.Wait : True;

 Play;

end;

end;

end;

procedure TForm1.MediaPlayer1Notify(Sender: TObject);

begin

with Sender as TMediaPlayer do

begin

Form1.Caption : ModeStr[Mode];

Notify : True;

end; end;

end.

Dasturda ishlaganda onFormActivate protsedurasi MediaPlayer1 komponentasiga nisbatan Play metodini qo`llaydi. Shu protseduraning o`zi katalogidagi WAV-fayllar ro`yxatini aniqlaydi. Ro`yxatni hosil qilishda FindFirst va FindNext funksiyalaridan foydalaniladi. Xar ikki funksiyaga parametr sifatida WAV-fayl niqobi (qidirish sharti) hamda Name maydoni qidirish shartini qanoatlantiruvchi fayl nomiga teng bo`ladigan SearchRec struktura-o`zgaruvchisi beriladi.



Ro`yxat elementlaridan birini chertish xodisasiga ListBox1Click protsedurasi javob beradi. U Label2 maydonida foydalanuvchi tanlagan fayl nomini chiqaradi (dastur ishlayotgan vaqtda ItemIndex hususiyatining qiymati ro`yxatdan tanlangan elementning tartib nomeriga teng bo`ladi. ).

MediaPlayer1 tugmalaridan birini chertish MediaPlayer1Slick protsedurasini faollashtiradi. U qaysi tugma chertilganini aniqlaydi. Agar eshitish (btPlay) tugmasi chertilsa, MediaPlayer1 komponentasining FileName hususiyatiga tanlangan fayl nomi yoziladi, Open metodi uni yuklaydi va eshitish jarayonini faollashtiradi.

13.3. Videorolik va animatsiyalarni ko`rish

MediaPlayer komponentasi ovozli fayllarni eshitishdan tashqari, AVI-fayl shaklidagi videorolik va mul’tiplikatsion fil’mlarni tomosha qilishga imkon beradi. AVI - bu Audio Video Interleave so`zidan olingan bo`lib, "ovoz va videoning ketma-ket" qabilida tarjima qilinishi mumkin.

AVI-fayllarni ko`rish uchun MediaPlayer komponentasidan foydalanish jarayonini 12.4-listingdagi dastur yordamida izohlaymiz. Ushbu dastur oynasidagi buyruqli tugma chertilsa, forma sirtida ovozli effektga ega bo`lgan mul’tiplikatsiya - soat strelkasi bo`yicha aylanayotgan Delphi so`zi paydo bo`ladi (bu mul’tiplikatsiya delphi.avi faylidan saqlanadi.). Uning dialog oynasi 12.12-rasmda, MediaPlayer1 komponentasi hususiyatlari esa 12.8-jadvalda berilgan.





12.12-rasm. MediaPlayer dan foydalanish dasturining dialog oynasi

MediaPlayer1 komponentasining hususiyatlari 12.8-jadval.

Hususiyati

Qiymati

Name

MediaPlayer1

FileName

delphi.avi

DeviceType

dtAVIVideo

AutoOpen

True

Display

Panel1

Visible

False

Ilova formasini ishlab chiqishda Panel1 komponentasi ekran sifatida foydalaniladi. Uning nomi MediaPlayer1 ning Display hususiyatiga beriladi. Shuning uchun formaga dastlab Panel, so`ngra MediaPlayer komponentalarini joylashtirish lozim.

Shuni esda tutish keraki, animatsiyalarni panelga chiqarish sohasi o`lchamlari panelning Width va Height hususiyatlari bilan emas, balki MediaPlayer komponentasi hususiyati bilan belgilanadi. DisplayRect hususiyatining qiymati dastur ishlab turgan paytda

MediaPlayer1.DisplayReet : Rect(0, 0, 60, 60)

buyrug’i bilan o`rnatiladi.



Eslatma: AVI-faylidagi kadr o`lchamlari haqidagi axborotlarni olish uchun, bu fayl saqlanayotgan papkani ochiladi va faylning kontekst menyusidan Свойства buyrug’i tanlanadi va ochilgan oynadan Сводка tugmasi chertiladi.

12.4-listing. Ovozli animatsiyani qo`yib ko`rish

procedure TForm1.Button1Click(Sender: TObject);

begin

Form1.MediaPlayer1.Play;  animatsiyani qo`yish

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

 forma sirtida animatsiya uchun soha o`lchami aniqlanadi



MediaPlayer1.DisplayRect : Rect(0, 0, 60, 60);

end;

end.

Animatsiyalarni ko`rish jarayoni Play metodi yordamida faollashtiriladi.



14-BOB. REKURSIYA

14.1. Rekursiya tushunchasi

Rekursiyani quyidagicha izohlash mumkin. yechilmagan masalani yechish uchun shu masalaning o`zidan foydalaniladi. Boshqacha aytganda, qo`yilgan masalani bir hil boshlang’ich ma`lumotlar uchun yechish maqsadida shu masalaning o`ziga, faqat boshqa boshlang’ich ma`lumotlar uchun murojaat qilinadi. Agar keyingi masalaning yechimi topilsa, dastlabki masala ham yechimini topish mumkin bo`ladi.



Agar dastur o`zini-o`zi protsedura yoki funksiya sifatida foydalanadigan bo`lsa, bunday dasturlarni rekursiv dastur deyiladi. Rekursiv dasturlar ikki turga bo`linadi:

a) To`g’ri rekursiya. Bunda masala o`ziga-o`zi murojaat qiladi.

b) YOndosh rekursiya. Bunda 1-masala 2- masalaga, 2-masala esa 1-masalaga murojaat qiladi.

Rekursiv dastur yozish uchun quyidagi ikki holat aniqlangan bo`lish kerak.

1) rekkurent munosabat;

2) shu munosabat uchun boshlang’ich holat aniqlangan bo`linshi shart.

Rekkurent munosabat deganda biror jarayonning N va N-1 qadamlarini bog’lovchi munosabat tushuniladi. Masalan, N! N(N-1)! formulani N! uchun rekkurent munosabat deb qarash mumkin. Bu munosabat uchun boshlang’ich holat bo`lib, 1! 1 xizmat qiladi. Bu ma`lumotlarni hisobga olsak, faktorialni hisoblash masalasi uchun rekkurent munosabatlar quyidagicha bo`ladi:



Ko`rinib turibdiki, N! ni hisoblash uchun avval (N-1)! ni topish kerak. Lekin, (N-1)! ning ham qiymati noma`lum. Ammo, ma`lumki, (N-l)! (N-2)!∙(N-1) va h.k. SHunday qilib, N!N(N-1)(N-2)...21 . Ko`rinib turibdiki, N! ni hisoblash algoritmi o`z ichiga o`zi "cho`kib" bormoqda. Bu jarayon to boshlang’ich holat sodir bo`lgunga, qadar, ya`ni 1! gacha davom etadi. Shundan keyin, "cho`kish" jarayoni to`xtaydi, 1! 1 ekanligi haqida ko`rsatma olib, yuqoriga "suzib" chiqish jarayoni boshlanadi:



va hokazo. Bu holat to N! hisoblanmaguncha davom etaveradi.

Dastur ishlab chiqish quyidagi g’oyaga asoslanadi: N! ni hisoblash uchun funksiya yaratib, bu funksiya qiymatini hisoblash uchun shu funksiyaning o`ziga, faqat N-1 bo`lgan hol uchun murojaat qilinadi, ya`ni funksiya o`zini o`zi yordamchi funksiya sifatida foydalanadi. 13.1-listingda shu masala uchun yozilgan rekursiv dasturi keltirilgan.



13.1-listing. Rekursiv funksiya

function factorial(n: integer): integer;

begin

if n <> 1

then factorial: n * factorial(n-1)

 funksiya o`zini o`zi chaqiryapti



else factorial : 1;  boshlang’ich holatga kelindi

end;
N 4 bo`lgan hol uchun rekursiv "cho`kish" va "suzib chiqish" jarayoni quyidagi jadvalda berilgan:

N ning qiymatlari

4

4 3 2 1

yakuniy rekursiyadan chiqishdagi oraliq qiymatlar

N 1 sharti

yo`q yo`q yo`q ha







fak(3)*4

fak(2)*3

fak(1)*2


1

f ac(4) fac *4 24

fac(3) fac *3 6

fac(2) fac *2 2

fac(1) 1

Demak, EHM N 4 bo`lgan hol uchun 24 natijani beradi.

Yuqoridagi dasturda funksiya o`ziga o`zi parametrining qiymati 1 ga teng bo`lmagan hollarda murojaat qilayapti. Agar bu parametr 1 ga teng bo`lsa, funksiya o`z qiymatini hisoblaydi, shu bilan "cho`kish" jarayoni tugab, "suzib chiqish" jarayoni boshlanadi. Faktorialni rekursiv hisoblash dasturining dialog oynasi 13.1-rasmda, dasturining to`la matni esa 13.2-listingda keltirilmoqda.





13.1-rasm. Faktorialni hisoblash dasturining oynasi

13.2-listing. Rekursiv funksiyadan foydalanish.

 rekursiv funksiya



function factorial(n: integer): integer;

begin

if n > 1 then

factorial : n*factorial(n-1)  funksiya o`zini-o`zi chaqiradi

else factorial : 1;  1! = 1

end;

procedure TForm1.Button1Click(Sender: TObject);

var

k:integer;  faktoriali hisoblanayotgan son

f:integer;  k faktorialning qiymati

begin

k : StrToInt(Edit1.Text);

f : factorial(k);

label2.caption : Edit1.Text  ' sonining faktoriali ' 

IntToStr(f)' ga teng ';

end;

end.

13.2-rasmda dasturning turli boshlang’ich ma`lumotlar uchun ikkita dialog oynasi keltirilgan. 12.2a-rasmda faktorialni hisoblash dasturi natijasi kutilgan songa mos keladi. 13.2b-rasmda berilgan natija esa bunday emas. Katta sonlar (masalan, 45) faktorialini hisoblashda bajarish vaqtida hatolik yuzaga kelib qoldi. Buning sababi shuki, 44! soni juda katta son va Integer tipidagi sonlar diapazonidan chetga chiqib ketadi.

Delphi tili dasturda o`zgaruvchilar qiymatlarini belgilangan diapazondan chetga chiqib ketishini nazorat qilishi mumkin. Buning uchun Project Options (13.3-rasm) dialog oynasining Compiler tugmasi chertish, ekranda ochilgan oynadan Runtime errors (bajarish vaqtidagi

13.2a-rasm. N12 bo`lgan hol uchun dasturning dialog oynasi



13.2a-rasm. N45 bo`lgan hol uchun dasturning dialog oynasi

hatoliklar) guruhidagi Overflow checking (to`lib ketishni nazorat qilish) bayroqchasini o`rnatish lozim.

14.2. Fayllarni qidirish

Rekursiyadan foydalanishga yana bir misol sifatida berilgan faylning mavjud yoki mavjud emasligini tekshirish masalasini ko`ramiz.

Aytaylik, foydalanuvchi ko`rsatgan papka va uning ichki papkalarida joylashgan barcha .bmp kengaytmali fayllar ro`yxatini aniqlash talab qilingan bo`lsin. Bu masala algoritmini quyidagicha ifodalash mumkin:

1. Qidirish shartini qanoatlantiruvchi barcha fayllar ro`yxatini chiqarilsin.

2. Agar papkaning ichki papkalari mavjud bo`lsa, ko`rsatilgan fayl ulardan ham qidirilsin.

Bu algoritm (blok-sxemasi 13.4-rasmda keltirilgan) rekursiv hisoblanadi. Belgilangan faylni ostkataloglardan ham qidirish lozim. Buning uchun qidirish protsedurasi o`ziga murojaat qiladi. Dasturning dialog oynasi 13.5-rasmda, matni esa 13.3-listingda berilgan.



Fayl (Edit1) maydoni qidirilayotgan faylning nomi yoki niqobi (bir hil tipdagi fayllar) uchun foydalaniladi. Qarash lozim bo`lgan papka nomini bevosita Папка maydonida ko`rsatish yoki standart Обзор папок dialog oynasidan tanlanishi mumkin. (13.6-rasm.) Bu oyna ekranga argumenti WhideChar ko`rinishidagi satr bo`lgan Selectdirectory funksiyasi yordamida chaqiriladi. Oddiy satrni StringToWhideChar funksiyasi yordamida WhideChar tipiga aylantirish mumkin.

Обзор папок dialog oynasi Папка tugmasi chertilganda ochiladi.



13.3-rasm. Project Options dialog oynasi Compiler buyrug’ining oynasi





13.4-rasm. Fayllarni qidirish ning rekursiv algoritmi

13.5-rasm. Dasturning dialog oynasi

Ushbu dasturda asosiy masalani Find rekursiv funksiyasi hal qiladi. Bu funksiya yagona parametr - searchRec strukturasiga ega bo`lib, undan FindFirst va FindNext funksiyalari mos ravishda qidirish shartini mos keluvchi birinchi va navbatdagi fayllarni topish uchun foydalanadi.

13.3-listing. Fayllarni qidirish dasturi.

var

FileName: string; // qidiriladigan faylning nomi yoki niqobi

cDir: string;

n: integer; // qidirish shartini qanoatlantuvchi fayllar

// joriy katalogda faylni qidirish

procedure Find;

var

SearchRec: TSearchRec; //fayl yoki katalog haqida ma`lumot

begin

GetDir(0,cDir); // joriy katalog nomini olish

if cDir[length(cDir)] <> '\' then cDir := cDir+'\';

if FindFirst(FileName, faArchive,SearchRec) = 0 then

repeat

if (SearchRec.Attr and faAnyFile) = SearchRec.Attr then

begin

Form1.Memo1.Lines.Add(cDir + SearchRec.Name);

n := n + 1;

end;

until FindNext(SearchRec) <> 0;

// joriy katalogning ostkataloglarini qayta ishlash

if FindFirst('*', faDirectory, SearchRec) = 0 then

repeat

if (SearchRec.Attr and faDirectory) = SearchRec.Attr then

begin

// .. va . ham papka , ularga kirish kerak emas

if SearchRec.Name[1] <> '.' then

begin

ChDir(SearchRec.Name);// papkaga kirish

Find; // ostkatalogdan qidirish

ChDir('..');// papkadan chiqish

end;

end;

until FindNext(SearchRec) <> 0;

end;

// foydalanuvchi tanlagan katalog

function GetPath(mes: string):string;

var

Root: string; // o`zak katalog

pwRoot : PWideChar;

Dir: string;

begin

Root := ''; // o`zak katalog - Rabochiy stol papkasi

GetMem(pwRoot, (Length(Root)+1) * 2);

pwRoot := StringToWideChar(Root, pwRoot, MAX_PATH*2);

if SelectDirectory(mes, pwRoot, Dir)

then

if length(Dir) = 2 // foydalanuvchi o`zak papka tanladi

then GetPath := Dir+'\'

else GetPath := Dir

else

GetPath := '';

end;

// topilsin tugmasini chertish

procedure TForm1.Button1Click(Sender: TObject);

begin

Memo1.Clear; // Memo1 maydonini tozalash

Label4.Caption := '';

FileName := Edit1.Text; // nima qidiriladi

cDir := Edit2.Text; // qaerdan qidiriladi

n:=0; // topilgan fayllar soni

ChDir(cDir); // qidirish boshlangan papkaga kirish

Find; // qidirishni boshlash

if n = 0 then

ShowMessage('Qidirish shartini qanoatlantirgan fayllar yo`q.')

else Label4.Caption := 'Topilgan fayllar soni :' + IntToStr(n);

end;

// Papka tugmasini chertish

procedure TForm1.Button2Click(Sender: TObject);

var

Path: string;

begin

Path := GetPath('Papkani tanlang');

if Path <> ''

then Edit2.Text := Path;

end;

14.3. Gil’bert egri chizig’i

Quyidagi dastur Gil’bert egri chizig’ini chizish uchun mo`ljallangan. 13.7-rasmda 1, 2 va 3-tartibli Gil’bert egri chiziqlari tasvirlangan.

Agar diqqat bilan qaralsa, 2-tartibli Gil’bert egri chizig’i to`rtta 1-tartibli Gil’bert egri chiziqlarini to`g’ri chiziq bilan birlashtirishdan, 3-tartibli Gil’bert egri chizig’i esa to`rtta 2-tartibli Gil’bert egri chiziqlarini birlashtirishdan hosil bo`ladi. Sрunday qilib, Gil’bert egri chiziqlarini chizish algoritmi rekursiv bo`ladi. 5-tartibli Gil’bert egri chiziqlari (13.4-listing) joylashgan dialog oynasining ko`rinishi 13.8-rasmda keltirilgan.


13.7-rasm. 1, 2 va 3-tartibli Gil’bert egri chiziqlari



13.8-rasm. Beshinchi tartibli Gil’ber egri chizig’i

13.4-listing. Gil’bert egri chiziqlari

var

p: integer  5;  egri chiziqning tartibi

u: integer  7;  shtrix uzunligi

{ Gil’bert egri chizig’i birlashtirilgan to`rtta a, b, c va d elementlardan iborat. Har bir elementni mos protsedura chizadi. }

procedure a(i:integer; canvas: TCanvas); forward;

procedure b(i:integer; canvas: TCanvas); forward;

procedure c(i:integer; canvas: TCanvas); forward;

procedure d(i:integer; canvas: TCanvas); forward;

 egri chiziq elementlari



procedure a(i: integer; canvas: TCanvas);

begin

if i > 0 then begin

d(i-1, canvas); canvas.LineTo(canvas.PenPos.Xu,canvas.PenPos.Y);

a(i-1, canvas); canvas.LineTo(canvas.PenPos.X,canvas.PenPos.Yu);

a(i-1, canvas); canvas.LineTo(canvas.PenPos.X-u,canvas.PenPos.Y);

c(i-1, canvas);

end;

end;

procedure b(i: integer; canvas: TCanvas);

begin

if i > 0 then

begin

c(i-1, canvas); canvas.LineTo(canvas.PenPos.X-u,canvas.PenPos.Y);

b(i-1, canvas); canvas.LineTo(canvas.PenPos.X,canvas.PenPos.Y-u);

b(i-1, canvas); canvas.LineTo(canvas.PenPos.Xu,canvas.PenPos.Y);

d(i-1, canvas);

end;

end;

procedure c(i: integer; canvas: TCanvas);

begin

if i > 0 then

begin

b(i-1, canvas); canvas.LineTo(canvas.PenPos.X,canvas.PenPos.Y-u);

c(i-1, canvas); canvas.LineTo(canvas.PenPos.X-u,canvas.PenPos.Y);

c(i-1, canvas); canvas.LineTo(canvas.PenPos.X,canvas.PenPos.Yu);

a(i-1, canvas);

end;

end;

procedure d(i: integer; canvas: TCanvas);

begin

if i > 0 then

begin

a(i-1, canvas); canvas.LineTo(canvas.PenPos.X,canvas.PenPos.Yu);

d(i-1, canvas); canvas.LineTo(canvas.PenPos.Xu,canvas.PenPos.Y);

d(i-1, canvas); canvas.LineTo(canvas.PenPos.X,canvas.PenPos.Y-u);

b(i-1, canvas);

end;

end;

procedure TForm1.FormPaint(Sender: TObject);

begin

Form1.Canvas.MoveTo(u,u);

a(5,Form1.Canvas);  Gil’bert egri chizig’ini chizish

end;

Dasturda a elementni chizayotgan protsedura o`zidan tashqari, d va b protseduralarini chaqiradi. Kompilyator hatolik haqida axborot bermasligi uchun protsedura forward xizmatchi so`zi bilan birga e`lon qilingan. Bu hol "e`lonlar keyinroq beriladi" demakdir. Shunday qilib, a protsedurasini kompilyatsiya qilish jarayonida kompilyator b va d nomlari protseduralarni anglatishini "tushunadi".



Download 9,81 Mb.

Do'stlaringiz bilan baham:
1   ...   136   137   138   139   140   141   142   143   ...   209




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish