logo

Графика рeжимида экран холатлари хамда турли хил фигуралар куриш, матнлар ёзиш ва хатоликлар тахлили

Yuklangan vaqt:

20.09.2019

Ko'chirishlar soni:

0

Hajmi:

102 KB
www.arxiv.uz Г р а ф и к а р e ж и м и д а э к р а н х о л а т л а р и х а м д а т у р л и х и л ф и г у р а л а р к у р и ш , м а т н л а р ё з и ш в а х а т о л и к л а р т а х л и л и Режа: 1. Турбо-Паскалнинг график режимида экран холати; 2. Дисплейни график режимга утказиш; 3. Нукта чизик ва ранглар; 4. Турли хил фигуралар; 5. График режимдаги матнлар; 6. Экран сохалари; 7. Хатолар тахлили; 8. Graph модуолининг процедура ва функциялари. www.arxiv.uz Барча программалаш тиллари каби Паскал тили хам, дастурчига факат матнли ахборотлар билангина эмас, балки график маълумотлар билан хам ишлаш имкониятини яратади. Graph модули турли хил дисплей адаптерлари ( CGA , EGA , VGA , MCGA , Hercules , PC 3270, AT  T 6300 ва IBM 8514)нинг график режимларини тулик бошкариш имкониятини яратувчи саксондан ортик процедура ва функцияларнинг кутубхонасини ифода этади. 1 . Т у р б о - п а с к а л н и н г г р а ф и к а р е ж и м и д а э к р а н х о л а т и Маълумки, экран туртбурчак майдон булиб, жуда куп нукта( Pixel )лардан ташкил топган. График экран ишчи майдон ва бордюр (экраннинг четки кисми)дан иборат булади. График режимда экрандаги барча нукталарнинг рангларини узгартириб чикиш мумкин (эслатиб утамиз, матнли режимда бу мумкин эмас). Турли рангга буялган нукталар ёрдамида чизиклар, матнлар ва бошка хар хил тасвирлар хосил килинади. Экран турига караб ранглар сони турли хил булиши мумкин, энг ками билан эса 2 хил ранг булади. Компьютер экрани ёки матнли режим ёки график режим холатида булади. Бир вактнинг узида экраннинг бир кисми график режимда, бир кисми матнли режимда булиши мумкин эмас. Чунки экранда куринаётган барча тасвирлар видео хотирадаги маълумотларнинг акси - тасвиридир. Экраннинг график ёки матнли режимларига караб, видеохотирадаги маълумотлар турлича булади. Видеохотира, ёру\лик трубкасининг контроллери, кириш-чикиш портлари ва х.к. лар битта платада жойлашади ва дисплей адаптери деб аталади. Амалда бир неча хил дисплей адаптерлари мавжуд булиб, улар куйидаги кусаткичлари билан бир-биридан фарк килади : www.arxiv.uz - экраннинг тасвирни курсатиш сифати; - экранда бир вактда курсатиш мумкин булган ранглар сони. куйида амалда кенг таркалган видеоадаптерлар санаб утилган: *0 CGA(Color Graphics Adapter) ; *1 MCGA(Multi Color Graphics Array); *2 EGA(Enhanced Graphic Adapter); *3 VGA(Video Graphics Array). Компьютерда кандай адаптернинг урнатилишига карамай Турбо- Паскалнинг процедура ва функцияларидан тулик фойдаланиш мумкин. Уларни узаро созлашуви автоматик тарзда кечади. Бу созлашларни график драйверлар деб аталувчи махсус программалар бажаради. Драйверлар *.BGI кенгайтмаси бор булган файлларда жойлашган. Мисол учун, EGA ва VGA адаптерлари билан ишлаш учун зарур драйверлар EGAVGA.BGI файлида,CGA ва MCGA адаптерларига мос драйверлар эса CGA.BGI файлида жойлашган. Турли хил драйверларни курсатиш учун Graph модулида куйидаги узгармаслар аникланган: const Detectк0; {Драйверни автоматик тарзда аниклаш} CGA к1; MCGA к2; EGA к3; EGA 64к4; EGAMONO к5; IBM 8514к6; HERCMONO к7; www.arxiv.uz ATT 400к8; VGA к9; PC 327к10. Graph модулида график режимларни курсатиш учун эса куйидаги узгармаслар аникланган ( CGA , EGA ва VGA адаптерлари учун); const CGAC0к0; {320х200 та нукта, 4 хил ранг} CGAC1к1; {320х200 та нукта, 4 хил ранг} CGAC2к2; {320х200 та нукта, 4 хил ранг} CGAC3к3; {320х200 та нукта, 4 хил ранг} CGAHiк4; {640х200 та нукта, 4 хил ранг} EGALoк0; {640х200 та нукта, 16 хил ранг, 4 та варок} EGAHiк1; {640х350 та нукта, 16 хил ранг, 2 та варок} EGA64Loк0; {640х200 та нукта, 16 хил ранг,1 та варок} EGA64Hiк1; {640х350 та нукта, 4 хил ранг, 4 та варок} VGALoк0; {640х200 та нукта, 16 хил ранг, 4 та варок} VGAMedк1; {640х350 та нукта, 16 хил ранг, 2 варок} VGAHiк2. {640х480 та нукта, 16 хил ранг, 1 варок} 2 . Д и с п л е й н и г р а ф и к р е ж и м г а у т к а з и ш Дисплейнинг доимий режими, матнли режим хисобланади. Дисплейни график режимига утказиш учун Graph модулининг InitGraph процедурасидан фойдаланилади: InitGraph ( GD , GM , Path ) бу ерда GD -драйвер номери ; GM -режим номери ; Path -керакли драйвер жойлашган файл йули. www.arxiv.uz GD ва GM номерларни кандай аниклашни олдинги мавзуда куриб чикдик. Агар Path узгарувчиси буш сатр каторини ташкил килса ( Pathк‘ ‘ ) драйверни ишчи каталогдан кидирилади. GD ва GM узгарувчи параметрлар хисобланади. Агар InitGraph процедурасини ишга туширишда GD к0 булса, зарур драйвер ва бу драйвер учун энг яхши режим автоматик тарзда аникланади. Graph модулида кулайлик учун Detect узгармаси ( Detectк0 ) киритилган. Мисолларда ундан кандай фойдаланганлигига ахамият беринг. InitGraph процедурасига симметрик процедура CloseGraph хисобланади. Бу процедура драйверни хотирадан чикариб ташлайди ва олдинги видеорежимни тиклайди. куйидаги программа дисплейни график режимга утказади ва шу захотиёк уни асли холига кайтаради: uses Graph; var Gd,Gm:Integer; begin GD:кdetect;{ Драйверни автоматик тарзда ани к лайди , чунки Detectк0} InitGraph(GD,GM,’d:\tp’); { График режимни урнатиш } ReadLn; {Enter бос к ичини босилишини кутиш } CloseGraph; end. Баъзи холларда , масалан .BGI кенгайтмали файл йулини хато курсатилса ёки график режимни урнатиш учун тезкор хотира етишмаса InitGraph процедураси уз ишини муваффа к иятли якунлай олмайди . Бундай холларда йул к уйилган хатоликларни ани к лаш учун GraphResult www.arxiv.uz функциясидан фойдаланиш мумкин . Бу функция график режимни ишга туширишга харакат килганда куйидаги кийматлардан бирини беради: 0 - хатолар йук; -2 - график плата урнатилмаган; -3 - драйвер файли топилмади; -4 – ноту\ри драйвер урнатилган; -5 - график режимни урнатиш учун тезкор хотира етишмаган; GraphResult функциясидан фойдаланишга доир куйидаги программани куриб чикайлик: uses Graph; var GD,GM,ErrCode:integer; begin GD:кDetect; { Драйверни автоматик тарзда ани к лаш } InitGraph(GD,GM,’ ’); { График режимни ишга тушириш } ErrCode:кGraphResult; if ErrCode<>0 then WriteLn(ErrCode, ’ ра к амли хато ’) {Х атога йул к уйилган } else CloseGraph; {Хато топилмаган ва график режимни иши якунланди} end. 3 . Н у к т а , ч и з и к в а р а н г л а р www.arxiv.uz Биз экранда график режимни кандай урнатишни куриб чикдик. Энди экранда турли хил нукталар, чизиклар ва шакллар чизишни ташкил килайлик. Graph модулида 80 тага якин функция ва процедуралар мавжуд булиб, улардан фойдаланиб куйидаги ишларни килиш мумкин: - нукталар куриш; - кесмалар чизиш; - эллипс ва айланалар чизиш; - ту\ри туртбурчаклар ва купбурчаклар чизиш; - ёпик шакларни турли рангларга буяш, хамда бир неча хил стандарт ва керагича ностандарт усуллар билан сохаларни штрихлаш; - экранга турли шрифтдаги матнларни чикариш; - экран сохаларини эслаб колиш ва уларни суриш. График режимда ишлаш худди математика фанидаги Декарт координаталар системасида нукталар оркали турли хил шакллар ясашга ухшаб кетади. Экрандаги хар бир нукта узининг координаталарига эга. Экраннинг чапдан энг тепадаги нуктасининг координатаси (0,0)га тенг. X координатаси чапдан унгга усиб борса, Y координатаси юкоридан пастга караб усиб боради. Нукта координатасини аникловчи (x,y) жуфтликдаги биринчи киймат ОХ укидан, иккинчи киймат эса ОY укидан аникланади. Экраннинг унгдан энг пастидаги нуктаси охирги нукта хисобланади ва унинг координатаси график режимнинг турига бо\лик. Масалан,VGAHi режимида экрандаги нукталар сони 640х480га тенг. Ынгдан энг пастки нукта координатаси эса (639,479) га тенг булади. Энди Graph модулининг энг куп ишлатиладиган функция ва процедуралари билан танишиб чикайлик. 1. PutPixel ( x , y , color ) процедураси -( x , y ) координатали нуктани Color параметри билан аникланган рангга буяб беради; www.arxiv.uz Мисол: PutPixel (100,120,Red) - экранда (100,120) координатали кизил нукта пайдо булади. 2. GetPixel (x,y) функцияси - (x,y) координатали нуктанинг рангини аниклаб беради; Мисол: Color:кGetPixel(100,120); (100,120) координатадаги нуктага куйилган ранг кийматини аниклайди. 3. Line (x1,y1,x2,y2) процедураси -(х1,у1) ва (х2,у2) координатали нукталарни туташтирувчи кесма чизади; 4. Circle ( x , y , Radius ) процедураси - маркази (х,у) нуктада жойлашган радиуси Radius га тенг айлана чизади; 5. Rectangle (x1,y1,x2,y2) процедураси-чап юкоридаги бурчаги (х1,у1) ва унгдан пастки бурчаги (х2,у2) координатали нукталар оркали утказилаган ту\ри туртбурчак чизади; 6. SetColor (Color) процедураси - чизиш рангини урнатади; График режимда рангларни белгилаш учун худди матнли режимдаги каби куйидаги узгармаслар ишлатилади: const Blackк0;{к ора } Blueк1;{ Кук } Greenк2;{ Яшил } Cyanк3;{ Зангори ранг } Redк4;{к изил } Magentaк5;{ Пуштиранг } www.arxiv.uz Brownк6;{ Жигарранг } LightGrayк7;{ Оч кулранг } DarkGr а yк8;{ Ту к кулранг } LightBlueк9;{ Оч хаворанг } LightGreenк10;{ Оч кук } LightCyanк11;{ Оч зангориранг } LightRedк12;{ Оч к изил } LigthMagentaк13;{ Оч пуштиранг } Yellowк14;{ Сари к} Whiteк15;{ О к} Мисол: uses Graph; var GD,GM:integer; Rang,Radius:word; begin GD:кDetect; { Драйверни автоматик тарзда ани к лаш } InitGraph(GD,GM,’ ’); { График режимни ишга тушириш } for Rang:к15 downto 0 do begin setcolor(Rang); {Чизиш рангини урнатиш} Radius:кRang*10; Circle(GetMaxX div 2, GetMaxY div 2,Radius); {Маркази экран марказида жойлашган айлана чизиш} end; Readln; CloseGraph; www.arxiv.uz end. 4 . Т у р л и х и л ф и г у р а л а р Graph модулининг процедура ва функциялари . Ю к оридаги мавзуда куриб чи к илган функция ва процедуралар ёрдамида фа к ат чизи к лар чизиш мумкин . Энди бош к а турли хил ранглар билан тулдирилган фигуралар чизишни ташкил этишга ёрдам берувчи яна бир нечта процедура ва функциялар билан танишиб чи к амиз . 1. SetFillStyle (Style,Color) процедураси - Color ранги билан сохаларни тулдириш ва уларни курсатилган услубда тулдириш ( штриховка к илиш ) учун ишлатилади ; Сохани турли ранглар билан тулдириш узгармаслари: const EmptyFillк0;{сохани экран фонининг рангига буяйди} SolidFillк1;{сохани белгиланган рангда узлуксиз тулдириш} LineFillк2;{сохани калин горизонтал (-----) чизиклар билан тулдиради} LtSlashFillк3;{сохани ингичка&#34;/// &#34; белгилари билан тулдиради} SlashFillк4;{сохани калин &#34;/// &#34; белгилари билан тулдиради} BkSlashFillк5;{сохани калин &#34;\\\&#34; белгилари билан тулдиради} LtBkSlashFillк6;{ сохани &#34;\\\&#34; катлами билан тулдиради} HatChFillк7;{сохани тур билан тулдиради} XHatChFillк8;{ сохани эгри тур билан тулдиради} InterLeaveFill к9;{ сохани зич эгри штриховка билан тулдиради} WideDotFillк10;{сохани кам учровчи нукталар билан тулдиради} CloseDotFillк11;{сохани зич нукталар билан тулдиради} UserFillк12;{сохани дастурчи аниклаган штриховка билан тулдиради} www.arxiv.uz 2. Bar (x1,y1,x2,y2) процедураси экрандаги ранг ва штриховка устига ту\ри турт бурчак куради; 3. Bar 3 D ( x 1, y 1, x 2, y 2, Depth , Top ) процедураси хам шундай ранг ва штриховка билан тулдирилган параллелепипед чизади. Depth узгарувчиси параллелепипед баландлигини англатади. Top мантикий узгарувчиси true кийматли булса параллелипипеднинг юкори асоси чизилади акс холда, чизилмай очик колади; 4. FillEllipse ( x , y , XRadius , YRadius ) процедураси олдин урнатилган рангга тулдирилган эллипс чизади. Эллипс уклари координата укларига паралел деб олинади. XRadius - эллипс эни, YRadius - эллипс баландлиги. 5 . Г р а ф и к р е ж и м д а г и м а т н л а р График режимда матнларни ёзиш учун икки хил типдаги шрифтдан фойдаланиш мумкин: нукталар матрицаси ва символни ташкил этувчи векторлар катори оркали. Шрифтлар файллари .CHR кенгайтмасига эга булади ва шрифтни ишга созлаганда керакли файллар ишчи каталогда ёки . BGI график драйвери жойлашган каталогда булиши керак. Шрифтни танлаш ва масштаб урнатиш SetTextStyle процедураси ёрдамида амалга оширилади: SetTextStyle (Font, Direction, Size) - керакли шрифтни урнатади, матнни чикариш йуналишини аниклайди ва белгилар улчовини белгилаб беради. Font - шрифтни аникловчи узгарувчи, Direction -матнни чоп этиш йуналишини курсатувчи узгарувчи (чапдан унгга ёки пастдан юкорига), Size - www.arxiv.uz шрифт улчовини аникловчи узгарувчи. Матрицали шрифтда улчов Sizeк1, вектор шрифтида эса Sizeк4 кийматларида эришилади. Турли хил шрифтларни курсатиш ва матнларни чоп этиш йуналишларини танлаш учун куйидаги узгармаслар аникланган: const {шрифтлар} DefaultFontк0;{8х8 нуктали стандарт матрицали шрифт} TriplexFontк1;{векторли шрифт} SmallFontк2;{векторли шрифт} San s SerifFontк3;{векторли шрифт} GothicFontк4;{векторли шрифт} {матн йуналиши} HorizDirк0;{чапдан унгга} VertDirк1;{пастдан юкорига} OutTextXY (x,y,TextString) процедураси - олдиндан аникланган шрифтда, йуналишда ва белги улчовида TextString каторини (х,у) нуктадан бошлаб чоп этади. SetTextJustify (Horiz,Vert) процедураси OutTextXY процедураси чоп этадиган матнни автоматик тарзда текислаб беради. Horiz - горизонтал, Vert - вертикал текислашлар. Матнларни текислаш учун куйидаги узгармаслар аникланган: const {горизонтал текислаш учун} LeftTextк0;{чап томонга нисбатан текислаш} CenterTextк1;{марказга нисбатан текислаш } RightTextк2;{унг томонга нисбатан текислаш} {вертикал текислаш учун} www.arxiv.uz BottomTextк0;{пастги томонга нисбатан текислаш} CenterTextк1;{марказга нисбатан текислаш} TopTextк2;{юкори томонга нисбатан текислаш} 6 . Э к р а н с о х а л а р и GetImage , PutImage процедуралари ва ImageSize функцияси ёрдамида тасвирларнинг ту\ри туртбурчакли сохаларини хотирада эслаб колиш ва уларни экранга чикаришимиз мумкин. 1. ImageSize ( x 1, y 1, x 2, y 2) функцияси – экраннинг ту\ри туртбурчак-ли сохасини саклаш учун зарур булган хотира улчовини (байтларда) беради. ( x 1, y 1) ту\ри туртбурчакли куринишнинг чапдан юкоридаги, ( x 2, y 2) - эса пастдан унгдаги бурчак нукталари учун координаталар. 2. GetImage (x1,y1,x2,y2,Area) процедураси хотиранинг Area сохасида ту\ри туртбурчакли экран тасвирини саклайди. ( x 1, y 1) ва ( x 2, y 2) лар юкоридаги маънода кайта ишлатилмокда. 3. PutImage ( x , y , Area , Mode ) процедураси экраннинг курсатилган жойига тасвир куринишини чоп этади. ( x , y ) – хотиранинг Area сохасидаги тасвир куриниши нусхасини чоп этиладиган, экраннинг чапдан юкоридаги нуктасининг координатаси. Mode -тасвирни экранга чикариш режими. Тасвирларни экранга чикариш режимини аниклаш учун фойдалани- ладиган узгармаслар: const www.arxiv.uz {PutImage процедураси учун узгармаслар} NormalPutк0;{ мавжуд тасвирни алмаштириш} XorPutк1;{XOR мантикий амали} OrPutк2;{OR мантикий амали} AndPutк3;{AND мантикий купайтириш амали} NotPutк4;{NOT мантикий рад этмок амали} 7 . Х а т о л а р т а х л и л и График режимни урнатиш мавзусида йул куйилган хатолар диагностикаси учун GraphResult функциясидан фойдаланган эдик. Щозир шу функция берадиган хатолар коди билан туликрок танишиб чикайлик. куйида GraphResult функцияси берадиган кодларга мос узгармаслар руйхати келтирилган: const grOk к0;{хатолар йук} grNoInitGraph к-1;{График режим урнатилмаган( InitGraph процедура- сини ишга туширинг )} grNotDetected к-2; {График плата урнатилмаган} -6 - сохаларни кучиришда хотира чегарасидан чикиш; -7 - зарур сохани буяш пайтида хотира чегарасидан чикиш; -8 - шрифт файли топилмаган; -9 - шрифт файлини ишга тушириш учун хотира етишмаяпти; -10 - танланган драйвер учун ноту\ри график режим. www.arxiv.uz 8 . G r a p h м о д у л и н и н г п р о ц е д у р а в а ф у н к ц и я л а р и 1. Arc процедураси - айлана ёйини чизади. Ани к ланиши : Arc(x,y : integer; StAng, EndAng, Radius: Word); x,y - айлана марказининг координатаси; StAng, EndAng - мос равишда ёйнинг бошлан\ич ва охирги бурчаклари; Radius-айлана радиуси. 2. Bar процедураси - рангга буялган ту\ри туртбурчак чизади. Ани к ланиш : Bar(x1,y1,x2,y2:integer); (х1,у1) ва (х2,у2) мос равишда ту\ри туртбурчакнинг четки нукталари координаталари. 3. Bar3D процедураси рангга буялган параллелипипед чизади. Ани к ланиши :Bar3D(x1,y1,x2,y2:integer;Depth:word;Top:boolean); (x1,y1) ва (x2,y2) асосни ташкил этувчи ту\ри туртбурчак учларининг координаталари; Depth -параллелипипед чукурлиги; Top- мантикий узгарувчи. 4. Circle процедураси - айлана чизади; Аникланиши: Circle ( x , y : integer ; Radius : word ); (x,y) айлана марказининг координатаси; Radius-айлана радиуси. 5. CloseGraph процедураси график режимини узади. Аникланиши :Closegraph;(параметрсиз процедура) 6. DrawPoly процедураси - куп бурчак чизади. Ани к ланиши :DrawPoly(NumPoints:word; var PolyPoints); www.arxiv.uz NumPoints - купбурчак томонлари сони ; PolyPoints - купбурчак учларининг координаталаридан тузилган массив . 7. Ellipse процедураси - эллипс ёйини чизади . Ани к ланиши : Ellipse(x,y:integer;StAng,EndAng:word;XRadius,YRadius:word); (x,y) – эллипс марказнинг координатаси; StAng ва EndAng - ёйнинг бошлан\ич ва охирги бурчаклари; Xradiues ва Yradius мос равишда эллипс баландлиги ва эни. 8. FillPoly процедураси - рангли купбурчак чизади. Ани к ланиши : FillPoly(NumPoints:word; var PolyPoints); NumPoints - купбурчакнинг учлари сони ; PolyPoints - купбурчак учлари координаталаридан тузилган массив . 9. GetArcCoords процедураси - охирги марта ишлатилган Arc процедурасининг координаталарини ани к лайди . Ани к ланиши : GetArcCoords(var ArcCoords:ArcCoords Type); 10. GetColor функцияси - экран рангини аниклайди. Аникланиши: GetColor : word ; 11. GetGraphMode функцияси - график экранни кайтаради. Аникланиши: GetGraphMode:integer; 12. GetImage процедураси - экраннинг берилган сохасини Area да саклайди. Ани к ланиши : GetImage(x1,y1,x2,y2:integer;var Area); www.arxiv.uz 13. GetMaxColor функцияси - рангнинг энг катта к ийматини хисоблайди . Ани к ланиши : GetMaxColor:word; 14. GetPixel функцияси - берилган ну к та рангини ани к лайди . Ани к ланиши : GetPixel(x,y:integer):word; 15. GraphErrorMsg функцияси - берилган код буйича хато ха к ида сатр маълумот беради . Ани к ланиши : GraphErrorMsg(Code:integer):string; 16. LineTo процедураси - олдинги аникланган нуктадан берилган нуктагача кесма чизади . Ани к ланиши : LineTo(x,y:integer); 17. PieSlice процедураси сектор чизади . Ани к ланиши : PieSlice(x,y:integer;StAng,EndAng,Raduis:word); www.arxiv.uz Ф о й д а л а н и л г а н а д а б и ё т л а р р у й х а т и : 1. Вирт Н. Алгоритму структуру даннух программу. - М.: Мир, 1985 г. 2. Абрамов В., Трифонов Н., Трифонова Г. Введение в язук Паскал. - М.: Наука, 1988 г. 3. Файсман А. Профессиональное программирование на Турбо Паскале. - Т.: &#34;Инфомэкс Корпорейшн&#34;, 1992 г. 4. Findlay W., Watt D.A., Paskal. An introduction to methodical programmin. Third edition. – London: Pitman, 1985 г . 5. Поляков Д. Б., Круглов И. Ю. Программирование в среде Турбо-Паскаль (версия 5.5): Справ.-метод. пособие. – М.: Изд-во МАИ. 1992 г. 6. Епанешников А., Епанешников В. Программирование в среде Turbo Pascal 7.0 М., Диалог-наука, 1993 г. 7. www.ziyonet.uz