Биз олдинги мавзуларда катта дастурлар учун процедура ва функциялар тузиш ва ишлатиш усулини кўриб ўтдик. Бу усул анча яхши натижаларни бериши мумкин. Лекин, баьзида бир хил типдаги процедура ва функциялар ишлатиладиган масалаларни жуда кўп марта қўллашга тўғри келиб қолади. Бу ҳолда ҳар бир дастур учун алоҳида эмас, балки умумий қўлланишда иштирок эта олувчи процедура ва функцияларга зарурият тугилиб қолади. Биз дастурларда ишлатадиган стандарт процедура ва функцияларни эслайлик. Ана шу процедура ва функциялар ҳам библиотекага биз хозир кўрадиган модул кўринишида ёзиб қўйилгандир.
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
Материалы на данной страницы взяты из открытых истончиков либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.