O’zbekiston respublikasi oliy va o’rta maxsus ta’lim vazirligi




Yüklə 0.95 Mb.
səhifə18/18
tarix20.04.2016
ölçüsü0.95 Mb.
1   ...   10   11   12   13   14   15   16   17   18

CloseGraph;


end

end.

FloodFill procedurasi- ixtiyoriy yopiq figurani to’ldirishning joriy stilidan foydalangan holda to’ldiradi. Uning umumiy ko’rinishi quyidagicha:

Procedure FlodFill (X,Y: integer, border: Word);

Bu yerda X,Y- yopiq figura ichidagi ixtiyoriy nuqta koordinatalari; Border- chegaraviy chiziq rangi. Agar figura yopiq bo’lmasa, u holda to’ldirish butun ekran

bo’yicha yoyiladi.

Masalan. Quyidagi dastur tasodifiy aylanalarni to’ldirishini namoyish qiladi.

Uses Graph, CRT;

var

d, r, ye, x, u, s : integer;

begin

{Grafikni inisializasiya kilish}

d := Detect; InitGraph(d, r, ' ') ;

e := GraphResult;

if e <> grOk then WriteLn(GraphErrorMsg(e)) else

begin

{to’g’ri burchakli oyna hosil qilamiz}

x := GetMaxX div 4;

u := GetMaxY div 4;

Rectangle(x,u,3*x,3*y);

SetViewPort(x+1,y+1, 3*x-1,3*y-1,ClipOn);

{kichik to’rtburchakni bo’yashni namoyish qiladi}

SetPillStyle(LtSlashFill,GetMaxColor);

Rectangle(0,0,8,20); FloodFill(1,1,GetMaxColor);

OutTextXY(10,25,'Press Enter...');

ReadLn; { Enter ni bosilishini kutadi}

{ixtiyoriy klavisha bosilmaguncha aylana hosil qilinaveradi}

repeat

{tasodifiy bo’yash shakli aniqlanadi}

SetFillStyle(Random(12),Random(GetMaxColor+1));

{aylana markazi koordinatalari va rangi beriladi}

x := Random (GetMaxX div 2);

u := Random (GetMaxY div 2);

s := Random (succ(GetMaxColor));

SetColor(c);

{aylana hositl qilinadi va bo’yaladi}

Circle(x, u, Random(GetMaxY div 5));

FloodFill (x, u, s)

until KeyPressed;

if ReadKey=#0 then x:= ord(ReadKey);

CloseGraph

end

end.

Bar procedurasi- ekranning to’g’ri burchakli sohasini bo’yaydi. Uning umumiy ko’rinishi:

Procedure Bar (x1, y2, x2, y2: integer); Bu yerda x1,...., u2 lar bo’yaladigan soha kordinatalari bo’lib, (x1,u1) yuqori chap burchak va (x2,u2) quyi o’ng burchak koordinatalari hisoblanadi. Procedura sohani SetfillStyle procedurasi orqali o’rnatilgan uzor va rang bilan bo’yaydi.

Masalan. Quyidagi dastur tasodifiy to’rtburchaklarni bo’yaydi.

Uses Graph, CRT;



var

d, r, e : integer;

begin

{Grafikni inisializasiya kilish}

d : = Detect; InitGraph(d, r, '');

e := GraphResult; if e <> grOk then

WriteLn(GraphErrorMsg(e)) else

begin

{Ekran markazida oyna hosil qilinadi}

d := GetMaxX div 4;

r := GetMaxY div 4; Rectangle(d,r,3*d,3*r);

SetViewPort(d+1,r+1,3*d-1,3*r-1,ClipOn);

{ tasodifiy ko’pburchaklarni hosil qilish va bo’yash}

repeat

SetFillStyle(Random(12),Random(succ(GetMaxColor)));

Bar(Random(GetMaxX),Random(GetMaxY),

Random(GetMaxX),Random(GetMaxY));

until KeyPressed;

if ReadKey=#0 then d := ord(ReadKey);

CloseGraph ;

end

end.

BarZd procedurasi- parallelepepedning uch o’lchovli tasvirini chizadi va uning oldingi o’qini bo’yaydi. Uning umumiy ko’rinishi quyidagicha:

Procedure BarZd (x1, y2, x2, y2, Depth: integer; top: boolean); Bu yerda x1,.....,u2 oldingi yoq koordinatalari bo’lib, (x1,u1) yuqori chap va (x2, u2) quyi o’ng burchak koordinatalari hisoblanadi. Depth- uch o’lchovli tasvirning uchunchi o’lchovi(“chuqurligi”); Tor- yuqori yoqning tasvirlash usuli. Agar Tor parametr true qiymatga yega bo’lsa, parallelilipipedning yuqori yoqi chizila-di, aks holda- chizilmaydi. Bu parametrning qiymati sifatida Graph modu-lida aniqlangan quyidagi o’zgarmaslar ishlatiladi:

const

TopOn = True;

TopOff = False;



Masalan. Qo’yidagi Var3d procedurasidan foydalanishning bir nechta holatlarini ko’rsatadi.

Uses Graph,CRT;

var

d, r, e: Integer;

begin

{Grafikni inisializasiya kilish}

d := Detect;

InitGraph(d, r, ' ') ;

e := GraphResult;

if e <> grOk then

WriteLn(GraphErrorMsg(e)) else

begin

{yuqori qirrali ustun}

Bar3D (80, 100, 120, 180, 15, TopOn);

{yuqori qirrasiz ustun:}

Vag3D (150, 150, 190, 180, 15, TopOff);

{Ustun turadi:}

Bar3D (230, 50, 250, 150, 15, TopOn);

Bar3D (220, 150, 260, 180, 15, TopOn);

{U etogo stolbika net verxney grani, i poetomu on ne meshayet

postavlennomu na nego sverxu:}

Bar3D (300, 150, 340, 180, 15, TopOff);

SetLineStyle(3,0,1);

SetColor(Yellow);

SetFillStyle(LtSlashFill,Yellow);

Bar3D (300, 50, 340, 150, 15, TopOn);

if ReadKey=#0 then d := ord(ReadKey);

CloseGraph;

end

end.

FillPoly procedurasi- bo’yalgan ko’pburchak chizadi. Uning umumiy ko’rinishi: procedure Fillpoli (N:word; vat Cords); N- yopiq ko’pburchak uchlari-ning soni; Cords-Pointtype tilidagi o’zgaruvchi bo’lib, uchlarining koordinata-laridan iborat bo’ladi. Uchlarining koordinatalari Integer turidagi qiymat-larining to’rtligi orqali beriladi: birinchisi gorizontal va ikkinchisi vertikal koordinatalarni aniqlaydi. Ular uchun modulda turni quyidagicha foydalanish mumkin:

type

Pointtype= rekord


X,y:integer; end;

Chiziqning shakli va rangi SetlineStyle va SetColor proceduralari orqali, bo’yash rangi va turi esa SetFillStyle procedurasi bilan beriladi.



Masalan: Quyidagi dasturlarda bo’yalgan ko’pburchaklar hosil qilinadi.

Uses Graph, CRT;

var

d, r, e: Integer;

p : array [1..6] of PointType; n, k : Word;

begin

{Grafikni inisializasiya kilish}

d := Detect; InitGraph(d, r, ' ') ;

e := GraphResult; if e <> grOk then

WriteLn(GraphErrorMsg(e)) else

begin

{ekran markazida oyna}

d := GetMaxX div 4;

r := GetMaxY div 4;

Rectangle(d,r,3*d,3*r);

SetViewPort(d+l,r+l,3*d-l,3*r-l,ClipOn);

{tasodifiy bo’yalgan ko’pburchaklarni chop etish}

repeat

{rang va uzorni tanlash)

SetFillStyle(Random(12),Random(succ(GetMaxColor)));

SetColor (Random(succ(GetMaxColor)));

{tasodifiy koordinatalarni tanlash}

n := Random (4) + 3 ; for k := 1 to n do with p[k] do

begin

x := Random (GetMaxX div 2);

u := Random (GetMaxY div 2)

end;

FillPoly (n, p) {chop etish va bo’yash}

until KeyPressed;

if ReadKey=#0 then k := ord(ReadKey);

CloseGraph

end

end.

FillEllipse procedurasi- bo’yalgan elementni hosil qiladi. Uning umumiy ko’rinishi quyidagicha:

Procedure Fillellipse (X,Y,RX,RY:integer); Bu yerda X,U- ellips markazi-ning koordinatalari; RX, RX- ellipsning gorizontal va vertikal radiuslari.

Sector procedurasi- ellips sektorini chizadi va uni bo’yaydi. Uning umumiy ko’rinishi:

Procedure Sector (X,Y: integer; BegA, endA, RX, RY: word);

Bu yerda begA, endA- mos ravishda ellips sektorining boshlang’ich va oxirgi burchaklari. Boshqa parametrlar FillEllipse procedurasi parametrlari kabi aniqlanadi.



Masalan. Quyidagi dastur ekranga bo’yalgan elips va sektorlarni hosil qiladi. Dasturdan chiqish uchun ixtiyoriy tugmacha bosiladi.

Uses Graph, CRT;

var

d, r, e : Integer;

begin

{Grafikni inisializasiya kilish}

d := Detect; InitGraph(d, r, '');

e := GraphResult; if e <> grOk then

WriteLn(GraphErrorMsg(e)) else

begin

{ekran markazida oyna hosil qilish}

d := GetMaxX div 4;

r := GetMaxY div 4;

Rectangle(d,r,3*d,3*r);

SetViewPort(d+1,r+1,3*d-1,3*r-1,ClipOn);

{chiqarish sikli}

repeat

SetFillStyle(Random(12), Random(succ(GetMaxColor)));

SetColor (Random(succ(GetMaxColor)));

Sector(Random(GetMaxX div),Random(GetMaxY div 2),

Random(360),Random(360),Random(GetMaxX div 5),

Random(GetMaxY div 5));

FillEl.lipse (Random (GetMaxX div 2),

Random(GetMaxY div 2),Random(GetMaxX div 5),

Random(GetMaxY div 5))

until KeyPressed;

if ReadKey=#0 then d := ord(ReadKey);

CloseGraph;


end

end.
PieSlice procedurasi- aylana sektorini chizadi va bo’yaydi. Uning umu-miy ko’rinishi:

procedure Pieslice (x,y: integer; BegA, endA, R: word);

Uning Sestor procedurasidan farqi, unda faqatgina bitta R radius ko’rsatiladi. Proceduradan aylanaviy diagrammalarni yasashda foydalanish ancha qulay hisoblanadi.

Masalan. Quyidagi dastur aylanaviy diagrammani hosil qiladi.

Uses Graph, CRT;

var

d, r, e : Integer;

begin { grafik tartibni inisializasiya qilish}

d := Detect;

InitGraph(d, r, '');

e := GraphResult; if e <> grOk then

WriteLn(GraphErrorMsg(e)) else

begin

{kichik sektorni chiqarish}

SetFillStyle(WideDotFill, White);

PieSlice(GetMaxX div 2+5,GetMaxY div 2+4,270,360,100);

{katta sektorni chiqarish}

SetFillStyle (SolidFill, Red);

PieSlice (GetMaxX div 2,GetMaxY div 2, 0,270,100).;

{yozuvni hosil qilish}

OutTextXY (GetMaxX div 2+90,GetMaxY div 2+70, '25%');

OutTextXY(GetMaxX div 2-50,GetMaxY div 2-20, '75%');

{ixtiyoriy klavishani bosishi kutiladi}

if ReadKey=#0 then d := ord(ReadKey);

CloseGraph;

end

end.

Grafik holatida matnlarni chiqarish.

Quyida beriladigan funksiya va proceduralardan grafik holatida matn li ma’lumotlarni chiqarish uchun foydalaniladi.



Outtext procedurasi- ko’rsatkichning joriy o’rnidan boshlab, matnli satrni chiqaradi. Uning umumiy ko’rinishi: procedure outtext (txt: String); Bu yerda txt- chiqariladigan satr.

OuttextXY procedurasi- ko’rsatilagn joydan boshlab satr chiqariladi. Uning umumiy ko’rinishi:

Procedure OuttextXY (x, y: integer; txt: String);

Bu yerda x,u: matn chiqarish boshlanadigan nuqta koordinatalari; txt- chiqariladigan satr.

SettextStyle procedurasi- grafik ekranda matn chiqarish shartini o’rnatadi. Uning umumiy ko’rinishi.

Procedure Settextstyle (font, Direct, Seze: word);

Bu yerda font- shrift kodi; Direct- yo’nalish kodi, Seze- shrift o’lchovi kodi. Shrift o’lchovi kodini ko’rsatish uchun quyidagi o’zgarmaslardan foydalaniladi:

Const


Defaultfont= 0; {8x8 nuqtali shrift}

Triplexfont= 1; {utroyenniy shrift Trip. chr}

Smallfont= 2; {umen’shenniy Litt. chr}

SansSeriffont= 3; {premoy shrift Sans. chr}

Gothicfont= 4; {goticheskiy shrift Goth. chr}

Matnni chiqarish yo’nalishini berish uchun quyidagi o’zgarmaslar-dan foydalaniladi:

Sonst

Horizdir= 0; {chapdan o’ngga}



Vertdir= 1; {pastdan yuqoriga}

Har bir shriftni o’n martalab o’lchovini o’zgartirish mumkin. Chiqari-layotgan belgilarning o’lchovi Size parametri bilan kodlanadi. Kod 1 dan 10 gacha bo’lgan qiymatlarni qabul qilishi mumkin.



Masalan. Quyidagi dastur turli shriftlarni namoyish qiladi.

Uses Graph, CRT;

const

FontNames: array [1..10] of String[4] =

( 'TRIP' , 'LITT'' SANS ' , ' GOTH ' , 'SCRI ' , ' SIMP ' ,'TSCR ' ,

' LOOM ' , ' EURO',' BOLD ' );

Tabl = 50;

Tab2 = 150;

Tab3 =220;

var

d, r, Err,{grafikni inisializasii qilish o’zgaruvchilari}

Y,dY,{chiqarish ordinatasi va uning orttirmasi}

Size,{belgining o’lchovi}

MaxFont,{shriftning maksimal o’lchovi}

k: Integer;{shrift nomeri}

NT, SizeT, SynibT: String;{chiqarish satri}

c: Char;

{-------------------}

Procedure OutTextWithTab ( S1, S2, S3, S4: String);

{ Tab1..TabZ larni hisobga olgan holda S1,S2,S3,S4 satrlarni

chiqarish}

begin

MoveTo( (Tab1-TextWidth(Sl) ) div2,Y);

OutText (S1) ;

MoveTo(Tabl+(Tab2-Tabl-TextWidth(S2)) div2,Y);

OutText (S2) ;

MoveTo(Tab2+(Tab3-Tab2-TextWidth(S3)) div 2,Y);

OutText(S3);

if S4='Symbols' then { Symbols kolonka sarlavhasi}

MoveTo((Tab3+GetMaxX-TextWidth(S4)) div 2,Y)

else {boshqa satrlar}

MoveTo(Tab3+3,Y);

OutText(S4)

end;

{------------}

begin

{Grafikni inisializasiya kilish}

InitGraph(d,r, ' ');

Err := GraphResult; if ErrogrOk then

WriteLn(GraphErrorMsg(Err))

else

begin

{ shriftlar sonini aniqlash}

{$IFDEF VER70'}

MaxFont := 10; .

{$ELSE}

MaxFont := 4;

{$ENDIF}

SetTextStyle(l,0,4);

Y := 0;

OutTextWi thTab('N','Name',Size','Symbols');

{chiziq sarlavhasi Yning balandligi aniklanadi}

Y := 4*TextHeight('Z') div3;

Line(0,Y,GetMaxX,Y) ;

{Opredelyayem nachalo Y tablisы i vыsotu dY kajdoy stroki}

Y := 3*TextHeight('Z') div 2;

dY := (GetMaxY-Y) div (MaxFont);

{belgilar satrini tayyorlash}

SymbT := '';

For s := 'a' to 'z' do

SymbT := SymbT+c;

{satrlar jadvalini chikarish}

for k := 1 to MaxFont do

begin

Size := 0;

{dY ga teng bo’lguncha satr balandligini o’zgartirish}

repeat

inc(Size);

SetTextStyle(k,0,Size+1);

until (TextHeight('Z')>=dY) or (Size=10)

or (Textwidth(FontNames[k])>(Tab2-Tab1));

{Gotovim nomer NT i razmer SizeT shrifta}

Str(k,NT);

Str(Size,SizeT);

{satr jadvalini chiqarish}

SetTextStyle(k,HorizDir,Size);

OutTextWithTab(NT,FontNames[k],SizeT,SymbT);

inc(Y,dY)

end;

{ramka chizig’i chiziladi}

Rectangle(0,0,GetMaxX,GetMaxY);

Line(Tab1,0,Tabl,GetMaxY);

Line(Tab2,0,Tab2,GetMaxY);

Line(Tab3,0,TaZ,GetMaxY);

{ixtiyoriy tugmachani bosish}

ReadLn;

CloseGraph;

end

end.

Settextjustife procedurasi- ko’rsatkichning joriy holatiga nisbatan chiqarilayotgan matnlar tekislanadi. Uning umumiy ko’rinishi:

Prosedure Settextjustife (Horiz, Vert: word);

Bu yerda Horiz- gorizontal tekislash; Vert- vertikal tekislash. Tekislash matn qanday joylashishini aniqlaydi, ya’ni ko’rsatilgan joydan chapga yoki o’ngga, yuqoriga, quyiga yoki markaz bo’yicha. Bu yerda quyidagi o’zgar-maslar ishlatiladi:

Const


Lefttext= 0; {ko’rsatkich matndan chapga}

Contertext= 1; {Silletrik chap va o’ngga, yuqori va pastga}

Righttext= 2; {Ko’rsatkich matndan o’ngga}

Bottomtext= 3; {Ko’rsatkich matndan pastga}

Toptext= 2; {Ko’rsatkich matndan yuqoriga}

Masalan: Quyidagi dastur grafik ekran markaziga nisbatan turli tekislash usullarini namoyish qiladi.

Textwidth funksiyasi- chiqarilayotgan matnli satrning uzunligini aniqlaydi. Uning umumiy ko’rinishi quyidagicha:

Function textwidth (txjt: String): word;

Text Height funksiyasi- shrift balandligini aniqlaydi. Uning umumiy ko’rinishi:

Function TextHeight (txt: String): word;



Sinov savollari.

  1. Grafik holati nima? Unga qanday o’tiladi?

  2. Grafik holatida ekranning holati qanday bo’ladi?

  3. Grafik holatdan qanday chiqiladi?

  4. GRAPH modulning asosiy funksiya proceduralari qanday?

  5. Figuralarni hosil qilish procedura va funksiyalarining sanang?

  6. Grafik holatda matnlar bilan ishlash jarayonini ta’riflang?

  7. Funksuyalar grafigi qanday hosil qilinadi?

  8. Ob’ektlar qanday harakatlantiriladi?

Uyga vazifa : Turbo-Paskal tizimida grafik holatida ishlash qoidalarini mukammal o'rganing, tasvirlarni va grafiklarni hosil qiling,a ularni amaloyotga tatbiq eting.


Adabiyotlar


  1. Shafrin Yu. Osnovi kompyuternoy texnologii. Uchebnoi posobie- M: 1997, - 560 b.

  2. Raxmanqulova S.I. IBM PC shaxsiy kompyuterda ishlash.- T:, NMK "Sharq"- INSTAR, 1996 y.

  3. Figurnov V. E. IBM PC dlya pozovatelya. - M; Finantsi i statistika, 1990 g.

  4. Ortiqov A., Mamatqulov A. IBM PC kompyuteridan foydalanish.- Toshkent, "Qomus", 1992 y.

  5. Volvachev A.K., Krisevich V. S. Programmirovanie na yazika Paskal dlya personalnix EC EBM- Minsk, Visshaya shkola, 1989 g.

  6. Vasyukova N.D., Tyulyaeva V.V. Praktekum po osnovam programmirovaniya. Yazik Paskal- M; Visshsya shkola, 1991 g.

  7. Zuev E.A. Yazik programmiravaniya Turbo Paskal 6.0, 7.0- M; Radioi svyaz, 1993.

  8. Faysman A. Professeonalnoe programmirobaniya na yazike Paskal- M; Nauka, 1989 g.

  9. Aminov I. Paskal dasturlash tili. O'quv qullanma- SamDU, Samarqand, 1996 y.

  10. Aminov I.B. Informatika va informatsion texnologiyalar. Ma’ruzalar matni. 2005 yil. SamDU.

  11. Aminov I.B., Eshtemirov S., Nomozov F. Informatika va informatsion texnologiyalar fanidan laboratoriya ishlari. Uslubiy qo’llanma. Samarqand, SamDU, 2008 yil.


Adabiyotlar


  1. Shafrin Yu. Osnovi kompyuternoy texnologii. Uchebnoi posobie- M: 1997, - 560 b.

  2. Raxmanqulova S.I. IBM PC shaxsiy kompyuterda ishlash.- T:, NMK "Sharq"- INSTAR, 1996 y.

  3. Figurnov V. E. IBM PC dlya pozovatelya. - M; Finantsi i statistika, 1990 g.

  4. Ortiqov A., Mamatqulov A. IBM PC kompyuteridan foydalanish.- Toshkent, "Qonis" 1992 y.

  5. Volvachev A.K., Krisevich V. S. Programmirovanie na yazika Paskal dlya personalnix EC EBM- Minsk, Visshaya shkola, 1989 g.

  6. Vasyukova N.D., Tyulyaeva V.V. Praktekum po osnovam programmirovaniya. Yazik Paskal- M; Visshsya shkola, 1991 g.

  7. Zuev E.A. Yazik programmiravaniya Turbo Paskal 6.0, 7.0- M; Radioi svyaz, 1993.

  8. Faysman A. Professeonalnoe programmirobaniya na yazike Paskal- M; Nauka, 1989 g.

  9. Aminov I. Paskal dasturlash tili. O'quv qullanma- SamDU, Samarqand, 1996 y.

  10. Aminov I.B. Informatika va informatsion texnologiyalar. Ma’ruzalar matni. 2005 yil. SamDU.

  11. Aminov I.B. S.Eshtemirov, F.Nomozov. Informatika va informatsion texnologiyalar fanidan laboratoriya ishlari. Uslubiy qo’llanma. SamDU, Samarqand, 2008 yil.
1   ...   10   11   12   13   14   15   16   17   18


Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©azrefs.org 2016
rəhbərliyinə müraciət

    Ana səhifə