Informatika-9. 40- dars.
Mavzu: Paskalda ekranni grafik holatga o'tkazish
Maqsad:
1) ta’limiy: O`quvchilarga Paskalda ekranni grafik holatga o'tkazish operatorlari haqida ma’lumot berish;
2) tarbiyaviy: O`quvchilarga estetik va ekologik tarbiya berish;
3) rivojlantiruvchi: O`quvchilarning dasturlash ko`nikmalarini rivojlantirish.
DTS: Paskalda ekranni grafik holatga o'tkazish va undan chiqish operatorlarini, ekranda nuqta va kesma chizish operatorlarnini bilsh.
Darsni borishi:
I. Tashkiliy davr
1) salomlashish;
2) davomatni aniqlash.
II. Takrorlash
Concat funksiyasining vazifasi nimadan iborat? Misollar keltiring.
Qaysi funksiya satr uzunligini aniqlaydi? Misollar keltiring.
Pos funksiyasi qanday vazifani bajaradi? Pos funksiyasining qiymati qachon nolga teng bo 'ladi?
Copy funksiyasi nima uchun qo'llaniladi?
Copy funksiyasining qiymati sonli bo 'lishi mumkinmi?
Paskalda satming qismini o'chiradigan qanday protsedura bor?
Paskalda berilgan satr ichiga boshqa satrni joylashtirishning imkoni bormi?
Sonli miqdorni satrli miqdorga о 'tkazib bo 'ladimi?
Paskalda ixtiyoriy belgili yoki satrli miqdorni sonli miqdorga о 'tkazib bo 'ladimi?
Ord funksiyasining vazifasini aytib bering.
Chr funksiyasi qanday vazifani bajaradi?
III. Yangi mavzuni o`rgansih.
Hozirgacha biz kompyuter ekraniga faqat matnli axborotni chiqarish bilan tanishdik. Ammo kompyuter ekranida turli rasmlar ham hosil qilish mumkin. Buning uchun Paskalning Graph (graf) modulida nuqta, to‘g‘ri chiziq, to‘g‘ri to‘rtburchak, aylana kabi bir qancha shakllarni chizishga mo‘ljallangan operatorlar mavjud.
Shakl chizish operatorlaridan foydalanish uchun dastur boshida Uses Graph; ko‘rsatmasi beriladi. Bu ko’rsatma uning tarkibidagi operator va funksiyalardan foydalanish imkoniyatini beradi, xalos. Mazkur operatorlarning ishlashi uchun esa, ekran grafik holatga o‘tkazilishi zarur.
G
rafik holatda kompyuter ekrani mayda nuqta (piksel) lardan tashkil topadi. Grafik holatda ham matnli holatdagi kabi yurgich mavjud bo‘lib, u nuqtadan iborat. Ekranda hosil bo‘ladigan barcha chizmalar yurgichning ekranda iz qoldirib yoki iz qoldirmasdan siljishi natijasida hosil bo‘ladi. Yurgichning ekranda turgan o‘rni uning koordinatasi bilan aniqlanadi. Koordinata boshi bo’lgan (0,0) nuqtasi ekranning chap yuqori burchagida joylashgan. Ekran grafik holatga o‘tkazilganda yurgich koordinata boshida joylashadi. Koordinata o‘qlari X va Y koordinata boshidan mos ravishda o‘ngga va pastga qarab yo‘nalgan, ya’ni qiymatlar shu yo’nalishlarda o‘sib boradi. Ekranning yurgich turgan nuqtasi joriy nuqta deyiladi. Ekrandagi nuqtalar soni ko’pi bilan 640x480 ta (0..639x0..479) bo’ladi.
Ekranni grafik holatga o‘tkazish uchun Graph modulining InitGraph(GD,GM,); ko‘rsatmasidan foydalaniladi, bu yerda GD (GraphDriver) va GM (GraphMode) – butun sonli o‘zgaruvchilar. Ularning qiymati kompyuterning grafik imkoniyatlariga va tanlangan grafik holatga bog’liq. Agar GD:=0; (yoki GD:=Detect;) deb olinsa, dastur tomonidan eng samarali grafik holat avtomatik aniqlanadi. – grafik holatda ishlashni ta’minlovchi BGI kengaytmali maxsus fayl joylashgan BGI katalogi adresi bo’lib, zamonaviy kompyuterlarda EGAVGA.BGI fayli qo’llaniladi. Bu fayl joriy katalogda joylashgan bo’lsa o‘rnida bo’sh satr yoziladi.
Grafik holatdan chiqish, ya’ni matn holatiga qaytish uchun CloseGraph operatoridan foydalaniladi. Grafika bilan bog’liq dasturlar, asosan, quyidagi ko’rinishda bo’ladi:
Uses Graph;
Var Gd, Gm : Integer;
{Grafika bilan bog’liq masalaga mos o’zgaruvchilar tavsifi }
Begin
Gd := 0; { Grafik drayverni avtomatik ravishda aniqlash }
InitGraph(Gd,Gm, ‘‘); { Grafik holatga o‘tish }
{Grafika bilan bog’liq masala yechimi yoziladigan qism}
Readln; CloseGraph; { Grafik holatdan chiqish }
End.
Paskal tilida 16 xil rangdan foydalanish mumkin bo‘ladi. Bu ranglar 0 dan 15 gacha butun sonlar bilan kodlangan. Graph modulida har bir rang uchun maxsus o‘zgarmas (konstanta) ajratilgan bo’lib, ular matn holatida ishlatiladigan ranglar bilan bir xil (ekran bilan ishlash mavzusidagi ranglar jadvaliga qarang).
Graph modulida 80 ga yaqin operator va funksiyalar mavjud. Quyida ularning ba’zilari bilan tanishamiz.
PutPixel(X,Y,Rang) operatori ekranning (X,Y) koordinatali nuqtasini “Rang” parametri bilan aniqlangan rangga bo‘yaydi. Masalan, PutPixel(400,200,Red) operatori ekranning (400,200) koordinatasiga mos joyda qizil rangli nuqta joylashtiradi (yuqoridagi rasm).
GetPixel(X,Y) funksiyasi ekranning (X,Y) koordinatali nuqtasi qanday rangda ekanini aniqlaydi. Masalan, Rang – butun tipli o‘zgaruvchi bo‘lsa, Rang:= GetPixel(40,50); operatori bajarilgach Rang o‘zgaruvchi (40,50) koordinatali nuqta rangining qiymatiga teng bo‘ladi.
GetMaxX va GetMaxY funksiyalari mos ravishda ekranning gorizontal va vertikal yo‘nalishi bo‘yicha maksimal koordinatasini aniqlaydi. Bu funksiyalar kompyuterning grafik adapteri va ishlatiladigan grafik holatga bo‘g‘liq bo‘lmagan dasturlar tuzishda foydalidir.
1-misol. Nuqtalar yordamida ekranning (0,0) nuqtasini (639,479) nuqtasi bilan tutashtiruvchi qizil rangli kesma chizish dasturini tuzing.
Yechish. Quyidagicha butun o’zgaruvchilarni qiymati bilan olamiz: bx:=0; ox:= GetMaxX; (ox:=639; kabi olish mumkin). Tekshirib ko’rishingiz mumkin, [bx, ox] oraliqda y=[GetMaxY·x/GetMaxX] butun qiymatli chiziqli funksiyaning boshlang’ich qiymati 0 va oxirgi qiymati 479 bo’ladi (GetMaxY o’rniga 479 yozish ham mumkin). Endi parametrli takrorlash operatori yordamida tuzilgan quyidagi dastur misol yechimini beradi.
Uses Graph;
Var gd, gm:integer;
bx, y, ox: Integer; x: LongInt;
Begin
Gd := 0; InitGraph(Gd, Gm, ‘‘);
bx:=0; ox:= GetMaxX;
For x:= bx to ox do begin
y:= trunc(GetMaxY*x/GetMaxX); putpixel(x, y, red); end;
Readln; CloseGraph;
End.
Nima uchun x o’zgaruvchi LongInt turda olinganini o’ylab ko’ring!
2-misol. Nuqtalar yordamida ekran markazida R radiusli sariq rangli aylana chizish dasturini tuzing.
Y
echish. Ekran markazini aniqlaydigan butun o’zgaruvchilarni kiritib olamiz: markazX:=trunc(GetMaxX/2); markazY:=trunc(GetMaxY/2); (yoki markazX:=639; va markazY:=479). Matematikadan ma’lumki, ta’rif bo’yicha
va
. Bundan kelib chiqadiki, markazi (0,0) nuqtada bo’lgan R radiusli aylana nuqtalarini quyidagi formulalar juftligi orqali aniqlash mumkin: x = r·cos(), y = r·sin(), bunda burchak 0 dan 2 gacha o’zgaradi. Dasturda aylana nuqtalarini zichroq chizish uchun burchak o’zgarishini 0,01 qadam bilan olamiz. Shularga asosan quyidagi dasturni tuzamiz.
Uses Graph;
Var gd, gm:integer;
x, y, markazX, markazY: Integer; R, alfa: real;
Begin
Gd := 0; InitGraph(Gd, Gm, ‘‘);
Write(‘R= ‘); readln(R);
markazX:=trunc(GetMaxX/2); markazY:=trunc(GetMaxY/2); alfa:=0;
while alfa
x:= markazX +trunc(R*cos(alfa));
y:= markazY +trunc(R*sin(alfa));
putpixel(x, y, 14); alfa:= alfa+0.01;
end;
Readln; CloseGraph;
End.
3-misol. Ekran markazini koordinata boshi hisoblab nuqtalar yordamida x [–5, 5] oraliqda ko’k rangda y=x2 funksiya grafigini chizish dasturini tuzing.
Yechish. Bu vazifa quyidagicha hal etiladi:
uses Graph;
var gD,gm: Integer;
markazX, markazY: integer; x, y: real;
begin
gD := 0; InitGraph(gD, gm, ‘‘);
markazX:=trunc(getmaxx/2); markazY:=trunc(getmaxy/2); x:= –5;
while x
y:=x*x; putpixel(trunc(10*x+markazX), trunc(–5*y+markazY),blue);
x:=x+0.01; end;
Readln; CloseGraph;
end.
Dasturda masshtabni kattalashtirish uchun x ni 10 ga, y ni 5 ga ko’paytirdik. Parabola shoxchalari quyidan yuqoriga yo’nalgan bo’lishi uchun “–” ishora qo’yilgan. Masshtabni kattalashtirishni va ishorani olib tashlab dasturni ishlatib ko’rishni o’zingizga havola etamiz.
IV. Mustahkamlash uchun savol va topshiriqlar
Paskalning Graph moduli qanday maqsadda ishlatiladi?
Grafik holatda ekrandagi nuqtaning o‘rni nimasi bilan aniqlanadi?
Ekranni grafik holatga o‘tkazish uchun Paskalda qanday ko‘rsatma beriladi?
Grafik holatdan “chiqish” uchun qaysi operator qo‘llaniladi?
PutPixel, GetPixel, GetMaxX va GetMaxY funksiyalarining vazifasini aytib bering.
Mashqlar
1. Ekranni grafik holatga o‘tkazuvchi va Enter klavishi bosilganda yana matn holatiga qaytaruvchi dastur tuzing.
1. Ekranni grafik holatga o'tkazuvchi va klavishi bosilganda yana matnli holatga qaytaruvchi dastur tuzing.
Program grafika;
Uses graph;
Var gd, gm: integer;
Begin
GD:=0; Initgraph(GD,GM,’’);
Readln;
Closegraph;
End.
2. Ekranning to‘rtta burchagida sariq rangli nuqta hosil qiluvchi dastur tuzing.
program nuqtalar;
uses wincrt, graph;
var gd,gm: integer;
begin
gd:=0; initgraph(gd,gm,'');
{setcolor(10);}
putpixel(10,10,14); putpixel(10,490,14);
putpixel(590,10,14); putpixel(590,490,14);
readln;
closegraph;
end.
3. Nuqtalar yordamida ekranni o‘rtasidan bo‘luvchi gorizontal chiziq hosil qiling.
program nuqtalar;
uses wincrt, graph;
var gd,gm,x: integer;
begin
gd:=0; initgraph(gd,gm,'');
for x:=1 to 600 do
putpixel(x,300,14);
readln;
closegraph;
end.
4. Random funksiyasidan foydalanib turli rangli nuqtalarni hosil qilish dasturini tuzing.
program nuqtalar;
uses wincrt, graph;
var gd,gm,i,x,y,rang: integer;
begin
randomize;
gd:=0; initgraph(gd,gm,'');
for i:=1 to 50 do
begin
x:=random(600); y:=random(500);
putpixel(x,y,14);
end;
readln;
closegraph;
end.
V. Uyga vazifa
Mavzuni o`rganish. 2-mashq.