Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МетодАлгКП.doc
Скачиваний:
109
Добавлен:
18.02.2016
Размер:
2.27 Mб
Скачать

9. Файлды жабу процедурасы қандай?

Ұсынылатын әдебиеттер: 1, 4, 7

Практикалық жұмыс №14

Тақырыбы: Turbo Pascal тілінде негізгі графикалық объектілерді салу алгоритмдерін программалау

Жұмыс мақсаты: Негізгі графикалық объектілерді салу операторларымен танысу жəне оларды бағдарламалауда қолдана білуге дағдылану

Жұмыстың орындалу тəртібі:

  • Теориялық мəліметтермен танысу.

  • Тапсырмалар орындау.

  • Бақылау сұрақтарына жауап беру.

  • Орындалған жұмыс туралы жазбаша есеп беру. Есепте жұмыс тақырыбы, мақсаты, листингі болуы қажет.

Жұмысты орындауға əдістемелік нұсқаулар

Компьютерлерде негізгі екі экран режимінің жұмысы – символдық жəне графикалық экран режимдері пайдаланылады. Графикалық экранда нүкте координатасы екі бүтін санмен анықталынады,яғни Х осінің координатасы сол жақ жоғарғы бұрышынан басталып, оңға қарай , У осінің координатасы экранның сол жоғарғы бұрышынан басталып төмен қарай өсіп отырады.

Түсті тағайындау үшін TEXTCOLOR, TEXTBACKGROUND процедуралары пайдаланылады

0 –қара 4 – қызыл 8 – қою сұр 12 – ал қызыл

1-көк 5 – таңқурай түс 9 – көгілдір 13 – ашық таңқурай түс

2 – қою жасыл 6 – қоңыр 10 – жасыл 14 – сары

3 – аспан көк 7 – ашық сұр 11 – ашық көк 15-ақ

Экранды графикалық режимге ауыстыру үшін InitGraph операторы қолданылады. Бұл оператордың орындалуы нəтижесінде экран тазарып, түрлі-түсті режимге ауысады.Турбо Пасқальдың версияларында бұл операторлардың орындалуы өзгеше болып келеді. Графикалық режимді автоматты түрде тағайындау үшін Graphdriver айнымалысы Detect мəнін қабылдауы керек

14.1 Негізгі түсініктер

14.1.1 Graph модулінің жалпы сипаттамасы

Турбо Паскаль компиляторының 4.0 нұсқасынан бастап, оның құрамына Graph – графикалық ішкі программалар кітапханасы қосылған болатын. Кітапханада графикалық экранды басқаруға арналған 50-ден астам əртүрлі процедуралар мен функциялар бар. Кітапханамен танысу жеңіл болуы үшін мұндағы процедуралар мен функциялар функционалдық қызметтері бойынша топтастырылған.

      1. Графикалық режимге көшу жəне мəтіндік режимге қайтып оралу

Компьютер іске қосылғаннан кейінге стандартты жəне Турбо Паскаль ортасынан программа жіберуге дейінгі қалып - күйі экранның мəтіндік режиміне сəйкес келеді. Сондықтан, компьютердің графикалық құралдарын қолданатын кез келген программа, алдымен дисплей адаптерінің графикалық режим жұмысын іске қосуы керек. Программа жұмысын аяқтағаннан кейін компьютер мəтіндік режимге қайтып оралады.

14.1.2 Сызықтармен, нүктелермен жəне фигуралармен жұмыс істеу

Көптеген графикалық процедуралар мен функциялар экран курсорының ағымдағы позициясын қолданады. Графикалық режимнің экран курсорының мəтіндік редактор курсорынан ерекшелігі, ол экранда көрінбейді. Экран көрсеткішінің позициясы кез келген экрандағы координата тəрізді сол жақ жоғарғы бұрышқа байланысты беріледі. Сол жақ жоғарғы бұрыштың координатасы – 0,0. Сонымен, экранның көлденең координатасы солдан оңға, ал тік координатасы – жоғарыдан төмен қарай өседі.

GetMaxX жəне GetMaxY функциялары экранның ағымдағы режимнің көлденең жəне тік максимальды координаталары жазылған Word типті мəнді қайтарады. Мысалы:

Uses Graph;

var

a,b: Integer;

begin

a:= Detect; InitGraph(a, b,’’); WnteLn(GetMaxX, GetMaxY:5); ReadLn;

CloseGraph end.

GetX жəне GetY функциялары экран курсорының ағымдағы

көлденең жəне тік координаталары жазылған integer типті мəнді қайтарады. Координаталар терезенің сол жақ жоғарғы бұрышына байланысты анықталады. Егер мəлімет шығарылатын терезе орнатылмаса, онда координаталар экранның сол жақ жоғарғы бұрышынан бастап есептеледі.

SetViewPort процедурасы графикалық экранда төртбұрышты терезе орнатады. Процедура тақырыбы:

Procedure SetViewPort(XI,Y1,X2,Y2: Integer; ClipOn: Boolean);

мұндағы X1... Y2 – терезенің сол жақ жоғарғы (X1, Y1) жəне оң жақ төменгі (X2, Y2) бұрыштарының координаталары; ClipOn

– экрандағы бейненің кішіреймейтін элементінің “қиылатын” бөлігін анықтайтын Boolean типті өрнек.

Терезе координатасы əр уақытта экранның сол жақ жоғарғы бұрышына байланысты анықталады. Егер ClipOn параметрінің мəні True болса, бейненің терезе шекарасына симайтын элементтері қиып тасталынады, кері жағдайда терезе шекарасы ескерілмейді. Бұл параметрді басқару үшін, модульде арнайы тұрақтыларды қолдануға болады:

const

ClipOn = True;{Қиып тастауды қосу} ClipOff = False; {Қиып тастауды қоспау}

Келесі мысал СlipОn параметрінің қызметін көрсетеді. Программа СlipОn параметрінің мəні əртүрлі, екі тікбұрышты терезе жəне олардың ішіне бірнеше дөңгелек салады. Көрнекі болуы үшін терезелер жақтауларға алынады (14.1-сурет).

Uses Graph,CRT;

var

x,y,e: Integer;

x11, y11, x12, y12, {1-ші терезе координатасы}

x21, x22, {2-ші терезенің сол жақ жоғарғы бұрышы}

R, {Бастапқы радиус} k: Integer;

begin

DirectVideo:=False; {CRT модулінде бейнежадыға тікелей қол жеткізуді алып тастаймыз}

{Графикалық режимді іске қосамыз}

х:= Detect; InitGraph(x, у, ' ');

{Нəтижені тексереміз}

е:= GraphResult;

if e <> grOk then

WnteLn (GraphErrorMsg (e)) {Қате}

else

begin {Қате жоқ}

{Экран мүмкіндіктеріне байланысты координаталарды есептейміз}

x11:=

GetMaxX

div

60;

х12:=

GetMaxX

div

3;

y11:=

GetMaxY

div

4;

y12:=

2*y11;

R:= (x12-x11) div 4;

x21:= x12*2;

x22:= x21+x12-x11;

{Тезезе саламыз}

WriteLn('ClipOn:':10,'ClipOff:':40); Rectangle(x11, y11, x12, y12); Rectangle(x21, y11, x22, y12);

{1-терезені белгілеп, оның ішіне төрт дөңгелек саламыз}

ClipOn);

SetViewPort{x11, y11, x12, y12,

for k := 1 to 4 do

Circle(0,y11,R*k) ;

{2-терезені белгілеп, оның ішіне дөңгелек саламыз}

ClipOff);

SetViewPort(x21, y11, x22, y12,

for k := 1 to 4 do

Circle(0,y11,R*k);

{кез келген перненің басылуын күтеміз}

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

end.

End

GetViewSettings процедурасы ағымдағы графикалық терезенің координатасы мен қиып тастау белгісін қайтарады. Процедура тақырыбы:

Procedure GetViewSettings(var ViewInfo: ViewPortType);

мұндағы Viewlnfo – ViewPortType типті айнымалы. Бұл тип Graph модулінде төмендегідей анықталған:

type

ViewPortType = record

xl,yl,x2,y2: Integer; {Терезе координатасы}

Clip: Boolean {Қиып тастау белгісі}

end;

MoveTo процедурасы курсордың жаңа орнын тағайындайды. Процедура тақырыбы:

Procedure MoveTo(X,Y: Integer);

мұндағы X, Y – курсордың, сəйкесінше, жаңа көлденең жəне тік координаталары.

Сурет 14.1. Терезедегі бейнелердің қиындылары

MoveRel процедурасы курсордың жаңа орнын салыстырмалы координаталар арқылы тағайындайды. Процедура тақырыбы:

Procedure MoveRel(DX, DY: Integer);

мұндағы DX, DY – курсордың, сəйкесінше, жаңа көлденең жəне тік координаталарының өсімшесі.

Өсімше курсордың процедураны шақыруға дейін тұрған орнына байланысты беріледі.

ClearDevice процедурасы графикалық экранды тазалайды. Процедура шақырылғаннан кейін курсор экранның сол жақ бұрышына орналасады, ал экранның өзі SetBkColor процедурасында анықталған фон түсіне боялады. Процедура тақырыбы:

Procedure ClearDevice;

ClearViewPort процедурасы графикалық терезені тазалайды, ал егер осы уақытқа дейін терезе анықталмаса, онда экранды тазалайды. Терезе тазаланғанда, ол ағымдағы палитраның 0 нөміріне боялады. Курсор сол жақ жоғарғы бұрышқа орналасады. Процедура тақырыбы:

Procedure ClearViewPort;

Келесі мысалда экранда терезе салынады да, ол кездейсоқ дөңгелектермен толтырылады (14.2-сурет). Кез келген пернені басқан кезде терезе тазаланады. Программадан шығу үшін Enter пернесін басыңыз.

Uses CRT,Graph;

var

x1,y1,x2,y2,Err: Integer;

begin

{Графикалық режимді іске қосамыз}

xl := Detect; InitGraph(xl,x2,''); Err:= GraphResult;

if ErrOgrOk then

WriteLn (GraphErrorMsg(Err))

else begin

{Экран мүмкіндігіне байланысты терезе координатасын анықтаймыз}

x1:= GetMaxX div 4; y1:= GetMaxY div 4; x2:= *x1;

y2:= 3*y1; {Терезе саламыз} Rectangle(x1,y1,x2,y2); SetViewPort(xl+l,yl+l,x2-l,y2- 1,ClipOn);

{Терезені кездейсоқ дөңгелектермен толтырамыз}

repeat

Circle (Random (GetMaxX)), Random

(GetMaxX),

Random (GetMaxX div 5));

until KeyPressed; {Терезені тазалап, Enter пернесінің басылуын күтеміз}

end.

end

ClearViewPort;

OutTextXY (0,0, 'Press Enter …' ) ReadLn

CloseGraph

GetAspectRatio процедурасы экран жақтауларының қатынасын бағалауға мүмкіндік беретін екі санды қайтарады. Процедура тақырыбы:

Procedure GetAspectRatio(var X,Y: Word);

Сурет 14.2. Кездейсоқ шеңберлер жиыны

мұндағы X, Y – Word типті айнымалылар. Бұл айнымалыларға қайтарылатын мəндер, графикалық экран жақтауларының қатынасын пикселмен есептеуге мүмкіндік береді. Осы айнымалылар арқылы табылған коэффициентті дөңгелек, квадрат, т.с.с. дұрыс геометриялық фигураларды салуда қолдануға болады. Мысалы, егер тік жақтауы L пикселге тең квадрат салу керек болса, мынадай операторларды қолдану қажет:

GetAspectRatio (Xasp, Yasp);

Rectangle(x1, y1, x1+L*round (Yasp/Xasp), y1+L);

Ал егер L квадраттың көлденең ұзындығын анықтайтын болса, онда мынадай операторды қолданамыз:

Rectangle(x1,y1,x1+L,y1+L*round(Xasp/Yasp));

SetAspectRatio процедурасы графикалық экран жақтауларының масштабтық қатынас коэффициентін анықтайды. Процедура тақырыбы:

Procedure SetAspectRatio(X,Y: Word);

мұндағы X, Y – жақтаулардың тағайындалатын қатынасы.

ТАПСЫРМАЛАР

  1. Автомобиль суретiн салыңыз.

  2. Роботтың суретiн салыңыз.

  3. Дөңгелек жəне эллипс салу процедураларының көмегiмен түрлi тустi ромашка гулiн салыңыз.

  4. Ішiне үшбұрыш, квадрат, жұлдыз салынған үш шеңбер салыңыз. Фигуралардың түстерi əр турлi болсын.

Бақылау сұрақтар

  1. Графикалық процедуралар мен функциялар кiтапханасы қалай аталады?

  2. Графикалық режимдi қалай iске қосамыз?

  3. Графикалық режимнен қалай шығамыз?

  4. Кесiндi сызу параметрлерi қалай өзгередi?

  5. Кесiндi сызу процедурасын сипаттацыз.

  6. Дөңгелек, дөңгелек доғасын жəне эллипс доғасын салу процедураларын сипаттаңыз.

  7. Тiктөртбұрыш салу процедурасын сипаттаңыз.

  8. Ағымдағы түстi жəне фон түсiн өзгерту процедурасын сипаттаңыз.

  9. Экрандағы нүкте тусiн қалай өзгертуге болады.

Ұсынылатын әдебиеттер: 1, 4, 7