Məktəblərimizin informasiya-kommunikasiya
texnologiyaları ilə təmin olunması informatika
fənninin öyrənilməsinə münasibətin dəyişməsini,
yeni proqram və dərsliklər hazırlanmasını, I
siniflərdən fənnin kurikulum əsasında
hazırlanmış dərsliklə tədrisinə başlanmasını, bu
isə onun tədrisi metodikası sahəsində ciddi
axtarışların aparılmasını zəruri etmişdir.
Biz pascalda qrafikqurma operatorlarının tədrisi
ilə bağlı qarşıya çıxan çətinliklərin aradan
qaldırılması üçün müəllimlərin bu dərsləri
aşağıdakı alqoritm əsasında öyrətmələrini vacib
hesab edirik:
1. Pascalda mətn rejimindən qrafik rejimə
keçidin şagirdlər üçün aydınlaşdırılması;
2. Qrafik rejimdə koordinat sisteminin ekranda
necə yaradıldığının anlaşılması;
3. Pascalda müxtəlif fonlu qrafik ekran almağın
və qrafik primitivlərin rənginin təyin edilməsi;
4. Pascalda qrafik primitivlər və onları qurmaq
üçün istifadə olunan zəruri funksiya və
prosedurların mənimsənilməsi.
Qeyd edək ki, TurboPascalın IV versiyasından
başlayaraq fərdi kompüterlərdə özündə bir sıra
xüsusi qrafik prosedur və funksiyaları
birləşdirən Graph modulundan istifadə olunur.
Kompüterdə tb.exe faylı icra olunan kimi monitor
mətn rejimində işə hazır olur. Qrafik təsvirləri
almaq üçün proqramın əvvəlində Uses Graph modulu
daxil edilir.
Kompüterdə qrafik rejimlər bir-birindən ekranın
sətir və sütunlarında olan piksellərin sayına və
rənginə görə fərqlənirlər.
Monitoru qrafik rejimə hazırlamaq üçün
InitGraph (Driver, Mode:integer; Path:string)
prosedurundan istifadə olunur.
Burada, Driver - tam tipli dəyişəni qrafik
drayverin tipini bildirən qrafik drayveri əməli
yaddaşa yükləyərək adapteri qrafik iş rejiminə
hazırlayır. Mode - tam tipli dəyişəni qrafik
drayverin iş rejimini, Path isə String tipli
ifadə olub qrafik drayverin axtarış marşrutunu
təyin edir.
Kompüterin qrafik imkanları məlum olduqda qrafik
adapteri seçmək və proqramı yazmaq çox asandır.
Lakin qrafik drayver məlum olmadıqda ən sadə yol
adapterin tipinin və rejimin avtomatik
seçilməsini təmin etmək üçün Driver dəyişəninə
Detect qiymətinin mənsub edilməsidir. Daha dəqiq,
proqramın tərtibi zamanı monitorun tipindən
asılı olmayaraq qrafik drayver, rejim və
drayverin axtarış marşrutu aşağıdakı mətnlə
təyin edilir:
Driver:= Detect;
InitGraph (Driver, Mode, Sc:\tp\bgiT);
Proqramda bu sətirlər monitorun ən yüksək
imkanlı qrafik rejim və rəng üçün hazırlanmasını
təmin edir.
Beləliklə, pascalda qrafik təsvirlərin alınması
üçün aşağıda tipik proqram nümunəsi verilir:
Program qrafik_təsvirin_qurulması;
Uses Graph;
Var Driver, Mode : integer;
Begin
Driver:= Detect;
InitGraph (Driver, Mode, Sc:\tp\bgiT);
{operatorlar,...}
CloseGraph
End.
Closegraph proseduru qrafik rejimi bağlayır.
Qrafik rejimə keçdikdə monitorun ekranında
düzbucaqlı koordinat sistemi - qrafik ekran
formatlaşdırılır. Bu ekranın yuxarı sol küncü -
(0,0) nöqtəsi koordinat başlanğıcı qəbul edilir.
Koordinat sistemində ən sadə qrafik təsvir olan
nöqtə (x,y) şəklində, bir cüt ədədlə verilir.
Absis oxu soldan sağa, ordinat oxu yuxarıdan
aşağıya doğru yönəlir. Ekranda kiçik düzbucaqlı
şəklində təsvir olunub piksel adlanan hər bir
nöqtə x, y, r parametrləri ilə xarakterizə
edilir. Bu parametrlər, x (nöqtənin absisi) tam
ədəd olub [0..GetMaxX], y (nöqtənin ordinatı)
tam ədəd olub [0..GetMaxY] və r (pikselin rəngi)
tam ədəd olub [0..GetMaxColors] intervalında
təyin olunur.
GetMaxX, GetMaxY və GetMaxColors funksiyaları
cari qrafik ekranda nöqtənin koordinatlarının və
rənginin maksimal qiymətlərini bildirir. Qrafik
rejimin imkanlılıq səviyyəsindən asılı olaraq
onun sətir və sütunlar üzrə piksellərinin sayı
dəyişir. Bu anda işlədiyiniz monitora uyğun
parametrlərin qiymətləri aşağıdakı proqramla
təyin edilir:
Program piksellərin_və_rənglərin_sayı;
Uses graph;
Var driver, mode : integer;
Begin
driver:= detect;
initgraph (driver, mode, SC:\tp\bgiT);
writeln(GetMaxX,SxT,GetMaxY,SyT,GetMaxColors);
readln;
closegraph
End.
Fon və təsvirin rəngi. Rəngli monitorlarda
ekranın rəngini dəyişmək, yeni rəng təyin etmək
olar. Alınan rəng fonun rəngi adlanır.
Fonun rəngi SetBkColor(fr:word) proseduru ilə
təyin olunur.
Burada, fr parametri fonun rəngini təyin edən
tam tipli ifadə olub 0..15 qiymətlərini alır. Bu
qiymətlərə Black (qara), Blue (mavi), Green (yaşıl),
Cyan (firuzəyi), Red (qırmızı), Magenta (bənövşəyi),
Brown (qəhvəyi), LightGray (açıq-boz), DarkGray
(tünd-boz), LightBlue (açıq-mavi), LightGreen (açıq-yaşıl),
LightCyan (açıq-firuzəyi), LightRed (açıq-qırmızı),
LightMagenta (açıq-bənövşəyi), Yellow (sarı) və
White (ağ) rəngləri uyğun gəlir.
Qrafik rejimdə bu prosedur təyin olunmadıqda
qara rəngli ekran alınır.
Aşağıdakı proqramla müxtəlif fonlu ekranlar
almaq olar:
Program ekranın_fonu;
Uses graph;
Var driver, mode : integer;
fr : word;
Begin
driver:= detect;
initgraph (driver, mode, SC:\tp\bgiT);
writeln (Sfr-i daxil edinT);
setbkcolor (0);
readln (fr);
setbkcolor (fr);
readln;
closegraph
End.
Proqram icra olunduqda, fr-in daxil edilən
qiymətinə uyğun rəngli - fonlu ekran alınır.
Qrafik rejimdə SetColor(tr:word) proseduru
təsvirin rəngini təyin edir.
Burada, tr - təsvirin rəngini təyin edir, 0..15
qiymətlərini alır. tr=0 olduqda, təsvirin və
fonun rəngi eyni olduğu üçün o, ekranda görünmür.
Proqramda özündən sonra gələn təsvirlərin
rəngini dəyişən SetColor proseduru təyin
olunmadığı halda, təsvir ağ rəngdə alınır.
Qrafik ekran ClearDevice ilə silinir.
Ekranda qrafik təsviri düzbucaqlı (qrafik)
pəncərə daxilində vermək üçün
SetViewPort(x1,y1, x2,y2:integer;c:boolean);
prosedurundan istifadə olunur. Burada, (x1,y1)
və (x2,y2) nöqtələri uyğun olaraq düzbucaqlının
yuxarı sol və aşağı sağ künclərinin
koordinatlarıdır. c dəyişəni doğru (c=true)
qiymət aldıqda təsvir düzbucaqlının daxilində
qurulur, əks halda isə onun xaricinə çıxa bilər.
MoveTo (x,y:integer) proseduru ekranda qrafik
kursoru cari nöqtədən (x,y) nöqtəsinə gətirmək
üçün istifadə olunur.
MoveRel(Dx,Dy:integer) proseduru kursorun (x,y)
nöqtəsindən (x+Dx, y+Dy) nöqtəsinə gətirilməsini
həyata keçirir.
Həndəsi fiqurları nöqtələrlə qurmaq olar.
Mürəkkəb həndəsi fiqurları nöqtələrin köməyi ilə
qurmaq isə xeyli çətinliklər yaradır. Pascalda
təsviri qurulan fiqurlar qrafik primitivlər
adlanır. Aşağıda Graph modulunun prosedur və
funksiyaları ilə əsas qrafik primitivlərin (düz
xətt, çevrə, ellips, düzbucaqlı və s.)
təsvirlərinin qurulması verilir:
PutPixel (x,y:integer;rəng:word) proseduru (x,y)
nöqtəsini ekranda rəng dəyişəninin 0..15
qiymətinə uyğun rənglə təsvir edir. Prosedurdan
əvvəl nöqtənin koordinatları və rəngi təsvir
olunur.
Misal 1. Qırmızı rəngli (150,250) nöqtəsini
təsvir edin.
Aşağıdakı proqram icra olunduqda ağ fonlu
ekranda qırmızı rəngli nöqtə təsviri alınır:
Program nöqtənin_qurulması;
Uses graph;
Var driver, mode : integer;
x, y : integer;
Begin
driver:= detect;
initgraph (driver, mode, SC:\tp\bgiT);
x:= 150; y:= 250;
setbkcolor (white);
putpixel (x, y, red);
readln;
closegraph
End.
Line(x1,y1,x2,y2:integer) proseduru (x1,y1) və
(x2, y2) nöqtələrini birləşdirən parça çəkir.
Line prosedurundan əvvəl SetColor proseduru ilə
xəttin rəngi təyin edilir. Xəttin rəngi daxil
edilmədikdə o, ağ rəngdə görünür.
Misal 2. Ekranda başlanğıc və son nöqtələri
uyğun olaraq (50,120) və (250,175) olan mavi
rəngli parça qurun.
Aşağıdakı proqram qara fonlu ekranda mavi rəngli
parça təsvir edir:
Program düz_xəttin_qurulması;
Uses graph;
Var driver, mode : integer;
x1, y1, x2, y2 : integer;
Begin
driver:= detect;
initgraph (driver, mode, SC:\tp\bgiT);
x1:= 50; y1:= 120;
x2:= 250; y2:= 175;
setbkcolor (black);
setcolor (blue);
line (x1,y1, x2,y2);
readln;
closegraph
End.
LineTo(x,y:integer) proseduru kursorun dayandığı
cari nöqtə ilə (x,y) nöqtəsini birləşdirən xətt
çəkir.
Misal 3. Təpələri (150,120) və (250,175)
nöqtələrində olan parçanın son nöqtəsini
(450,350) nöqtəsi ilə birləşdirən mavi rəngli
parça çəkin.
Proqramı aşağıdakı şəkildə yazmaq olar:
Program sınıq_xəttin_qurulması;
Uses graph;
Var driver, mode : integer;
x1, y1, x2, y2, x3, y3 : integer;
Begin
driver:= detect;
initgraph (driver, mode, SC:\tp\bgiT);
x1:= 50; x2:= 250; x3:= 450;
y1:= 120; y2:= 175; y3:= 350;
setbkcolor (black);
setcolor (blue); line (x1,y1, x2,y2);
moveto (x2, y2);
setcolor (green); lineto (x3, y3);
readln;
closegraph
End.
Proqram icra olunan kimi ekranda sınıq xətt -
bucaq təsviri alınır.
LineRel (Dx,Dy:integer) operatoru cari (kursorun
dayandığı) (x,y) nöqtəsini onun koordinatlarına
uyğun olaraq Dx və Dy artımları verməklə alınan
(x,y, x+Dx,y+Dy) nöqtəsi ilə birləşdirir. Bu
operator Line (x,y, x+Dx,y+Dy) operatoru ilə
eynigüclüdür.
Misal 4. O(320,240) nöqtəsi ilə uyğun
koordinatları üzrə artımları Dx:=100, Dy:=125
olan nöqtəni birləşdirən parça çəkin.
Proqramı aşağıdakı şəkildə tərtib edək:
Program parçanın_qurulması;
Uses graph;
Var driver, mode : integer;
x, y : integer;
Begin
driver:= detect;
initgraph (driver, mode, SC:\tp\bgiT);
x:= 320; y:= 240;
setcolor (green);
moveto (x, y)
linerel (100, 125);
readln;
closegraph
End.
Bu proqrama linerel operatorundan əvvəl fonun
rəngini təyin edən setbkcolor(rəng) operatorunu
daxil etdikdə, rəng fonlu ekranda yaşıl rəngli
parça görünür.
Restangle(x1,y1,x2,y2:integer) proseduru cari
rəng və xəttin tipindən asılı olaraq yuxarı sol
təpəsi (x1,y1) və aşağı sağ təpəsi (x2,y2)
nöqtələrində olan düzbucaqlı təsviri qurur.
Misal 5. Yuxarı sol küncü (160,120) və aşağı sağ
küncü (320,240) nöqtələrində olan düzbucaqlı
çəkin.
Bu proqram qara rəngli fonda sarı rəngli
düzbucaqlı təsvir edir:
Program grap_düzbucaqlı;
Uses graph;
Var driver, mode : integer;
x1,y1, x2,y2 : integer;
Begin
driver:= detect;
initgraph (driver, mode, SC:\tp\bgiT);
x1:= 160; y1:= 120;
x2:= 320; y2:= 240;
setcolor (yellow);
rectangle (x1,y1, x2,y2);
readln;
closegraph
End.
Bar (x1,y1, x2,y2:integer) proseduru yuxarı sol
və aşağı sağ təpələri uyğun olaraq (x1,y1) və
(x2,y2) nöqtələrində olan, daxili oblastı
rənglənmiş düzbucaqlı çəkir.
Rəngin tipi SetFillStyle (rt, rəng) proseduru
ilə təyin edilir və düzbucaqlının sərhədi
xətlərlə əhatə olunmur.
Burada, rt - rəngin tipini, rəng - daxili
oblastın rəngini təyin edir. Tamam rənglənmə rt
ilə (0 qiymətinə uyğun) verilir.
Circle(x,y:integer;R:word) proseduru mərkəzi (x,y)
nöqtəsində olan R radiuslu çevrə çəkir.
R radiusu absis və ordinat oxları üzrə
piksellərin sayını bildirir.
Misal 6. Ekranda mərkəzi (320,240) nöqtəsində
olan R=50 radiuslu çevrə təsviri qurun.
Proqramı aşağıdakı şəkildə yazmaq olar:
Program çevrənin_qurulması;
Uses graph;
Var driver, mode : integer;
x, y, r : integer;
Begin
driver:= detect;
initgraph (driver, mode, SC:\tp\bgiT);
x:= 320; y:= 240; r:= 50;
setcolor (red);
circle (x, y, r);
readln;
closegraph
End.
Proqram icra edilən kimi qara fonlu ekranda (susmaya
görə) qırmızı rəngli çevrə görünür.
Misal 6-nın proqramında əlavə olaraq n tam tipli
dəyişənini təyin edib, Circle(x, y, r)
operatorunu Circle(x, y, r*n) ilə əvəz etməklə,
ondan əvvəl For n:=1 To 10 Do operatorunu əlavə
etdikdə ekranda konsentrik çevrələr təsvir
olunur.
Arc(x,y:integer;qdbq,qdsq, R:word) proseduru
mərkəzi (x, y) nöqtəsində, qövsünün dərəcələrlə
başlanğıc və son qiymətləri uyğun olaraq qdbq və
qdsq olan R radiuslu çevrə qövsü təsvir edir.
Bu zaman bucaqlar absis oxunun müsbət
istiqamətinə nəzərən saat əqrəbi hərəkətinin
əksi istiqamətində hesablanılır.
Misal 7. Ekranda mərkəzi (320,240) nöqtəsində,
radiusu 100, qdbq:= 00 və qdbq:=900 olan
çevrənin birinci rübünə uyğun qövs qurun.
Verilənlərə əsasən proqramı aşağıdakı şəkildə
yazmaq olar:
Program çevrə_qövsünün_qurulması;
Uses graph;
Var driver, mode: integer;
x, y, r, qdbq, qdsq: integer;
Begin
driver:= detect;
initgraph (driver, mode, SC:\tp\bgiT);
x:= 320; y:= 240; r:= 100;
qdbq:= 0; qdsq:= 90;
setcolor (brown);
arc (x, y, qdbq, qdsq, r);
readln;
closegraph
End.
Bu proqramda qdsq:=3600 olduqda, Arc funksiyası
Circle funksiyası kimi işləyir və çevrə təsviri
qurur.
Ellipse(x,y:integer;qdbq,qdsq,xR,yR:word)
proseduru mərkəzi (x,y) nöqtəsində olub qövsünün
dərəcə ilə başlanğıc qiyməti qdbq, son qiyməti
qdsq, üfüqi və şaquli radiusları uyğun olaraq
xR, yR olan ellips qövsü qurur.
FillEllipse(x,y:integer;xR,yR:word) proseduru
mərkəzi (x,y) nöqtəsində olub üfüqi və şaquli
radiusları uyğun olaraq xR, yR olan daxili
oblastı rənglənmiş ellips təsviri qurur.
Sector(x,y:integer;qdbq,qdsq,xR,yR:word)
proseduru mərkəzi (x,y) nöqtəsində olub qövsünün
dərəcə ilə başlanğıc qiyməti qdbq, son qiyməti
qdsq, üfüqi və şaquli radiusları uyğun olaraq
xR, yR olan ellips sektoru qurur.
PieSlice(x,y : integer; qdbq,qdsq, R : word)
proseduru mərkəzi (x,y) nöqtəsində, qövsünün
dərəcələrlə başlanğıc və son qiymətləri uyğun
olaraq qdbq və qdsq olan R radiuslu dairə
sektoru qurur və onu cari rənglə rəngləyir.
Bar3D(x1,y1,x2,y2:integer;d:word;a:boolean)
proseduru yuxarı sol arxa və aşağı sağ ön
üzlərinin təpə nöqtələri uyğun olaraq (x1,y1) və
(x2,y2) olan ön üzü rənglənmiş üçölçülü
düzbucaqlı (paralelepiped) təsviri qurur.
Burada, d - yan üzün üfüqi istiqamətdə eni
(piksellərin sayı) olub, əksər hallarda onun
qiyməti d:= (x2-x1) div 4 qəbul edilir;
a - yuxarı üzün görünüb-görünməməsini təyin edir
və a=true olduqda üz görünür, əks halda isə
görünmür.
DrawPoly (n:word; var ma) proseduru təpə
nöqtələrinin sayı n olan çoxbucaqlı qurur.
Burada, ma - çoxbucaqlının təpə nöqtələrinin
koordinatlarından ibarət massivin adını
bildirir.
Misal 8. Təpələri (75,0) (100,50), (150,75) və
(75,0) nöqtələrində olan dördbucaqlı qurun.
Proqram aşağıda verilir:
Program dördbucaqlının_qurulması;
Uses graph;
Const a: array[1..10]of
integer=(75,0,100,50,150,
200,125,75,75,0);
Var driver, mode : integer;
Begin
driver:= detect;
initgraph (driver, mode, SC:\tp\bgiT);
setfillstyle (1, 2);
Drawpoly (5, a);
readln;
closegraph
End.
FillPoly (n, ma) proseduru DrawPoly proseduru
ilə qurulmuş çoxbucaqlının daxili oblastını həm
də rəngləyir.
GetPixel (x,y:integer) proseduru ilə qapalı
oblastın daxilində yerləşən (x,y) nöqtəsinin
rəngi müəyyən edilir.
Gülşən HACIYEVA,
Bakıdakı 99 nömrəli
məktəbin informatika müəllimi |