Graph модулін қолдану


Жұмыс түрі: Курстық жұмыс
Тегін: Антиплагиат
Көлемі: 25 бет
Таңдаулыға:
Жоспар
1 Кіріспе . . 3
- Негізгі бөлімGraph модулін қолдану . . . . 5Фигураларды сызу . . . ………. 9Графикалық режимде текст жазу . . . . . 13Координаттар және терезелер . . . . . . 19
2. 5. Мультипликация . . .
2. 6 Турбо Паскальдың қосымша интерфейсі
Қорытынды . 29
Пайдаланылған әдебиеттер тізімі 30
Кіріспе
Қазіргі кездегі Турбо Паскальдің 6, 7 версияларындағы графикалық режимде жұмыс істеу өте ұқыптылықты, еңбікті талап етеді. Себебі өмірдің талабына сай, тілдің графикалық мүмкіндіктері тез дамып компьютерлік графика деген өз алдына үлкен сала пайда болды. Компьютерлік графика - кез-келген материалдық обьектінің бір өлшемді түрінен көп өлшемді түріне өзгерте алатын мүмкіндіктерін айтады. Бұл тақырыпта графикалық мүмкіндіктермен айтады. Бұл тақырыпта графикалық мүмкіндіктермен алғашқы таныстыру қарастырылады.
Графикалық режимдегі координаталар ситемасы текстік режимдегі системамен сәйкес келеді. Текстік режимде экранға 80 бағаннан, 25 қатар (80х25) шығады. Графикалық режим нүктелерді әр түрлі мүмкіндіктермен (320х200), (640, 480) т. б. шығарады.
Дисплей жұмысын басқару платасы адаптер делінеді. Адаптерде орналасқан видеожаж экран образын (беті, парағын) сақтайды. Кеңінен тараған адаптерлер - EGA, VGA, SVGA Т. Б. Адаптер арқылы видеожадты қолдануды драйвер программа қамтамасз етеді.
Турбо Паскальдің графикалық режимін іске қосудың мүмікн 80-ге жуық процедуралар мен функциялары бар. Олар GRAPH модулінде жазылып қойылған.
Куртық жұмыстың мақсаты Турбо Паскальдың графикалық режимін күрделі графиктер тұрғызу, фигуралар сызу, графикалық режимде текст жазу, кординаттар және терезелер сызуда және т. б. амалдарды орындау барысында Турбо Паскальдың графикалық режимінің тигізізер көмегі көп.
Graph модулін қолдану.
GRAPH модулінің функциялары мен процедураларының параметрлері INTEGER типті болуы тиіс.
Initgraph (GDriver, GMode, Patch) - экранды графикалық режимге көшіру.
Мұндағы Gdriver - драйвер нөмірі. Gmode- режим нөмірі. Patch- қажетті драйверге жол сілтеу. Мысалы, CAtp’ tgavga bgi’ (bgi - графикалық драйвердің кеңейтілуі) . Драйверді автоматты түрде анықтау үшін әдетте мәні 0-ге тең Detect атаулы тұрақты пайдаланылады. Олардың дұрыс енгізілуін, мәні тұрақты болатын және ол дұрыс кезінде нөл мәнін қабылдайтын режимді орнату функциясы (GraphResult) арқылы тексеруге болады. Мысалы,
Uses graph;
Var griver, gmode, Err Code: integer;
begin griver=detect; Initgraph (gdriver, gmode, ) ;
ErrCode:=CraphResult; if ErrCode <>0 then Writeln (Графикалық режим қате орнатылған, оның нөмірі, ErrCode) Else CloseGraph;
end.
- Setbkcolor (<түс>) - экран кеңістігінің түсін орнату. Бұл оператор программаға енгізілмесе, экран ағымдық қара не көгілдір түске боялып көрсетіледі.
- SetColor (<түс>) - кескін орнату. Оператор енгізілмесе, кескін ақ түске боялып көрсетіледі.
- GetMaxColor - палитрадағы максималды түстің кодын анықтайды.
- GetMaxХ, GetMaxҮ - экран координаттарының ең үлкен мәндерін береді.
- CloseCraph - графикалық режимді жауып, текстік режимге өту.
- RestoreCRTMode - уақытша текстік режимге өту
- SetGraphMode (<режим>) - графикалық режимге қайта өту.
- ClearDevice - экранды тазалайды.
- GraphResult - жүйенің графиктік режимге дұрыс өтуін тексеру (функция) . Ол Integer типті және, қате болмаса, оның мәні 0-ге тең, т. б.
Фигураларды сызу
- Line (х1, у1, х2, у2) - (х1, у1) нүктесінен (х2, у2) нүктесіне дейін түзу кесіндісін сызу.
- Rectangle (х1, у1, х2, у2) -сол жақ жоғары төбесі (х1, у1), оң жақ төменгі төбесі (х2, у2) болатын тіктөртбұрыш сызу.
- Circle (x, y, R) - орталық нүктесі (х, у) радиусы R-ге тең шеңбер сызу.
- Arc (x, y, gr1, gr2, R) - градуспен берілген gr1, gr2 бұрыштарының аралығында орталық нүктесі (х, у) радиусы R-ге тең дөңгелек доғасын сызу.
- Pieslice (x, y, gr1, gr2, R) - градуспен берілген gr1, gr2 бұрыштардың аралығында орталық нүктесі (х, у), радиусы R-ге тең дөңгелек секторын сызу.
- Ellipse (x, y, gr1, gr2, Rx, Ry) - градуспен берілген gr1, gr2 бұрыштарының аралығында орталық нүктесі (х, у), биіктігі мен ені Rx, Ry болатын элиппс сызық.
- PutPixel (x, e, <түс>) - <түс> - боялған (х, у) нүктесін орнату.
- FloodFill ( Х, У <шекара түсі>) - шектелген фигураны бояу. Мұндағы Х, Ү фигура ішіндегі кез-келген нүкте. <Шекара түсі> - боялатын фигураның шекара контурының түсімен бірдей болады.
Графикалық режимде текст жазу
- SetTextStyle(<штриф>, < бағыты >, <штрифт өлшемі>) -
- текст стилін орнатады. <Штрифт> параметрінің мәні 0…4, яғни 0-матрицалық, 1-триплекс, 2-ұсақ, 3-тік, 4-готикалық штрифтар <Бағыты> параметрінің мәні 0 (солдан-оңға қарай) немесе 1 (төменнен жоғары қарай) . <Штрифт өлшемі> параметрлерінің мәні 1…10.
- OuttextXY (х, у, текст) - (х, у) нүктесінен бастап дәйекшілер ішінде жазылған тексті экранға шығару.
- SetTextJustify (<Горизанталь>, <Вертикаль>) - текстің курсорға қатысты орнын анықтайды. <Горизанталь> - мәні 0 . . . 2, <Вертикаль> - мәні 0 . . . 2.
- SetLinStyle ( <Сызық түрі>, <үлгісі>, <сызық қалыңдығы>) - фигуралар кескіндерінің контурлары және басқа да сызықтардың қалыңдықтарын орнатады. <Сызық түрі> - мәні 0 . . . 4, 0-үздіксіз, 1-нүкте түріндегі, 2-штрихпунктирлі, 3-пунктирлі, 4-пайдаланушы анықтайтын ерекше сызық түрі. <Үлгісі> - әдетте мәні 0-ге тең, тек <Сызық түрі> - мәні 4-ке тең болғанда оның сызық үлгісі көрсетіледі. <Сызық қалыңдығы> - мәні 1 . . . 3.
Координаттар және терезелер.
1 мысал. Терезедегі суретті кесіп алу
Uses Graph, CRT;
var
x, y, e: Integer;
xll, yll, xl2, yl2, {1-ші терезенің координаттары}
x21, x22, {2 ші сол жақ жоғарғы бұрыш}
R, {бастапқы радиус}
k: Integer;
begin
DirectVideo := False
{графикалық режимді иницииалдау}
х := Detect; InitGraph(x, у, '') ;
{Проверяем результат}
е := GraphResult; if e <> grOk then
WriteLn(GraphErrorMsg (e) ) {қате}
else
begin {қате жоқ}
x11:=GetMaxX div 60;
x12:=GetMaxX div 3;
y11:=GetMaxY div 4; y12:=2*y11;
R:=(x12-x11) div 4; x21:=x12*2;
x22:=x21+x12-x11;
{терезені сызамыз}
WriteLnt'ClipOn:':10, 'ClipOff:':40) ;
Rectangle(x11, y11, x12, y12) ; Rectangle(x21, y11 x22, y12) ;
SetViewPort(x11, y11, x12, y12, ClipOn) ;
for k := 1 to 4 do
Circle(0, y11, R*k) ;
SetViewPort(x21, y11, x22, y12, ClipOff) ;
for k := 1 to 4 do
Circle(0, y11, R*k) ;
{кез келген клавишті басу }
if ReadKey=#0 then k := ord(ReadKey) ;
CloseGraph
end
end.
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 := 3*x1; y2 := 3*y1;
{терезе сызамыз}
Rectangle(x1, y1, x2, y2) ;
SetViewPort(x1+1, y1+1, x2-1, y2-1, ClipOn) ;
{терезеге кездейсоқ шеңберлерді толтырамыз}
repeat
Сirclе(Random(Ge tMaxX), Random(Ge tMaxX)
Random(GetMaxX div 5) )
until KeyPressed;
{Терезені тазалау үшін Enter клавишін басамыз}
ClearViewPort;
OutTextXY(0, 0, 'Press Enter . . . 1) ;
ReadLn;
CloseGraph
end
end.
3 мысал. Әртүрлі өлшемдегі 20 шеңберден тұратын сурет салу
Uses Graph, CRT;
const
R =. 50;
dx = 1000;
var
d, m, e, k : Integer;
Xasp, Yasp: Word;
begin
d := Detect;
InitGraph(d, m, . '') ;
e : = GraphResult;
if e <> grOk then
WriteLn(GraphErrorMsg(e) )
else
begin
GetAspectRatio(Xasp, Yasp) ;
for k := 0 to 20 do
begin
SetAspectRatio(Xasp+k*dx, Yasp) ;
Circle(GetMaxX div 2, GetMaxY div 2, R)
end;
if ReadKey=#0 then k := ord(ReadKey) ;
CloseGraph
end
end.
Мысал 4. Бір бұрышы 0 және 90, екінші бұрышы 207 және 540 градуста сызылған шеңбер сызайық.
Uses Graph, CRT;
var
d, r, е : Integer;
Xasp, Yasp: Word;
begin
{ графиканы инициалдау}
d := Detect;
InitGraphtd, r, '') ;
e := GraphResult; if e <> grOK then
WriteLn(GraphErrorMsg(e) )
else
begin
GetAspectRatio(Xasp, Yasp) ;
{R = 1/5 болғандағы экранның вертикальды өлшемі}
r := round(Yasp*GetMaxY/5/XAsp) ;
d := GetMaxX div 2; {екінші графикті алу}
e : = GetMaxY div 2; {горизонтальды ось }
{сол жақ графикты тұрғызайық }
Line (0, e, 5*r div 2, e) ; {Горизонтальды ось}
Line (5*r div 4, e div 2, 5*r div 4, 3*e div 2) ;
Arc (5*r div 4, e, 0, 90, R) ; {доға}
OutTextXY(0, e+e div 8, '0 - 90') ; {жазба}
{бірінші график}
Line (d, e, d+5*r div 2, e) ;
Line (d+5*r div 4, e div 2, d+5*r div 4, 3*e div 2) ;
Arc (d+5*r div 4, e, 270, 540, R) ;
OutTextXY(d, e+e div 8, '270 - 540') ;
{кез келген клавишті басу}
if ReadKey=#0 then d := ord(ReadKey) ;
CloseGraph
end
end.
1-мысал. Графикалық режимде бірінің ішіне бірі салынған 5 шеңбер және параллепипед салатын программа құру керек.
program exl; uses graph;
var gd, gm, erre:integer; R, i, width:integer; x0, y1, y2, x1, x2: integer;
begin gd=detect; inintGraph(gd, gm) ; erre:=GraphResult;
if erre=grOK then begin
for R:=1 to 5 do Circle (getmaxX div 2, getmaxy div 2, r*10) ;
readlin; cleardevice; Bar3d (100, 100, 300, 250, 50, TopOn) ;
settextstyle (0, 0, 3) ; SetColor (Red) ; setlinestyle (0, 0, 3) ;
settextjustify (0, 0) ; outtextxy (130, 192, PASKAL) ;
readlin; cleardevice; end else Halt (1) ; end.
2-мысал. Экран бетінде қызыл төртбұрыш, ортасында ақ дөңгелек, оның ішінде бұрышы 270 градус болатын қара дөңгелек секторын салу керек.
Program Suret; Uses Graph;
Var CD, GM: Integer;
Begin gd=Detect;
Initgraph (CD, GM, ``) ; {графикалық режим орнатылуы}
Pieslice (310, 240, 0, 270, 150) ; {сектор салу}
Circle (310, 240, 180) ; {шеңбер салу}
Rectangle (0, 0, GetMaxX, GetMaxY) ;
SetFillstyle (1, Red) ; {Бояу түрі мен түсі}
FloodFill (10, 10, White) ; {төртбұрышты бояу}
Readlin; {“Enter” пернесінің күтілуі}
3-мысал. Экранға готикалық шрифтпен THE END, PRESS ENTER, сөзін жазатын программа құру керек.
program ex2;
uses Crt, Craph;
var gd, gm: integer;
begin
GD: =detect; initgraph (GD, GM, ` c:\tp7\bgi`) ;
setbkcolor (black) ; settextjustify (centertext, centertext) ;
SetTextStyle (triplexfont, horisDir, 9) ;
Setcolor (lithgray) ;
outtextxy (getmaxX div 2+2, getmaxy div 4, `THE`) ;
setcolor (red) ; outtextxy (getmaxX div 2+10, getmaxy div 4, `THE`) ; }
setcolor (green) ; settextjustify (centertext, centertext) ;
SetTextStyle (gothicfont, horisDir, 13) ; setcolor (128+yellow) ;
outtextxy (getmaxX div 2+2, getmaxy div 2, `END`) ;
setcolor (green) ; settextjustify (centertext, centertext) ;
SetTextStyle (gothicfont, horisDir, 4) ; setcolor (red) ;
outtextxy (getmaxx div 2+9, getmaxy div 2+120, `PRESS ENTER`) ;
repeat until keypressed;
end
Мултипликация
Видеожадтың немесе оның бір бөлігінің мазмұнының оперативті жадқа көшірмесін алуға болады. Қажет болса көшірмені видеожадтың сол орнына немесе жаңа орнына қайтаруға, координаталарын циклде өзгерте отырып жылжытуға болады. Кескіндердің тік төртбұрыш үзінділерін сақтауға болады. Ал оған сәйкес байт түріндегі жад өлшемі ImageSize (x1, y1, x2, y2) процедурасымен алынады. Мұнда (х1, у1) тіктөртбұрыштың сол жақ жоғары төбесі, (х2, у2) - оң жақ төменгі төбесі. Бұл үзіндінің көшірмесін негізгі жадқа орналастыратын процедура - GetImage (X1, Y1, X2, Y2, <Жад бөлігі>) . <Жад бөлігі> - параметрі кәдімгі не динамикалық айналымы түрінде беріледі. Сақталған кескін көшірмесін экран бетіне шығаратын процедура - PutImage (X, Y, , <Жад бөлігі>, <Тәсілі>) . Мұнда Х, Ү - экранға шығатын тіктөртбұрыш үзіндісінің сол жақ жоғары төбесі. Кескін экранға бірнеше тәсілмен: 0-сақталған күйінде, 4- «негатив» (қарама-қарсы түске боялған) түрде, 1, 2, 3 - логикалық операциялар (Xor, Or, And) әрекеттеріне сай шығарылады.
Бірнеше экран парақтарын уақыт өткен сайын (Мысалы, 20-30 мс) кезекпен кезек белсенді ете отырып, мультипликация жасауға болады. Парақтарды нөмірлеу 0-ден басталады. Көрсетілген парақты белсенді ететін процедура - SetActivePage (<Парақ нөмірі>) . Парақты көрінетін ету процедура - SetVisualPage (парақ нөмірі)
1-мысал. Экранның жоғарғы бөлігінде радиустері әр түрлі қиылысқан үш дөңгелек бұлт бейнесінде солдан оңға қарай жылжиды. Жылжып бара жатқанда `жаңбыр жауып`, кішкене дөңгелек, нүктелер төмен түсіп, экранның төменгі жағында салынған кішкене саңырауқұлақ нөсер өткен соң өлшемі үлкейіп, «өсетінін» бейнелейтін программа:
program ex3; uses graph, crt;
var gd, gm, erre: integer; R, i, j, width: integer;
x0, y1, y2, x1, x2, : integer; P:pointer; Size: Word;
begin
gd:=detect; initgraph (gd, gm, ``) ;
erre:=GraphResult; if erre=grOK then begin
FillEllipse (getmaxX div 4, getmaxy div 5, 60, 30) ;
FillEllipse (getmaxX div 4-50, getmaxy div 5+10, 60, 30) ;
FillEllipse (getmaxX div 4+40, getmaxy div 5-30, 30, 14) ;
FillEllipse (getmaxX div 4-18, getmaxy div 5+25, 40, 30) ;
size:=ImageSize (getmaxX div 4-150, getmaxy div 5{-45}, getmaxX div 4-70, getmaxy div 5+60) ;
GetMem (P, Size) ;
GetImage (getmaxX div 4-150, getmaxy div 5-45, getmaxX div 4+70, getmaxy div 5+60, p^) ;
setcolor (green) ; seltfill (3, green) ; bar (0, 350, 650, 450) ;
setfillstyle (1, 15) ;
FOR j:=5 TO 30 DO begin
putmage (getmaxX div 4-250+j*25, getmaxy div 5-45, p^, 0) ;
FOR I:=1 TO j DO begin setcolor (yellow) ;
Ellipse (280, 350, 0, 360, 3 +I, 15+I) ;
FillEllipse (280, 330-i, 10+i*2, 3+i) ;
end; DELAY (500) ; end; readlin; end else Halt (1) ; end.
2-мысал. 2 парақ не одан да көп парақтармен жұмыс жасай алатын адаптер мен режим орнатылғанда, 0 және 1 парақтарын қолданып вертикаль сызықтан ауытқуы 0, 5 радианмен шектелген маятник тербелісін көрсететін программа құру керек.
Uses GRAPH, CRT; {CRT модулінде Key Pressed бар}
Var d, k, m: Integer; A, B: Real;
Prosedure Kadr (A: Real; cvet: Word) ; {cvet - маятник түсі}
Var x, y, z, w: Integer;
Begin z: = GetMaxX div 2; w:=GetMaxY div 10;
x:= Round (z+8*w*Sin(A) ) ; y=Round (w+8*w*Cos (A) ) ;
Setcolor (cvet) ; SetFillStyle (1, cvet) ; line (z, w, x, y) ;
PieSlice (z, w, 0, 360, 5) {маятниктің тірек нүктесі}
PieSlice (z, w, 0, 360, w) {маятниктің дөңгелегі}
End
BEGIN d:=EGA: r:=1: InitGraph (d, r, `C:\tp\bgi`)
A: =0: B: =0 k:=1 SetBkColor (blue) : SetActivePage (1)
Repereat {m=1 (-1) мәнінде тербелу бағыты оңға (солға) }
Kadr (B, GetBKColor) {маятник образын өшіру}
B: =A A: =A+m*0. 02 If Abs (A) >0. 5 Then m: =-m
Kadr (A, yellow) {маятникті салу}
SetVisualPage (k) SetActivePage (1-k) {парақтар алмасуы}
Delay (50)
k:=1-k {парақ нөмірін ауыстыру}
Until KeyPressed {клавиша басылғанша тербеледі}
END.
3-мысал. Экранға мәзір шығарып (шеңбер, квадрат, үшбұрыш) олардың бірін таңдағанда оның суретін шығаратын программаның бір процедурасын өзіндік модуль түрінде жазатын программа құру керек.
F0 модулі программасының тексті:
UNIT MODF0
INTERFACE PROSEDURE FO
IMPLEMENTATION
PROSEDURE FO
BEGIN
SETCOLOR (14) SETFILLSTYLE (6, 4) SETTEXSTYLE (0, 0, 2)
X: =100 Y: =100 R: =350
SETFILLSTYLE (1, 5) BAR (X, Y, X+R, Y+R)
OUTEXTXY (X+5, Y+15, `Геометриялық фигураның`)
... жалғасы- Іс жүргізу
- Автоматтандыру, Техника
- Алғашқы әскери дайындық
- Астрономия
- Ауыл шаруашылығы
- Банк ісі
- Бизнесті бағалау
- Биология
- Бухгалтерлік іс
- Валеология
- Ветеринария
- География
- Геология, Геофизика, Геодезия
- Дін
- Ет, сүт, шарап өнімдері
- Жалпы тарих
- Жер кадастрі, Жылжымайтын мүлік
- Журналистика
- Информатика
- Кеден ісі
- Маркетинг
- Математика, Геометрия
- Медицина
- Мемлекеттік басқару
- Менеджмент
- Мұнай, Газ
- Мұрағат ісі
- Мәдениеттану
- ОБЖ (Основы безопасности жизнедеятельности)
- Педагогика
- Полиграфия
- Психология
- Салық
- Саясаттану
- Сақтандыру
- Сертификаттау, стандарттау
- Социология, Демография
- Спорт
- Статистика
- Тілтану, Филология
- Тарихи тұлғалар
- Тау-кен ісі
- Транспорт
- Туризм
- Физика
- Философия
- Халықаралық қатынастар
- Химия
- Экология, Қоршаған ортаны қорғау
- Экономика
- Экономикалық география
- Электротехника
- Қазақстан тарихы
- Қаржы
- Құрылыс
- Құқық, Криминалистика
- Әдебиет
- Өнер, музыка
- Өнеркәсіп, Өндіріс
Қазақ тілінде жазылған рефераттар, курстық жұмыстар, дипломдық жұмыстар бойынша біздің қор #1 болып табылады.

Ақпарат
Қосымша
Email: info@stud.kz