Модули Turbo Pascal
Оценка 5

Модули Turbo Pascal

Оценка 5
Семинары
docx
информатика
Взрослым
29.04.2019
Модули Turbo Pascal
Биз олдинги мавзуларда катта дастурлар учун процедура ва функциялар тузиш ва ишлатиш усулини кўриб ўтдик. Бу усул анча яхши натижаларни бериши мумкин. Лекин, баьзида бир хил типдаги процедура ва функциялар ишлатиладиган масалаларни жуда кўп марта қўллашга тўғри келиб қолади. Бу ҳолда ҳар бир дастур учун алоҳида эмас, балки умумий қўлланишда иштирок эта олувчи процедура ва функцияларга зарурият тугилиб қолади. Биз дастурларда ишлатадиган стандарт процедура ва функцияларни эслайлик. Ана шу процедура ва функциялар ҳам библиотекага биз хозир кўрадиган модул кўринишида ёзиб қўйилгандир.
13-mavzu.docx
МОДУЛЛИ ДАСТУРЛАШ. ТУРБО­ПАСКАЛ МОДУЛЛАРИ. CRT МОДУЛИ. Биз олдинги мавзуларда катта дастурлар учун процедура ва функциялар тузиш ва ишлатиш усулини кўриб ўтдик. Бу усул анча яхши натижаларни бериши мумкин. Лекин, баьзида бир хил типдаги процедура ва функциялар ишлатиладиган масалаларни жуда кўп марта қўллашга тўғри келиб қолади. Бу ҳолда  ҳар бир дастур учун алоҳида эмас, балки умумий қўлланишда иштирок эта олувчи процедура ва функцияларга зарурият тугилиб қолади. Биз дастурларда ишлатадиган стандарт процедура ва функцияларни эслайлик. Ана шу процедура ва функциялар ҳам библиотекага биз хозир кўрадиган модул кўринишида ёзиб қўйилгандир.  Модул бу маьлум процедура ва функциялар кетма­кетлигидан иборат дастур бўлиб, бошқа дастурлар ишлатиши учун яратилади. Паскалдаги стандарт модуллар дастурлаш учун   зарур   бўлган   асосий   процедура   ва   функцияларни   уз   ичига   олган   бўлиб, уларга:SYSTEM,  DOS,  CRT,  GRAPH  кабилар   мисол   бўлади.   Энди   кўп   ишлатиладиган модулларга қисқача таьриф бериб ўтамиз: SYSTEM  –   бошланғич   арифметик   ва   мантиқий   амаллар,   таққослашлар   ва   шу   каби бошланғич амаллар билан ишлаш процедура ва функцияларни саклайди. Ушбу модул барча дастурлар учун автоматик равишда юклатилади, яьни уни чақириб утириш шарт эмас. DOS – DOS нинг буйруқлари билан ишлаш процедура ва функцияларини саклайди. CRT  –   матнли   режимда   ишлашда   матнга   турли   ранглар   бериш,   ойналар   очиш,   товуш частоталари ва шунга ўхшаш имкониятлари билан ишлаш процедура ва функцияларини сақлайди. GRAPH – график режим билан ишлаш процедура ва функцияларини сақлайди. Модуллар   асоси   ахборотларни   яшириш   принципига   таянган.   Дастурлар   тузишда модулли дастурлашни қувватлаш учун мўлжалланган. Бу принципга асосан дастурни ўзаро боғланмаган қисмларини ўзаро таьсири минимумга олиб келинади.  Модуллар   стандарт   ва   фойдаланувчи   модулларига   бўлинади.   Стандарт модулларнинг айримларини биз юқорида кўрган бўлсак, фойдаланувчи модулини ўзимиз тузамиз. Фойдаланувчи модулларини ташкил қилиш ва ишлатиш. Паскал тили фойдаланувчиларга шахсий молдуллар яратиш имконини беради ва бу модуллар   фойдаланувчи   модуллари   деб   юритилади.   Умумий   ҳолда   модул   қуйидаги структурага эга: UNIT <модуль номи>; Interface <очик тавсифлар бўлими> implementation <епик тавсифлар бўлими> begin <инициализация бўлими> end. Модуль  UNIT  хизматчи   сўзидан   бошланиб,   модул   номи   ёзилади.   Сўнгра  Interface  сўзи билан   тавсиф   бўлими   очилиб,   у   ерда   модулни   ташкил   этувчи   ўзгармас,   ўзгарувчи, процедура   ва   функциялар   тавсифланади,   эьлон   қилинади,   ўзгарувчилар   номи   ва   тури, процедура ва функциялар сарлавҳаси келтирилади. Лекин бу процедура ва функциялар танаси, ўзгарувчилар қийматлари implementation хизматчи сўзи билан бошланувчи бўлимда ёзилади. Бу бўлим ишчи бўлим деб юритилади. Бу бўлимда процедура ва функцияларнинг тўлиқ   структураси   келтирилади.   Шунинг   учун  interface  бўлимидаги   процедура   ва функциялар номлари implementation бўлимидаги номларига тўғри келиши керак. 1 Инициализация бўлими  begin  ва  end  сўзлари орасига жойлашиб, бошқариш асосий дастурга узатилишидан олдин бажариладиган операторлар жойлашади.  Қуйида мисол орқали иккита сондан энг кичигини аниқловчи  min(x,y) ва иккита сондан энг каттасини аниқловчи max(x,y) функциялари тавсифланган кичик бир модулни яратишни кўрамиз: UNIT STUDY; INTERFACE FUNCTION MIN(X,Y:INTEGER):INTEGER; FUNCTION MAX(X,Y:INTEGER):INTEGER; IMPLEMENTATION FUNCTION MIN(X,Y:INTEGER):INTEGER; BEGIN IF X<=Y THEN MIN:=X ELSE MIN:=Y; END; FUNCTION MAX(X,Y:INTEGER):INTEGER; BEGIN IF X>=Y THEN MAX:=X ELSE MAX:=Y; END;    END. Ушбу  модул  STUDY.PAS  номи  билан  хотирада  сакланади.  Яьни файл номи модул номи билан бир хил бўлиши керак. Модуль компиляциядан ўтгандан кейин STUDY.TPU номли файл ҳосил бўлади. Қуйидаги мисолда STUDY модулининг min ва max  функциялари ишлатилади.  USES CRT,STUDY; VAR A,B,MAX1,MIN1:INTEGER; BEGIN READ(X,Y); MAX1:=MAX(X,Y); MIN1:=MIN(X,Y); WRITE(MAX1,MIN1); END. Агар дастурда модулни ишлатмокчи бўлсак, у ҳолда дастур сарлавҳасидан сўнг USES сўзи билан бошланувчи модуллар бўлимини киритиш лозим, яьни USES <МОДУЛ НОМИ>; Агар дастурда бир неча модуллар ишлатилса, улар вергул билан ажратилади, масалан USES CRT,GRAPH; Энди биз стандарт модуллардан бири бўлган дисплей экрани билан ишлаш имконини берадиган  CRT  модулининг имкониятлари билан танишамиз. Маьлумки, матнли режимда дисплей экранида 25 та қатор ва ҳар бир қаторда 80 тадан белги жойлашади. Экран фони ва белгилар рангли ёки ок­кора, ўчиб ёнувчи бўлиши мумкин. Экранда ўчиб ёниб турувчи курсор   бўлади.   Биз   курсорни   экраннинг   ихтиёрий   жойига   кўчиришимиз,   ўша   жойга керакли   белгини   чиқаришимиз,   фон   ва   рангларни   ўзгартиришимиз,   умуман   дисплей экранини бошқаришимиз мумкин.  Ушбу модулнинг кўп ишлатиладиган процедура ва функциялари қуйидагилардир: Процедуралар: ­ GOTO(I,J) – курсорни экраннинг I­чи устун ва J­чи сатрига кучиради; ­ WRITE(S) – S қаторни курсор турган жойдан бошлаб чиқаради; ­ Textbackground(color) – фон рангини беради; ­ Textcolor(color) – матн рангини ўрнатади; ­ Clrscr – экранни тозалайди; 2 Sound(i) – i –чи частота билан товуш чиқаради; ­ ­ Delay(i) – дастур бажарилишини i миллисекунд ушлаб туради; ­ Nosound – товуш беришни тўхтатади; ­ Delline – курсор турган қаторни учиради;  Функциялар: ­ Keypressed  –   ихтиёрий   клавиш(тугма)   босилса,  TRUE,   акс   ҳолда  FALSE  қийматни қабул қилади. ­ Random(i) – 0 дан i гача бўлган тасодифий сонни беради. ­ Readkey – клавиатурадан белгини ўқийди. Масалан   с:=readkey;     бунда   шу   оператор   ўкилганда   кутиб   турилади   ва   клавиатурадан биринчи босилган белги с ўзгарувчисига берилади. Демак, с дастурда char типида бўлиши керак. Мисол учун қуйидаги дастур тушаётган томчи товушларини чиқаради ва бу ҳол клавиатурадаги ихтиёрий тугма босилгунча давом этади: USES CRT; BEGIN REPEAT Randomize; SOUND(1400+RANDOM(600)); DELAY(RANDOM(1300)); UNTIL KEYPRESSED; NOSOUND;    END. Қуйидаги мисолда дастур экраннинг тасодифий олинган нуқтасига “*” белгисини чиқаради: USES CRT; VAR T,I,T1,J,L:INTEGER; K:LONGINT; BEGIN CLRSCR;    I:=80; L:=25; FOR J:=1 TO 10 DO BEGIN RANDOMIZE; T:=RANDOM(L);    T1:=RANDOM(I); GOTOXY(T,T1);     WRITE(‘*’); FOR K:=1 TO 2500000 DO; {ПАУЗА ҲОСИЛ ҚИЛИШ} CLRSCR;END;  END. ГРАФИК РЕЖИМДА ИШЛАШ. GRAPH МОДУЛИ. Компьютер   экранини   график   тизимга   ҳам   ўтказиш   мумкин.   График   тизимнинг матнли   тизимдан   фарқи   шундаки,   бунда   экраннинг   ҳар   бир   нуқтасининг   рангини ўзгартиришимиз   ва   улардан   чизиқлар,   матнлар   ва   бошқа   ихтиёрий   чизмалар   ҳосил қилишимиз мумкин. Умуман, экран ёки матн , ёки график тизимда бўлади. Турбопаскалда график тизимда ишлаш учун махсус  GRAPG  модули мавжуддир. Ушбу модул ўзгармас, ўзгарувчи ва қисм дастурлардан ташкил топган бўлиб, улар асосида дастурчи   турли   график   адаптерлар   ёрдамида   ҳар   хил   тасвирлар   яратади.   Адаптер   – компьютерда GRAPH модули билан ишлаш имкониятини яратадиган махсус курилмадир. График   адаптерлар   билан   ишлаш   чоғида   экран   алоҳида­алоҳида   нуқталарга бўлинади. Ҳар бир нуқта иккита координатага эга бўлиб, чап томонда юқорида жойлашган нуқтанинг координатаси (0,0) га тенг. Экрандаги нуқталар сони эса адаптерларга боғлиқ. 3 Компьютерда   қайси   адаптер   ўрнатилганидан   катьий   назар,   биз   график   модул процедура ва  функцияларини ишлата оламиз. Бу имкониятни бизга  график драйверлар беради. График драйверлар – компьютер курилмасини бошқарувчи махсус дастур бўлиб, бу дастурлар .BGI  кенгайтмали файлларда сакланади. Кўп адаптерларда нуқталар сони горизонталига 630 та, вертикалда эса 470 та бўлиб ҳисобланади. GRAPH  модулида   80   дан   ортик   процедура   ва   функциялар   мавжуддир.   Улар ёрдамида   эллипс,   нуқта,   кесма,   тўғри   тўртбурчак,   кўпбурчаклар   чизиш,   экран   буйлаб ҳаракатга   келтириш   мумкин.   Ушбу   процедура   ва   функцияларни   ишлатишдан   олдин экранни график тизимга ўтказиш лозим. Чунки компьютер экрани стандарт  матн ҳолатида турган бўлади. График тизимга ўтиш учун GRAPH модулининг INITGRAPH процедураси ишлатилади. Бу процедуранинг умумий кўриниши қуйидагича: INITGRAPH(GD,GM,PATH); Бу ерда  GD – драйвер номери;                 GM – график тизим номери; PATH – керакли драйвер файли йули. Кўпинча драйвер ишчи каталогда жойлашган бўлади, шунинг учун  PATH  ўрнида бўш белги қўйилади. Агар  GD  ўрнида 0 сони турса, у ҳолда керакли драйвер автоматик тарзда аниқланади. Ана шу ҳолат кўп ишлатилгани учун GRAPH модулида қиймати нолга тенг   бўлган  Detect  ўзгармас   киритилган.  GM  ҳам   худди   шундай   автоматик   тарзда аниқланади. График   тизимдан   қайта   матн   тизимига   ўтиш   учун  CLOSEGRAPH  процедураси ишлатилади. Қуйида экранни график тизимга ўтказиш ва епиш дастурини келтирамиз: USES GRAPH; VAR GDRIVER,GMODE:INTEGER; BEGIN GDRIVER:=DETECT; INITGRAPH(GDRIVER,GMODE,’ ’); READLN; CLOSEGRAPH;  END. Қуйида  статик  чизмалар  ҳосил  қилиш  учун  ишлатиладиган  асосий  процедура  ва функциялар келтирилган: ­ Putpixel(x,y,color) – (x,y) координатадаги нуқтани color параметрида аниқланган рангга буяйди. ­ Getpixel(x,y) – (x,y) нуқтанинг рангини аниқлайди. ­ ­ ­ ­ ­ Line(x1,y1,x2,y2) – (x1,y1) нуқтадан (x2,y2)координатали нуқтага кесма ўтказади. Linerel(x,y) – (x,y) координатали нуқтадан жорий нуқтагача кесма чизади. Lineto(x,y) – жорий нуқтадан (x,y) нуқтагача кесма чизади. Circle(x,y,r) – маркази (x,y) нуқтада ва радиуси r га тенг бўлган айлана чизади. Restangle(x1,y1,x2,y2) – юқори чап нуқтаси (x1,y1) нуқтада, пастки ўнг нуқтаси (x2,y2) нуқтада бўлган тўғри тўртбурчак чизади. Setbkcolor(color) – фоннинг жорий рангини белгилайди. Setcolor(color) – чизиш учун жорий рангни белгилайди. График тизимда рангларни бериш учун қуйидаги ўзгармаслар ишлатилади: Const  Black=0;{кора} Blue=1;{кук} Green=2;{яшил} ­ ­ 4 Cyan=3;{фируза} Red=4;{кизил}  ва ҳоказо. Параметр ўрнида ўзгармасни ёзса ҳам, номерини қўйса ҳам бўлади. Қуйидаги дастур айланалар орқали нақш чизади: USES GRAPH; VAR I,J:INTEGER; GD,GM:INTEGER; BEGIN GD:=DETECT; INITGRAPH(GD,GM,’ ‘); FOR I:=0 TO 20 DO FOR J:=1 TO 20 DO CIRCLE(I*30,J*20,34); READLN; CLOSEGRAPH; END. Қуйидаги дастур бош диогнал буйлаб трубка ўтказади: USES GRAPH; VAR I,J:INTEGER; GD,GM:INTEGER; K:longint; BEGIN GD:=DETECT; INITGRAPH(GD,GM,’ ‘); FOR I:=0 TO 200 DO BEGIN CIRCLE(I*3,J*2,34); FOR K:=1 TO 22000000 DO;  {ПАУЗА ҲОСИЛ ҚИЛИШ } END;     READLN; CLOSEGRAPH; END; ­   Setfillstyle(style,color)   –  буяш  учун  жорий  ранг  ва  буяш  усулини  ўрнатади.  Масалан, соҳани  фон  ранги  билан  тўлдириш,  соҳани  қалин  горизонтал  чизиқлар  билан  тўлдириш, ингичка оғма чизиқлар билан тўлдириш ва ҳоказо. Мисол сифатида  Setfillstyle(2,4) – десак, соҳа қизил қалин қора чизиқлар билан қопланади. ­ ­ Bar(x1,y1,x2,y2) – жорий ранг ва штрихлар ёрдамида тўғри тўртбурчак чизади. Fillellipse(x,y,xradiys,yradiys)   –  жорий  ранг  ва  штрихлар  ёрдамида  эллипс  чизади. Эллипс ўқи координата ўкларига параллелдир. Floodfill(x,y,border)   –   жорий   ранг   ва   бўяш   усулидан   фойдаланган   ҳолда  Borderда кўрсатилган ранг билан чегараланган соҳани бўяб беради.  X,y  – соҳадаги ихтиёрий нуқтанинг координаталари. Қуйидаги дастурда Setfilestyle процедурасида берилган ранг ва бўяш усули ёрдамида экран кенглигида тўғри тўртбурчак ва унинг ичида фируза рангда ичи қизил ранг билан тўлдирилган эллипс чизади: USES GRAPH; VAR I,J:INTEGER; ­ 5 GD,GM:INTEGER; BEGIN GD:=DETECT; INITGRAPH(GD,GM,’ ‘); SETFILESTYLE(7,BLUE); BAR(0,0,GETMAXX,GETMAXY); SETCOLOR(CYAN); SETFILESTYLE(11,LIGHTRED); FILLELLIPSE(GETMAXX DIV 2,GETMAXY DIV 2,90,100); READLN; CLOSEGRAPH;          END.   ImageSize   функциясини Қуйидаги  дастур  Getimage,   Putimage  процедуралари  ва  ишлатган ҳолда тасвир чизилган тўғри тўртбурчакли соҳани эслаб қолади ва экраннинг берилган жойига берилган режимда чиқаради: USES crt; var gd,gm,size:integer; p:pointer;i:integer;  j:longint; begin gd:=detect; initgraph(gd,gm,' '); setfillstyle(10,lightgreen); bar(0,0,40,40); rectangle(0,0,40,40); size:=imagesize(0,0,40,40); getmem(p,size); getimage(0,0,40,40,p^); i:=1; repeat putimage(random(getmaxX),random(getmaxY),p^,normalput); i:=i+1; for j:=1 to 20000000 do; until i>1000; readln; closegraph;   end. График режимда матнлар билан ишлаш График режимда растрли шрифт ва бир неча векторли шрифтлардан фойдаланиш мумкин. Растрли шрифт нуқталар матрицаси, векторли шрифт эса символни ифодаловчи векторлар қатори билан берилади. Масштаблаш ва шрифтни танлаш қуйидаги процедура орқали амалга оширилади: SettextStyle(font, direction, size); Бу   процедура   мос   равишда   жорий   шрифт,   матнни   чиқариш   йўналиши   ва   символлар ўлчовини беради. Растрли   шрифтда   нормал   шрифт  Size=1   да,   векторли   шрифтда   эса  Size=4   да эришилади. Ҳар   хил   шрифт   ва   матнни   чиқариш   йўналиши   учун   қуйидагича   ўзгармаслар аниқланган: Const   {шрифтлар} Defaultfont=0  {8х8 стандарт растрли шрифт} Triplexfont=1 {векторли шрифт} 6 SmallFont=2 {векторли шрифт} SansSeriffont=3 {векторли шрифт} Gothicfont=4 {векторли шрифт} {матн ориентацияси} Horizdir=0 {чапдан ўнгга} Vertdir=1 {пастдан юқорига} OuttextXY(X,Y,Textstring) –  Textstring  сатрини (X,Y) координаталар нуқтасидан бошлаб чиқарилади. 7

Модули Turbo Pascal

Модули Turbo Pascal

Модули Turbo Pascal

Модули Turbo Pascal

Модули Turbo Pascal

Модули Turbo Pascal

Модули Turbo Pascal

Модули Turbo Pascal

Модули Turbo Pascal

Модули Turbo Pascal

Модули Turbo Pascal

Модули Turbo Pascal

Модули Turbo Pascal

Модули Turbo Pascal
Материалы на данной страницы взяты из открытых истончиков либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.
29.04.2019