B. J. Boltayev, A. R. Azamatov, G. A. Azamatova, B. S. Xurramov nazariya, algoritm, dastur toshkent 2013


Download 372.89 Kb.
bet63/68
Sana02.11.2023
Hajmi372.89 Kb.
#1740971
1   ...   60   61   62   63   64   65   66   67   68
Bog'liq
Algoritmlash va dasturlash asoslari seriyasidan Kitob – II b. J.-fayllar.org

320 
240 


(x,y

(0,0) 






104
qiymatli bo‘lishi uchun ko‘paytmani Trunc orqali


yozamiz. Aylana markazini aniqlaydigan butun
o‘zgaruvchilarni kiritib olamiz: markazX va
markazY. Aylana markazini (markazX, markazY)
nuqtaga ko‘chirib Paskalda quyidagi formulalarni
hosil qilamiz:
x:= markazX +trunc(R*cos(alfa));
y:= markazY +trunc(R*sin(alfa));
Masaladagi
muntazam
beshburchak
uchlari
koordinatalarini aniqlash uchun quyidagicha muloha-
za yuritamiz:
Muntazam beshburchakka tashqi aylana chizish mumkin. Aylanani bir
“aylanib” chiqish 360
0
yoki 2∙π ga teng. Bu burchakni 5 ga bo‘linsa, aylanani
beshta teng yoyga ajratuvchi nuqtalar orasidagi burchak 2∙π/5 aniqlanadi. Ekran
markazi (320, 240) ni koordinata boshi hisoblab muntazam beshburchakning
yuqori uchi koordinatalarini radiusi 100 ga teng aylananing nuqtasi sifatida
x:= 320 +trunc(100*cos(–pi/2));
y:= 240 +trunc(100*sin(–pi/2));
kabi aniqlash mumkin. Muntazam beshburchakning keyingi har bir nuqtasi shu
formulada
–pi/2 ga, mos ravishda, 1∙(2∙π/5)=2∙π/5, 2∙(2∙π/5)=4∙π/5,
3∙(2∙π/5)=6∙π/5, 4∙(2∙π/5)=8∙π/5 ni qo‘shish orqali hosil qilinadi.
Endi bu nuqtalarni Line(X1,Y1,X2,Y2) protsedurasi yoki FillPoly(BS,KM)
protsedurasi yordamida tutashtirish mumkin. Chiziq rangini tanlash uchun
SetColor(4), fon rangini tanlash uchun esa SetBkColor(14) protseduralaridan
foydalaniladi.
Dasturi (Line):
Uses Graph;
Var gd, gm: integer; X1,Y1, X2, Y2: Integer; X3,Y3, X4,Y4, X5, Y5:Integer;
Begin Gd:= 0; InitGraph(Gd, Gm, ''); Setbkcolor(14); Setcolor(4);
X1:=320+trunc(100*cos(
–pi/2)); Y1:=240+trunc(100*sin(–pi/2));
X2:=320+trunc(100*cos(
–pi/2+2*pi/5)); Y2:=240+trunc(100*sin(–pi/2+2*pi/5));
X3:=320+trunc(100*cos(
–pi/2+4*pi/5)); Y3:=240+trunc(100*sin(–pi/2+4*pi/5));
X4:=320+trunc(100*cos(
–pi/2+6*pi/5)); Y4:=240+trunc(100*sin(–pi/2+6*pi/5));
X5:=320+trunc(100*cos(
–pi/2+8*pi/5)); Y5:=240+trunc(100*sin(–pi/2+8*pi/5));
Line(X1,Y1,X2,Y2); Line(X2,Y2,X3,Y3); Line(X3,Y3,X4,Y4);
Line(X4,Y4,X5,Y5); Line(X5,Y5,X1,Y1); Readln; CloseGraph;
End.

Dasturi (FillPoly):


Uses Graph;
Var gd, gm : Integer; bb : Array[1..5,1..2] of Integer;
Begin Gd:= 0; InitGraph(Gd, Gm, ''); Setbkcolor(14); Setcolor(4);
bb[1,1]:=320+trunc(100*cos(
–pi/2)); bb[1,2]:=240+trunc(100*sin(–pi/2));
bb[2,1]:=320+trunc(100*cos(
–pi/2+ 2*pi/5));



105
bb[2,2]:=240+trunc(100*sin(


–pi/2+ 2*pi/5));
bb[3,1]:=320+trunc(100*cos(
–pi/2+ 4*pi/5));
bb[3,2]:=240+trunc(100*sin(
–pi/2+ 4*pi/5));
bb[4,1]:=320+trunc(100*cos(
–pi/2+ 6*pi/5));
bb[4,2]:=240+trunc(100*sin(
–pi/2+ 6*pi/5));
bb[5,1]:=320+trunc(100*cos(
–pi/2+ 8*pi/5));
bb[5,2]:=240+trunc(100*sin(
–pi/2+ 8*pi /5));
FillPoly(5,bb); Readln; CloseGraph;
End.

142*. Ichi siyrak qizil nuqtalar bilan to‘ldirilgan muntazam oltiburchak chizing.

Yechim:
Masaladagi muntazam oltiburchak uchlari koordinatalarini aniqlash uchun
quyidagicha mulohaza o‘rinli:
Muntazam oltiburchakka tashqi aylana chizish
mumkin. Aylanani bir “aylanib” chiqish 360
0
yoki
2∙π ga teng. Bu burchakni 6 ga bo‘linsa, aylanani olti-
ta teng yoyga ajratuvchi nuqtalar orasidagi burchak
2∙π/6=π/3 aniqlanadi. Ekran markazini koordinata
boshi hisoblab muntazam oltiburchakning yuqori
uchi koordinatalarini radiusi 100 ga teng aylananing
nuqtasi sifatida
x:= 320 +trunc(100*cos(–pi/2));
y:= 240 +trunc(100*sin(–pi/2));
kabi aniqlash mumkin. Muntazam oltiburchakning keyingi har bir nuqtasi shu
formulada –pi/2 ga, mos ravishda, 1∙(π/3)=π/3, 2∙(π/3)=2∙π/3, 3∙(π/3)=π,
4∙(π/3)=4∙π/3, 5∙(π/3)=5∙π/3 ni qo‘shish orqali hosil qilinadi.
Chiziq rangini tanlash uchun SetColor(4), fon rangini tanlash uchun Set-
BkColor(14), ichini siyrak qizil nuqtalar bilan to‘ldirish uchun SetFill-
Style(10,4); protseduralaridan foydalaniladi. Agar bu nuqtalar FillPoly(BS,KM)
protsedurasi yordamida tutashtirilsa, ichi o‘zi bo‘yaladi. Agar nuqtalarni
Line(X1,Y1,X2,Y2) protsedurasi yordamida tutashtirilsa ichiga bo‘yash usulini
qo‘llash uchun Floodfill protsedurasidan foydalaniladi.
Dasturi (Line):
Uses Graph;
Var gd, gm, X1,Y1, X2,Y2: integer; X3,Y3,X4,Y4,X5,Y5,X6,Y6:Integer;
Begin
Gd:= 0; InitGraph(Gd, Gm, ''); Setbkcolor(14); Setcolor(4); SetFillStyle(10,4);
X1:= 320 +trunc(100*cos(-pi/2)); Y1:= 240 +trunc(100*sin(-pi/2));
X2:= 320 +trunc(100*cos(-pi/2+pi/3)); Y2:= 240 +trunc(100*sin(-pi/2+pi/3));
X3:= 320 +trunc(100*cos(-pi/2+2*pi/3)); Y3:= 240 +trunc(100*sin(-pi/2+2*pi/3));
X4:= 320 +trunc(100*cos(-pi/2+pi)); Y4:= 240 +trunc(100*sin(-pi/2+pi));
X5:= 320 +trunc(100*cos(-pi/2+4*pi/3)); Y5:= 240 +trunc(100*sin(-pi/2+4*pi/3));



106
X6:= 320 +trunc(100*cos(-pi/2+5*pi/3)); Y6:= 240 +trunc(100*sin(-pi/2+5*pi/3));


Line(X1,Y1,X2,Y2); Line(X2,Y2,X3,Y3); Line(X3,Y3,X4,Y4); Line(X4,Y4,X5,Y5);
Line(X5,Y5,X6,Y6); Line(X6,Y6,X1,Y1); Floodfill( 320,240, red);
Readln; CloseGraph;
End.

Dasturi (FillPoly):


Uses Graph;
Var gd, gm : Integer; A : Array[1..6,1..2] of Integer;
Begin
Gd:= 0; InitGraph(Gd, Gm, ''); Setbkcolor(14); Setcolor(4); SetFillStyle(10,4);
A[1,1]:=320+trunc(100*cos(
–pi/2)); A[1,2]:=240+trunc(100*sin(–pi/2));
A[2,1]:=320+trunc(100*cos(
–pi/2+pi/3)); A[2,2]:=240+trunc(100*sin(–pi/2+pi/3));
A[3,1]:=320+trunc(100*cos(
–pi/2+2*pi/3));
A[3,2]:=240+trunc(100*sin(
–pi/2+2*pi/3));
A[4,1]:=320+trunc(100*cos(
–pi/2+pi)); A[4,2]:=240+trunc(100*sin(–pi/2+pi));
A[5,1]:=320+trunc(100*cos(
–pi/2+4*pi/3));
A[5,2]:=240+trunc(100*sin(
–pi/2+4*pi/3));
A[6,1]:=320+trunc(100*cos(
–pi/2+5*pi/3));
A[6,2]:=240+trunc(100*sin(
–pi/2+5*pi/3)); FillPoly(6,A);
Readln; CloseGraph;
End
.

143*. Ekran markazida muntazam sakkizburchak chizing.

Yechim:
Muntazam oltiburchakka tashqi aylana chizish mumkin. Aylanani bir
“aylanib” chiqish 360
0
yoki 2∙π ga teng. Bu burchakni 8 ga bo‘linsa, aylanani
sakkizta teng yoyga ajratuvchi nuqtalar orasidagi burchak alfa=2∙π/8=π/4 aniqla-
nadi. Ekran markazini koordinata boshi hisoblab muntazam oltiburchakning
yuqori uchi koordinatalarini radiusi 100 ga teng aylananing nuqtasi sifatida
x:= 320 +trunc(100*cos(alfa)); y:= 240 +trunc(100*sin(alfa));
kabi aniqlash mumkin. Muntazam oltiburchakning keyingi har bir nuqtasi shu
formulada alfa=alfa+π/4 orqali hosil qilinadi. Kesmalarni chizish uchun LineTo
(X,Y) protsedurasidan foydalanamiz.
Dasturi:
uses graph;
var gd, gm :integer; x,y : array[1..8] of integer; alfa:real;
Begin gd:=0; Initgraph(gd, gm,'');
alfa:=pi/4; x[1]:=320+round(100*cos(alfa)); y[1]:=240+round(100*sin(alfa));
alfa:=alfa+pi/4; x[2]:=320+round(100*cos(alfa)); y[2]:=240+round(100*sin(alfa));
alfa:=alfa+pi/4; x[3]:=320+round(100*cos(alfa)); y[3]:=240+round(100*sin(alfa));
alfa:=alfa+pi/4; x[4]:=320+round(100*cos(alfa)); y[4]:=240+round(100*sin(alfa));
alfa:=alfa+pi/4; x[5]:=320+round(100*cos(alfa)); y[5]:=240+round(100*sin(alfa));
alfa:=alfa+pi/4; x[6]:=320+round(100*cos(alfa)); y[6]:=240+round(100*sin(alfa));
alfa:=alfa+pi/4; x[7]:=320+round(100*cos(alfa)); y[7]:=240+round(100*sin(alfa));



107
alfa:=alfa+pi/4; x[8]:=320+round(100*cos(alfa)); y[8]:=240+round(100*sin(alfa));


MoveTo(x[8], y[8]); LineTo(x[1], y[1]); LineTo(x[2], y[2]); LineTo(x[3], y[3]);
LineTo(x[4], y[4]); LineTo(x[5], y[5]); LineTo(x[6], y[6]); LineTo(x[7], y[7]);
LineTo(x[8], y[8]);
Readln; Closegraph;
End.

144. Kub rasmini chizing, barcha yoqlari turli rangda bo‘lsin.


145*. Sariq rangli to‘g‘ri chiziq va markazlari shu to‘g‘ri chiziqda joylashgan
qizil rangli 5 ta aylana chizing.
146*. Radiusi R ga teng chegarasi sariq rangli, ichi ko‘k rangli doira chizing.

Yechim:
Bu masalani turli xil usullarda hal etish mumkin. Masalan:


1) SetColor(yellow) protsedurasi yordamida chegarasi tanlanlangan aylana
Circle(320,240,R) protsedurasi yordamida markazda chiziladi. Uning ichini
bo‘yash uchun rang va usulni SetFillStyle(1,blue) protsedurasi yordamida tan-
lab, FloodFill(320,240,yellow) yordamida bo‘yaladi.
2) SetColor(yellow) protsedurasi yordamida chegarasi, SetFillStyle(1,blue)
protsedurasi yordamida ichini bo‘yash uchun rang va usul tanlanlangan doira
FillEllipse(320,240,R,R) protsedurasi yordamida markazda chiziladi.
Dasturi (Circle):
Uses graph;
Var gd, gm, R: integer;
begin
Write(‘Radiusni kiriting: ‘); Readln(R);
gd:=0; InitGraph(gd, gm,'');
SetColor(yellow);
Circle(320,240,100);
SetFillStyle(1,blue);
FloodFill(320,240,yellow);
Readln; CloseGraph;
end.

Dasturi (FillEllipse):


Uses Graph;
var gd, gm, R: integer;
Begin
Write(‘Radiusni kiriting: ‘);
Readln(R);
gd:= 0; InitGraph(gd, gm, '');
SetColor(yellow);
SetFillStyle(1,blue);
FillEllipse(320,240,R,R);
Readln; CloseGraph;
end.

147*. Yonma-yon joylashgan tegib turadigan uch xil rangli doira chizing


148*. Uchalasi bir-biriga tegib turadigan uch xil rangli doira chizing.
149*. Olimpiada emblemasini eslatuvchi 5 ta halqa rasmini chizing.
150*. Oy rasmini chizing.

Yechim:
Ekranda oq rangli oy ko‘rinishini hosil qilish uchun ichi oqqa bo‘yalgan doi-


ra bilan ichi fon rangi, ya’ni qoraga bo‘yalgan doira kesishtiriladi. Shunda bi-
rinchi doiraning kerakmas qismi qora rangda aks etgani uchun ko‘rinmaydi va
oy ko‘rinishi hosil bo‘ladi. Doirani oq gardishi ko‘rinmasligi uchun chegara
rangini ham fon rangida olinishi muhim.



108
Dasturi:


Uses graph;
Var gd, gm: integer;
Begin gd:=0; Initgraph(gd,gm,'');
Setcolor(0); Setfillstyle(1,15);
Fillellipse(200,200,50,50);
Setfillstyle(1,0 );
Fillellipse(225,200,45,45);
Readln; CloseGraph;
End.

Natijaning ekrandagi ko‘rinishi:


151*. Nur sochib turgan quyosh rasmini chizing.


152*. Dengiz uzra nur taratayotgan Quyosh rasmini chizing. Dengizni chizishda
yoy chizish protsedurasidan foydalaning.

Yechim:
Ekran foniga och billur rang (kodi 11) tanlanib, radiusi 50 piksel bo‘lgan


chegarasi va ichi sariq rangli doira chiziladi: Setcolor(14); Setfillstyle(1,14); Fil-
lellipse(510,100,50,50). Quyosh nurlarini chizish uchun quyosh markazidan
chiquvchi chiziqlar olinishi hisoblashni osonlashtirgani uchun Line(500,100, X,
Y); protsedurasi yordamida X va Y larni tanlash orqali chiziladi.
Mavjlanayotgan dengizni chizish uchun Ellipse(X,Y,BB,OB,XR,YR)
protsedurasidan foydalaniladi, bu yerda markazi (X,Y) nuqtada, x va y o‘qlari
bo‘yicha radiuslari mos ravishda XR va YR ga teng ellipsning BB burchagidan
OB burchagigacha bo‘lgan yoyini chizadi. Burchak gradus o‘lchov birligida ber-
iladi. Dengizga rang berish uchun Floodfill protsedurasidan foydalaniladi.
Dasturi:
Uses graph;
Var gd, gm: integer;
Begin gd:=0; Initgraph(gd, gm, '');
Setbkcolor(11); Setfillstyle(1,yellow);
Setcolor(yellow); Fillellipse(510,100,50,50); line(510,100,510,10);
line(510,100,510,190); line(510,100,420,100); line(510,100,600,100);
line(510,100,445,40); line(510,100,575,40); line(510,100,445,150);
line(510,100,575,150);
Setcolor(blue); Setfillstyle(1, blue); ellipse(40,300,22,145,70,45);
ellipse(193,265,200,340,95,50); ellipse(340,307,40,146,70,45);
ellipse(455,300,22,148,70,45); ellipse(608,265,200,340,95,50);
Floodfill(40,340,blue); Readln; CloseGraph;
End.

Natijaning ekrandagi ko‘rinishi:





109

153*. Ekranni sariq gorizontal chiziqlar bilan to‘ldiring.

Yechim:
Bu masalani turli xil usullarda hal etish mumkin. Masalan:


1) To‘g‘ri to‘rtburchak chizib, uning ichini bo‘yash uchun rang va usulni
SetFillStyle(usul,rang); protsedurasi yordamida tanlash orqali, bu yerda rang –
tanlanayotgan rang kodi, usul – bo‘yash usuli. Bar(X1,Y1,X2,Y2) protsedurasi
ekranda yuqori chap burchagi (X1,Y1) va quyi o‘ng burchagi (X2,Y2) koordina-
tali nuqtalarda bo‘lgan, ichi joriy rang va joriy usulda bo‘yalgan to‘g‘ri
to‘rtburchak chizadi. Joriy rangni sariq, ya’ni Yellow (kodi 14), bo‘yash usulini
2, ya’ni qalin gorizontal chiziqlar bilan to‘ldirish, X1=0, Y1=0, X2=639,
Y2=479 kabi tanlash masala yechimini beradi;
2) Bar3D(X1,Y1,X2,Y2,a,b) protsedurasi joriy rang va joriy usulda
bo‘yalgan parallelepiped chizadi, bu yerda a – parallelepiped yon tomonining
uzunligi, b esa mantiqiy ifoda bo‘lib, uning qiymati “rost” bo‘lsa parallelepi-
pedning yuqori qirrasi chiziladi, “yolg‘on” bo‘lsa chizilmaydi. Shuning uchun
SetFillStyle(2,14); a=0, b=False, X1=0, Y1=0, X2=639, Y2=479 kabi tanlash
masala yechimini beradi.
Dasturi (Bar):
uses graph;
Var
gd, gm: integer;
begin
gd := 0; InitGraph(gd, gm, '');
setfillstyle(2, yellow);
Bar(0,0,639,479);
Readln; CloseGraph;
end.

Dasturi (Bar3D):


Uses Graph;
Var
gd, gm: integer;
Begin
gd:= 0; InitGraph(gd, gm, '');
SetFillStyle(2,14);
Bar3D(0,0,639,479,0,False);
Readln; CloseGraph;
end.

154*. Ekranni teng to‘rt bo‘lakka bo‘lib, ularni mos ravishda qizil, sariq, yashil va


ko‘k ranglarga bo‘yang.

Yechim:
Ekranning o‘lchamlari 0..639x0..479 bo‘lgani uchun to‘g‘ri to‘rtburchaklar





110
yordamida 4 bo‘lakka bo‘lish mumkin. To‘g‘ri to‘rtburchaklar diagonallari


uchlari koordinatalari quyidagicha aniqlanadi: (0,0) va (320,240); (320,0) va
(639,240); (0,240) va (320,479); (320,240) va (639,479).
To‘g‘ri to‘rtburchaklar chizish uchun Bar(X1,Y1,X2,Y2); chegarasi rangini
belgilash uchun SetColor(rang), ichini bo‘yash uchun SetFillStyle(usul,rang);
protsedurasidan foydalanish qulay.
Dasturi:
Uses graph;
Var gd, gm:integer;
Begin
gd := 0; InitGraph(gd, gm, '');
setfillstyle(1,red); bar(0,0,320,240);
setfillstyle(1,yellow); bar(320,0,639,240);
setfillstyle(1,green); bar(0,240,320,479);
setfillstyle(1,blue); bar(320,240,639,479);
Readln; CloseGraph;
end.

Natijaning ekrandagi ko‘rinishi:


155*. Ekranning to‘rtta burchagida eni 60 va bo‘yi 40 ga teng qizil rangli


to‘rtburchaklar chizuvchi dastur tuzing.

Yechim:
Ekranning o‘lchamlari 0..639x0..479 bo‘lgani uchun to‘g‘ri to‘rtburchaklar


diagonallari uchlari koordinatalari quyidagicha aniqlanadi: chap yuqori burchak-
dagi to‘g‘ri to‘rtburchakning diagonallari uchlari (0,0) va (60,40); o‘ng yuqori
burchakdagi to‘g‘ri to‘rtburchakning diagonallari uchlari (639–60,0)=(579,0) va
(639,40); chap quyi burchakdagi to‘g‘ri to‘rtburchakning diagonallari uchlari
(0,479–40)=(0,439) va (60,479); o‘ng quyi burchakdagi to‘g‘ri to‘rtburchakning
diagonallari uchlari (639–60,479–40)=(579,439) va (639,479).
To‘g‘ri to‘rtburchaklar chizish uchun Bar(X1,Y1,X2,Y2); chegarasi rangini
belgilash uchun SetColor(rang), ichini bo‘yash uchun SetFillStyle(usul,rang);
protsedurasidan foydalanish qulay.
Dasturi:
Uses graph;
Var
gd, gm:integer;
Begin
gd := 0; InitGraph(gd, gm, '');
setcolor(4); setfillstyle(1, red);
bar(0,0,60,40); bar(579,0,639,40);
bar(0,439,60,479);
bar(579,439,639,479);
Readln; CloseGraph;
end.

Natijaning ekrandagi ko‘rinishi:





111
156*. Ekranni teng 4 bo‘lakka bo‘lib, har birini markazida radiusi kiritilgan A so-


niga teng chegaralari va ichi turli rangli doiralar chizing.
157*. Mustaqillik maydonidagi O‘zbekiston xaritasi aks ettirilgan monument
rasmini xaritasiz chizing.
158*. Mustaqillik maydonidagi O‘zbekiston xaritasi aks ettirilgan monument
rasmini xaritasiz chizing va ichiga “O‘ZBEKISTON RESPUBLIKASI” matnini
tagma-tag yozing.

Yechim:
Chiziq rangi SetColor(Rang) protsedurasi, formasi va qalinligi SetLin-



Download 372.89 Kb.

Do'stlaringiz bilan baham:
1   ...   60   61   62   63   64   65   66   67   68




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