Программа құруға ыңғайлы тамаша тілдердің бірі- паскаль тілі. Оны


с. 1
МАЗМҰНЫ






КІРІСПЕ

3

І.

1. ГРАФИКТІК РЕЖИМДЕ ЖҰМЫС.

4




1.1. Экранды басқаратын процедуралар мен функциялар.

5




1.2. Графиктік фигуралар салу процедуралары

9

ІІ.

1.3. Графиктік режимде текст шығару процедуралары.

16




1.4. Графиктік режимде қателерді өңдеу.

20




1.5. Фигураларды жылжыту.

22




ҚОРЫТЫНДЫ

25




ҚОЛДАНЫЛҒАН ӘДЕБИЕТТЕР

26




ҚОСЫМША

27

КІРІСПЕ
Программа құруға ыңғайлы тамаша тілдердің бірі- Паскаль тілі. Оны оқып үйрену,түсіну және логикалық ойлау өте қара- пайым,әрі жеңіл. Паскаль программалаудың структуралық тәртібін және программалаудың басқа тілдерге қарағанда мысалы,Бейсик тіліне қарағанда әлдеқайда жақсы дамығанын айқындады. Оның қызықты рекурсивтік мүмкіндіктері,сонымен қатар әділ жөн сілтеу технологиясы да қолдау жасап отыр.

Енді бірер ауыз сөз тілдің тарихына тоқталатын болсақ алгоритімдік тіл АЛГОЛ 1950-1960 жылдары өңделді. Паскаль АЛГОЛ-дың ұрпағы болып саналады. Оны өңдеген швециялық,жоғары техникалық училищесінің профессоры Никлаус Вирт болды. Ол бұл тілді дүние жүзінде алғаш есептеу машинасын жасаған ұлы француз ғалымы Блез Паскальдың құрметіне «Паскаль» деп атаған. Паскальдың туған уақыты 70 жылдардың басы болатын. АЛГОЛ-мен салыстырғанда Паскаль түсінікті әрі өте жеңіл. АЛГОЛ-да жоқ болған нәрселердің барлығы Паскальда бар. Онда көптеген жақсы өңделген мәліметтер және қорытылып жаңа үлгіде тұрғызылған процедуралары бар.

Турбо Паскаль Borland фирмасының кеңейтілген стандартты тілі болып табылады,сонымен қатар интегралдау ортасын жеңілдету және тездету процесінде өңдеу программасын қалыпты сақтайды. Турбо Паскаль 7.0 пайда болғанша,бұл программалық өнім жеті версиядан өтті.

1. ГРАФИКТІК РЕЖИМДЕ ЖҰМЫС.

Ол процедуралар мен функцияларды графиктік режим орнату үшін программаның басында келесі амалдар орындау қажет:

USES қызметші сөзінде GRAPH модулі жазылады:

USES Graph;

VAR

d1,d2:Integer;
BEGIN


dl:=Detect;
I nitGraph(d1, d2, 'C:\Turbo\Graph');

мұндағы:


InitGraph - графикалық режимді орнату процедурасы,

d1- графиктік режим драйверініңтипін,

d2 - видеоадаптердің жұмыс режимінің нөмірін анықтайтын тұрақтылар.
Бұл шамалар монитор мен видеадаптер типтеріне байланысты болады. Егер программада графиктік режим драйверінің типіне Detect стандартты тұрақты шамасы берілсе, онда InitGraph процедурасы автоматты түрде өзіне керекті графиктік драйвердің типін және монитор мен видеоадаптердің типтеріне сәйкес келетін графиктік жұмыс режимін анықтап алады. Апострофтардың ішінде орналасқан үшінші параметр Graph.tpu файлының дискіде орналасқан жолын көрсетеді. Егер ол Turbo Pascal терезесін ашқан Turbo. Ехе файлымен бірге бір каталогта орналасатын болса, онда Graph.tpu файлының орналасқан жолы орнына бос екі апостроф қойылып кетеді.
1.1. Экранды басқаратын процедуралар мен функциялар.

Экранның фоны SETBKCOLОR процедурасының көмегімен орнатылады, жазылуы:



SETBKCOLOR(C);

мұндағы: С - түс коды 0-ден 15-ге дейін өзгереді. Бұл процедураның орындалу нәтижесінде экран С номерлі түске боялып шығады. Бұл процедурамен орнатылған түс кодының мәнін GETBKCOLOR процедурасының көмегімен анықтауға болады.

Экрандағы барлық салынған графиктік объектілерді өшіріп тастау үшін параметрсіз CLEARDEVICE процедурасы қолданылады. Бұл процедураның орындалу нәтижесінде графиктік режимде орнатылған барлық параметрлер(фон түсі, курсор орны, терезелер т.б.) күшін жойып, экран тазарып курсор қайтадан координаттары (0,0) болатын экранның сол жақ жоғарғы бұрышындағы нүктеге апарылады.

Графикалық режимнің көзге көрінбейтін сілтеме- көрсеткіш курсоры болады. Курсорды басқару үшін MOVETO және MQVEREL процедуралары қолданылады.



MОVETO процедурасы курсорды координаттары өзінде көрсетілген орынға апарып қояды, мысалы:

MOVETO(X,Y); //курсорды А(Х,Ү) нүктесіне апарып қояды

MOVEREL процедурасы курсорды бұрынғы тұрған жерінен X және Ү осі бойынша өзінде көрсетілген сәйкес шамаларға тең нүктелерге жылжытып апарып қояды, мысалы:

MOVEREL(X1,Y1);//курсорды А(Х,Ү) нүктесінен А1(Х+Х1,Ү+Ү1)

нүктесіне апарып қояды

Курсордың тұрған жерін анықтау үшін GET функциясы қолданылады, мысалы:



A:=CetX; //курсор түрган жердің X осіндегі координатын анықтау

B:=GetY; //курсор түрған жердің Ү осіндегі координатын анықтау

X және Ү осіндегі барлық нүктелер санын анықтау үшін GETMAX функциясы қолданылады. Бүл функцияларды монитор мен видеоадаптердің типін білмегенде пайдаланған ыңғайлы, мысалы:



A:=CetmaxX; //А - X осінің ең үлкен мәнін меншіктейді

B:=GetmaxY;//B - Y осінің ең үлкен мәнін меншіктейді
Бұдан басқа Getmax функциясын экран ортасының координаттарын анықтау үшін де қолдануға болады, мысалы:

Xc:=GetmaxX Div 2; Yc:-GetmaxY Div 2; Putpixel(Xc, Yc, 5);

//экранның қақ ортасынан нүкте шығару немесе:

Circle(GetmaxX Div 2, GetmaxY Div 2,30);

//экранның қақ ортасынан шеңбер шығару

Текстік режимдегідей графиктік режимде де графиктік фигураларды бөлек терезелер ішіне салуға болады. Терезе орнату үшін SETVIEWPORT процедурасы қолданылады. Терезе орнатылғаннан кейін координаттар басы ретінде терезенің сол жақ жоғарғы бұрышы(0,0) алынады, жазылуы:



SETVIEWPORT(X1, Y1,X2, Y2, Clip);

мұндағы: Х1.Ү1 - орнатылатын терезенің сол жақ жоғарғы бүрышының координаттары; Х2.Ү2 - орнатылатын терезенің оң жақ төменгі бүрышының координаттары;



Clip - салынатын графиктік объектінің терезенің сыртына шығатын бөлігін экранда көрінуін анықтайтын бульдік шама. Егер Clip:=True болса, онда ол бөлік көрінбей кесіліп қалады, егер Clip:=False болса - көрініп тұрады.

Ағымдағы терезенің ішін тазалау үшін CLEARVIEWPORT процедурасы қолданылады. Процедураның орындалу нәтижесіндетерезе ішіндегі барлықобъектілер өшіріліп, курсор терезенің сол жақ жоғарғы бүрышына барып орнапасады.



SETVIEWPORT процедурасының көмегімен орнатылған терезе тек қана экранның SETBKCOLOR процедурасымен орнатылған түсімен шығады. Сондықтан ол терезе көзге көрінбейді. Терезе көзге көріну үшін өлшемдері орнатылатын тереземен бірдей іші экранның түсінен бөлек түспен боялған тіктөртбұрыш шығарып алынады.

Орнатылған терезе параметрлерінің мәндерін текстік режимге шығып GETVIEWSETTING процедурасынының көмегімен алуға болады,

Графикалық режимнен шығу үшін параметрсіз CLOSEGRAPH проиедурасы қолданылады. Бұл процедураның орындалу нәтижесінде компьютердің жадынан орнатылған графиктік режим драйверлері тазаланып, экранның графиктік режим орнатылар алдындағы жұмыс режимі қайта орнайды.

Кей жағдайлардатекстік режимнен графиктік режимге, одан қайтадан текстік режимге бірнеше рет өтетін программалар құру керек болады. Ол үшін экранда орнатылған графиктік және текстік режимдерді қалыпқа келтіретін SETGRAPHMODE және параметрсіз RESTORECRTMODE процедуралары қолданылады, мысалға:

Графиктік режимнен текстік режимге өтіп, одан қайтадан графиктік режимге өтіп жумыс жасау.

PROGRAM Gr1;

USES

Graph, Crt;

VAR

d1,d2:Integer;

V:Viewporttype;

BEGIN

d1:=Detect;

Initgraph(d1,d2,'');

Setbkcolor(9);

Setcolor(S);

Outtextxy(200,250, 'Graph Rejim');

ReadLn;

Restorecrtmode;

Textbackground(2);

Clrscr;

Gotoxy(Lo(WindMax) Div2,Hi(WindMax) Div2);

Textcolor(5); Writeln('Text Rejim');

Readln;

Setgraphmode(d2);

Setbkcolor(2);

Circle(GetmaxX Div 2, GetmaxY Div 2,150);

Line( 100, GetmaxY Div 2, 500, GetmaxY Div 2);

LinefGetmaxX Div 2, 50, GetmaxXDiv2, 450);

Readln;

Closegraph

END.

1.2. Графиктік фигуралар салу процедуралары


Графиктік фигуралардың түсін орнату үшін SETCOLOR процедурасы қолданылады, процедураның жазылуы:

SETCOLOR(C);

мұндағы: С - палитрадағы түс коды 0-ден 15-ге дейін өзгереді(түс кодтарының шкаласы алдыңғы тарауда берілген). Бұл процедураның орындалу нәтижесінде графиктік фигуралар С номерлі түске боялып шығады.

Бұл процедурамен орнатылған түс кодының мәнін анықтау үшін GETCOLOR процедурасы қолданылады.

Палитрадағы ең үлкен түстің коды GETMAXCOLOR процедурасымен анықталады. Палитра түстерінің барлық мәндерін GETDEFAULTPALETTE процедурасы арқылы анықтауға болады. Бір мезгілде палитрадағы түс кодтарын өзгерту керек болса, онда SETPALLETE процедурасын қолдану арқылы бірнеше түстердің, SETALLPALLETE процедурасымен палитрадағы барлық түстердің орналасуын өзгертіп жаңа палитра алуға болады.

Палитрадағы немесе жаңадан жасалған палитрадағы түстердің орналасуы мен олардың санын GETPALETTE және GETPALbiIESIZEL. Нүкте салу үшін PUTPIXEL процедурасы қолданылады, жазылуы:

PUTPIXEL(X,Y,C);

Бұл процедураның орындалу нәтижесінде экранның координаттары X және Ү болатын позициясына С нөмірлі түспен нүкте шығарады.

Салынған нүктенің түсін GETPIXEL функциясымен анықтауға болады, жазылуы:

C:=GETPIXEL(X, Y); немесе WRITELN(GETPIXEL(X, Y));

Бұл функцияның орындалу нәтижесінде координаттары X және Ү болатын нүктенің түсі анықталады. ,

Түзу салу үшін LINETO және LINEREL процедуралары да қолданылады. Түзу салу процедураларының жазылуы:

1)LINE(X1, Y1,X2, Y2);

Бұл процедураның орындалу нәтижесінде экранға төбелерінің координаттары Х1,Ү1,Х2,Ү2 болатын түзу салып шығарады.



LINETO(X,Y,);

Бұл процедураның орындалу нәтижесінде экранға курсор түрған жерден бастап координаттары Х,Ү болатын нүктеге дейін түзу салып шығарады.



LINEREL(X1,Y1);

Бұл процедураның орындалу нәтижесінде экранға курсор тұрған жерден бастап координаттары курсор түрған жердің сәйкес координаттарына Х1-мен Ү1-ді қосқандағы шамаға тең болатын нүктеге дейін түзу салып шығарады.

Түзулерді әртүрлі стильдерде шығару үшін SETLINESTYLE процедурасы қолданылады, жазылуы:

SETLINESTYLE(L, P, T);

мұндағы: L – түзу стильдері:

L=0 - түзу үздіксіз, L=1 - нүктелерден қүралады,

L-2 - нүктелер мен сызықшадан турады,

L=3 - штрихтерден қуралады,

L=4 - түзу стилін пайдаланушының өзі анықгайды.

Р - түзу үлгісі, егер түзу стильдері стандартты болса Р=0, түзу стилін пайдаланушының өзі берсе Р=4 деп кабылданады.

Т - түзудің қалыңцығы, егер түзу қалыңцығы қалыпты болса, онда 7=7, ал түзу калындығы жуан болса Т=3деп кзбылданады.



SETWRITEMODE(M) процедурасының көмегімен экранда бір-бірімен қиылысатын түзулердің байланысы орнатылады. Егер М параметрі 0-ге тең болса, онда түзулердің қиылысқан жерлері экранға кәдімгі режимде шығып көрініп түрады. Егер М параметрі 1-ге тең болса, түзулердің қиылысқан жерлері көрінбей түрады.

Экранда салынған түзу стилі параметрлерінің мәндерін GETLINESETTINGS процедурасының көмегімен текстік режимде шығарып алуға болады.

Тік төртбұрыш шығару үшін RECTANGLE процедурасы қолданылады, жазылуы:

RECTANGLE(X1, Y1,X2, Ү2);

мұндағы: Х1,Ү1,Х2,Ү2 - тік төртбурыштың бүрыштарының координаттары.

Бұл процедураның орындалу нәтижесінде экранға сол жақ жоғарғы бұрышының координаттары Х1,Ү1 болатын, ал оң жақтөменгі бүрышы Х2.Ү2 болатын тік төртбүрыш шығады. Бұл процедураның көмегімен сапынған тік төртбүрыштың ішінің түсі экранның фонының түсімен бірдей шығады. Мысалы төмендегі программада биіктіктері кездейсоқ сандар шығаратын функция көмегімен өзгеріп түратын әртүрлі 12 тік төртбұрыш шығады, егер екінші параметр орнына жыл айларында түскен жауын-шашын мөлшерлерінен тұратын массив болса, онда экранда жыл бойына түскен жауын-шашын диаграммасын алуға болады:

Жауын-шашын диаграммасын шығару:



PROGRAM Gr61;

USES

Graph;

CONST

A:Array[ 1..12]Of lnteger=(205, 178, 315, 180, 65, 54, 28, 15, 53, 132, 240, 105);

VAR

k,i,d1,d2:lnteger;

BEGIN

d1:=Detect;

Initgraph(d1,d2,' ');

Setbkcolor(1);

Setcolor(5);

K:=1; Forl:=1 To 12 Do

Begin

K:=K+49;

Rectangle(K-20,450-A[l],K+30,450);

End;

Readln;

Closegraph

END.
Экранда боялған тік төртбүрыш салу үшін BAR процедурасы қолданылады, жазылуы:

BAR(X1,Y1,X2,Y2);

Бұл процедураның орындалу нәтижесінде экранға сол жақ жоғарғы бұрышының координаттары Х1.Ү1 болатын, ал оң жақ төменгі бұрышы Х2,Ү2 болатын, алдында орнатылған фигураны бояумен толтыру стиліндегі параметрлермен боялған тік төртбүрыш шығады. Егер процедураның алдында толтыру стильдері орнатылмаса, онда тік төртбүрыш экранға ақ түспен шығады.

Фигуралардың ішін бояумен толтыру стилі SETFILLSTYLE поцедурасымен орнатылады, жазылуы:

SETFILLSTYLE(N, C);

мұндағы: С - түс коды;

N - толтыру типі(өрнегі):

N=0 - фонның түсімен толық толтырылады,

N=1 - көрсетілген С түсімен толықтолтырылады,

N=2 - сызықшалармен толтырылады,

N=3 - көлбеу сызықтармен толтырылады,

N=4 - жуан көлбеу сызықтармен толтырылады,

N=5 - жуан кері көлбеу сызықтарментолтырылады,

N=6 - кері көлбеу сызықтармен толтырылады,

N=7 - + символдарымен толтырылады,

N=8 - х символдарымен толтырылады,

N=9 - тік бүрышты торлармен толтырылады,

N=10 - аралары алшақ орнапасқан нүктелермен толтырылады,

N=11 - аралары жиі орналасқан нүктелермен толтырылады,

N = 12 болған жағдайда суреттің өрнектерін пайдаланушының өзі SETFILLPATTERN процедурасының көмегімен орнатады, жазылуы:



SETFILLPATTERN(X,C);

мұндағы: С - түс коды,

X - Fillpatterntype-типті сурет өрнектерін орнататын шама, 8x8 элементтерден туратын матрица түрінде беріледі. Х-ке 8 байт орны беріледі, әр бит матрицадағы пикселдерді "жандырып" немесе "өшіріп" тұрады. Х шамасы 8 байттан тұратын массив ретінде беріледі:

TYPE

Fillpatterntype=Array[1 ..8] Of Byte;

VAR

X:Fillpatterntype;

Пайдаланушылар орнатқан толтыру стильдері параметрлерін GETFILLPATTERN процедурасымен анықтауға болады, жазылуы:



GETFILLPATTERN(I);

мұндағы: I - элементтері орнатылған стиль параметрлерінен тұратын Fillpatterntype-типті массив. Массив элементтерін графиктік режимнен шығып, экранға цикл арқылы шығаруға болады.

Үш өлшемді боялған тік төртбүрыш(немесе параплелепипед) салу үшін BAR3D процедурасы қолданылады, жазылуы:

BAR3D(X1, Y1,X2, Y2,D, T);

мұндағы:Х1, Ү1 - тіктөртбурыштыңсолжақжоғарғыбурышының координат-тары, Х2, Ү2 - тік төртбурыштың оң жак, төменгі бұрышының координа ттары, D өлшемді контур тереңдігін көрсететін шама, ішке қарай кіріп түратын нүктелер санын білдіреді. Т - бульдік шама, егер Т:=Тгие болса, онда шығатын параллелепипедтің төбесі көрініп тұрады, егер T:=False болса, онда көрінбейді.



Rectangle процедурасымен салынған тік төрбүрыштардың немесе кез-келген басқа да шектеулі фигуралардың ішін FLOODFILL процедурасымен бояуға болады, процедураның жазылуы:

FLOODFILL(X,Y,C);

мұндағы: Х,Ү- шектелген фигураныңішінде жататын кез-келген нүктеніңкоординаттары, егер нүкте фигураның сыртында жатса, онда фигураның сырты боялады, егер фигура шектелмеген болса, онда бояусыртқа шығып экранның барлық ашық жері боялады. С - түс коды.

Көпбұрыштар салу үшін DRAWPOLY процедурасы, ал іші боялған көпбұрыш салу үшін FILLPOLY процедурасы қолданылады. Бұл процедуралар параметрлерінің мәндері бірдей шамалар болады, олардыңжазылуы:

DRAWPOLY(N,P); FILLPOLY(N,P);

мұндағы:


N - көпбүрыштың қабырғаларының қиылысусанын білдіретін

бүтін шама, Р - көпбүрыштың бүрыштарының координаттарын білдіретін Pointtype-типті шама(элеметтерін көпбурыштың координаттарыболып табылатын бүтін сандардан тұратын массив ретінде қарастырса да болады).

Соңғы салынған доғаның параметрлерін білу үшін GETARCCOORDS процедурасы қолданылады, жазылуы:

GETARCCOORDS(A);

мұндағы: A - соңғы салынған доғаға орнатқан параметрлер мәндерінен тұратын стандартты ArcCoordsType - типті шама.

Эллипс немесе эллипстік доғалар салу үшін ELLIPSE процедурасы қолданылады, жазылуы:

ELLIPSE(X, Y,A, B, Rx, Ry);

мұндағы: Х,Ү - эллипс центрініңкоординаттары, А,В - бастапқы және соңғы бұрыштар, Rx.Ry – эллипстің Х осі және Ү осі бойынша радиустары.

Боялған эллипсті алдын-ала Setfillstyle, Setcolor процедураларында бояу стильдерін беріп, FILLELLIPSE процедурасын қолданып салады, жазылуы:

FILLELLIPSE(X, Y, Rx, Ry);

мұндағы: Х,Ү - эллипс центрінің координаттары, Rx,Ry - эллипстіңХосі және Үосі бойынша радиустары.

Шеңбердің боялған секторын салу үшін PIESLICE процедурасы қолданылады, жазылуы:

PIESLICE(X, Y,A, B, R);

мұндағы:


Х,Ү- шеңбер центрінің координаттары,

А,В – сектордың бастапқы және соңғы бұрыштары,

R – шеңбердің радиусы.

Эллипстің боялған секторын салу үшін SECTOR процедурасы қолданылады, жазылуы:



SECTOR(X, Y,A, B, Rx, Ry);

мұндағы:


X, Ү - эллипс центрінің координаттары,

А,В - сектордың бастапқы және соңғы бұрыштары,

Rx, Ry - эллипстіңХосі және Үосі бойынша радиустары.

Секторлар іші алдын-ала Setfillstyle немесе Setfillpattern процедураларында орнатылған стильдермен толтырылып боялады.

1.3. Графиктік режимде текст шығару процедуралары.
Графиктік режимде текст шығару үшін OUTTEXT және OUTTEXTXY процедуралары қолданылады. OUTTEXT процедурасы тексті курсор тұрған жерден бастап шығарады. Сондықтан бұл процедураны қолданғанда алдымен Moveto процедурасымен курсордың тұрған орнын көрсетіп кету керек. Көп жағдайларда бұл процедураны қолданған ыңғайсыз болғандықтан OUTTEXTXY процедурасы қолданылады, процедураның жазылуы:

ОиТТЕХГХҮ(Х, Ү, 'text');

мұндағы: Х,Ү - текст басталатын жердің нүктесінің координаттары.

Graph модулінде сандық шамаларды шығару процедуралары жоқ болғандықтан, графиктік режимде алдымен олар Str процедурасының көмегімен жолдық қатарлы айнымапыларға айнапдырып алынады. Сонан соң ол айнымалы OUTTEXTXY процедурасындағы текстің орнына жазылады, немесе процедурада жазылған текспен + амалының көмегімен біріктіріліп экранға шығарылады, мысал ретінде келесі программаны қарастыруға болады.

PROGRAM Gr10;

USES

Graph;

VAR

d1,d2,X: Integer;

Y:Real;

Z:String;

BEGIN

d1:=Detect;

InitGraphfdl, d2, ");

Setbkcolor(2);

X:=150;

Str(X,Z);

Outtextxy( 100,100, 'X= l+Z);

Y:=231.25;

Str(Y:4:2,Z);

Outtextxy(100,110,Z);

ReadLn;

CloseGraph;

END.

Экранға текстерді әртүрлі стандартты және пайдаланушының өзі орнататын шрифтермен де шығаруға болады, ол үшін SETTEXTSTYLE процедурасы қолданылады, жазылуы:



SETTEXTSTYLE(F, D, С);

Мұндағы: F- таңцалған шрифт түрі(0 - биттік, 1 - штрихтық, 2 - кіші, 3 - сансериф, 4 -готикалықшрифт), D - текстіңжазылу бағыты(0 - горизонтальді, 1 – вертикальді бағыт), С - символдар өлшемі(1 - биттік, 2 - екі еселенген, т.с.с. 10-ға дейін).

Шрифтің өлшемдерін пайдаланушының өзі SETUSERCHARSIZE процедурасының көмегімен орнатса да болады, жазылуы:

SETUSERCHARSIZE(MX, DX, MY, DY);

мұндағы: MX, DX, - шрифтің горизонтальді өлшемін анықтайтын параметрлер, MX/DX қатынасының қалыпты жағдайдағы шрифтің еніне көбейтіндісі жаңа шрифтіңенініңшамасынбереді. MY, DY - шрифтің вертикальді өлшемін анықгайтын параметрлер, MY/DY қатынасының қалыпты жағдайдағы шрифтің биіктігіне көбейтіндісі жаңа шрифтің биіктігінің шамасын береді. Бұл шамалардың мәнін: биіктігін ТЕХТНEIGHT және енін TEXTWIDTH фунщияларын қолданып есептеуге болады, мысалға:



X:=Textwidth(T);

Y:=Textheight(T));

Бір қатарда жазылған символдардың орналасуын өзгерту үшін SETTEXTJUSTIFY процедурасы қолданылады, жазылуы:



SETTEXTJUSTIFY(H, V);

мұндағы:


Н - символдарды горизонтальді бағытта түзеу:

- символды солға қарай жылжыту,

- орталықгандыру,

- оңға қарай жылжыту.

V- символдарды вертикальді бағытта түзеу:

- символды төменге қарай жылжыту,

- орталықтандыру,

- төменге қарай жылжыту.





PROGRAM Gr11;

USES Graph;

VAR

d1,d2: Integer;

BEGIN

d1Ж=Detect; I

nitGraph(d 1, d2, ");

Setbkcolor(2);

Settextstyle(1,0,10);

Outtextxy(100,100, 'TEXT');

Settextstyle(3,1,5);

Outtextxy(150,250,'TEXT');

ReadLn;

CloseGraph;

END.
PROGRAM Gr111;

USES

Graph;

VAR

d1,d2: Integer;

BEGIN

d1:=Detect;

InitGraph(d1,d2,'');

Setbkcolor(2);

Settextstyle(1,0,1);

Setusercharsize(2,1,2,1);

Outtextxy(100, 100, 'TEXT');

Setusercharsize(1,2,1,2);

Outtextxy( 100,200, 'TEXT');

Setusercharsize( 14,3,22,5);

Outtextxy(100,300, 'TEXT');

ReadLn;

CloseGraph;

END.

1.4. Графиктік режимде қателерді өңдеу.


Графиктік программалардың орындалу барысында басқа программалардай(мысалы файлдарды енгізу-шығаруда) қателер шығуы мүмкін. Сондықтан графиктік программалардың дүрыс құрылғандығын тексеру үшін арнаулы GRAPHRESULT және GRAPHERRORMSG функциялары қолданылады. GRAPHRESULT функциясы программада өзінің алдында жазылған оператордың орындалуының дүрыстығын тексеріп, жіберілген қате кодын анықтайды. Бұл функцияның орындалуы файлдардағы IORESULT функциясына ұқсайды.

ЕГЕР соңғы графиктік амал дүрыс орындалса онда GRAPHRESULT функциясы 0-ді меншіктейді, әйтпесе ол жіберілген қате кодтарының нөмірін қабылдайды.



If GraphResult = 0 Then

Begin

...

графиктік операторлар

...

End

Else

Writeln('графиктік режимде қате кетті');
GRAPHERRORMSG функциясының көмегімен программада жіберілген қате туралы текстік сипаттама шығаруға болады. Бүл функцияныңтипі жолдық қатар, ал нақты параметрі GRAPHRESULT функциясының мәні болып табылады, мысалы жоғарыдағы фрагментті программада қате кеткен кезде бірден оның қате туралы хабарымен бірге шығаруға болады:

If GraphResult = O Then

Begin

...

графиктік операторлар

...

End

Else

Writeln('мынадай қате:', GraphErrorMsg(GraphResult));
Қателер коды мен сипаттамалары туралы мәлімет.

GRAPHRESULT GraphErrorMsg(GraphResult)

0 GrOk (қате жоқ)

-1 GrlnitGraph (графиктік режим ашылған жоқ)

-2 GrNotDetected (драйвердің типі анықталмаған)

-3 GrFileNotFind (графиктік драйвер табылмаған)


-4 GrlnvalidDriver (драйвердің типі сәйкес емес)

-5 GrNoLoadMem (драйвердің орналасуына жад жетпейді)

-6 GrNoScanMem (объекті көруге жадтан орын жетпейді)

-7 GrNoFloodMem (бояуға жадтан орын жетпейді)

-8 GrFontNotFound (шрифт орнататын файл табылмаған)

-9 GrNoFontMem (шрифт орналастыруға жад жетпейді)

-10 GrlnvalidMode (графиктік режим дүрыс емес)

-11 GrError (жалпы қате)

-12 GrIOError (енгізу-шығаруда қате жіберілген)

-13 GrlnvalidFont (шрифт форматы дүрыс берілмеген)

-14 GrlnvalidFontNum (шрифт нөмірі дұрыс берілмеген)

1.5. Фигураларды жылжыту.

Экранда фигуралардың жылжу эффектілері циклдік процестермен жүзеге асырылады. Цикл денесінде бірінші фигураны бояу стильдері орнатылады, одан кейін жылжитын дене экранда алғашқы көрінетін орнының координаттарымен шығарылады. Сонан соң фигураның экранда кішкене уақыт көрініп түруы үшін Delay процедурасы қолданылады. Одан кейін экрандағы барлық көрініс Cleardevice процедурасымен өшіріледі де цикл аяқталады.

Фигураны шығару процедурасының кемінде бір параметрі цикл параметрімен байланысты болуы тиіс. Сонда циклдің әр орындалуында фигура жаңа орынға шығарылып түрады. Ал циклдік программа толық орындалғанда фигура бір орыннан кішкене уақыт көрінгеннен кейін өшіріліп қалып, циклдің келесі мәнінде қайтадан жаңа орыннан кішкене уақыт көрініп өшіріліп қалып, әрі қарай циклдің әр келесі мәндерінде дәл осындай процестер жүріп отырады да, сырт көзге фигура жылжып бара жатқан сияқты көрінеді.

Экранда тік төртбүрыш X осі бойымен жылжыту.

а):


PROGRAM Gr13;

USES

Graph, Crt;

VAR

d1,d2,K: Integer;

BEGIN

d1 := Detect;

ІnitGraph(d1, 62, "};

If Graph Result <>0

Then Halt(1);

Fork:=1 To 100 Do

Begin

Setbkcolor(2);

Setfillstyle(1,5);

Bar(K+100,200, K+300,350);

If K< 100 Then

Begin

Delay(700);

Cleardevice

End;

End;

ReadLn;

CloseGraph;

END.
ә) Ү осі бойымен жылжыту:

PROGRAM Gr13;

USES

Graph, Crt;

VAR

d1,d2,K:Іnteger;

BEGIN

d1:=Detect;

InitGraph(d1, d2, ");

If Graph Result <>0

Then

Halt(1);

For k:=1 To 100 Do

Begin

Setbkcolor(2);

Setfillstyle( 1,5);

Bar(200, K+50, 400, K+250);

If K< 100 Then

Begin

Delay(700);

Cleardevice

End;

End;

ReadLn;

CloseGraph;

END.

ҚОРЫТЫНДЫ

Компьютердің мониторы нүктелердің (пикселдердің) жиынтығынан тұрады. Ал символдарды нүктелердің жиынтығы құрайды. Егер текстік режимде тек символдармен ғана жұмыс жасалса, графиктік режимде әрбір нүктелермен жұмыс жасауға болады. Мысалы текстік режимде символдар түсін өзгертуге болатын болса, графиктік режимде әрбір нүктенің түсін немесе нүктелерден құралған әртүрлі фигуралар мен текстердің түстерін әртүрлі қылып шығаруға болады. Компьютердің графиктік режимдегі жұмысы монитор мен оның видеоадаптерімен тығыз байланысты. Монитор кәдімгі телевизор секілді жүмыс істейді. Экрандағы бейнелер секундына 25 рет жоқ болып кетіп қайта құралады. Адамның көзі мүндай кадрлардың тез ауыстырылып жатқанын сезбейтіндіктен, оған экрандағы бейне бір орында тұ0рғандай болып әсер етеді.

Графиктік режимде экранға бейнелер шығару үшін координаттар жүйесі қолданылады. Бейнелерді құрайтын нүктелер экранда қатарлар бойынша реттеліп орналасатындықтан, бір қатардағы нүктелер X осі бойынша солдан оңға қарай өзгереді деп, ал қатарлар - Ү осі бойынша жоғарыдан төмен қарай өзгереді деп алынады. Нүктелердің басы ретінде экранның сол жақ жоғарғы бұрышынан Х=0 және Ү=0 деп алынады. Ал барлық қатарлар(МахҮ) мен ондағы орналасқан нүктелер саны(МахХ) видеоадаптердің типі мен оның жүмыс режиміне байланысты болады.

Turbo Pascal-да графиктік режимде жұмыс істеуге арналған арнаулы функциялар мен процедуралар GRAPH библиотекалық модулінің құрамында жазылған. GRAPH модулі 80-ге жуық графикалық функциялар мен процедуралардан және оншақты стандартты тұрақтылардан тұрады.

ҚОЛДАНЫЛҒАН ӘДЕБИЕТТЕР




  1. Абрамов А.Г., Трифонов Н.П., Трифонова Г.Н. Введение в язык Паскаль. М., Наука, 1988.

  2. Абрамов С.А., Гнездилова Г.Г., Капустина Е.Н., Селюн М.И. Задачи по программированию. М., Наука, 1988.

  3. Ахо А., Хопкрофт Дж., Ульман Дж. Построение и анализ вычислительных алгоритмов. М., Мир, 1979.

  4. Вирт Н. Алгоритмы и структуры данных. М., Мир, 1989.

  5. Епанешников А., Епанешников В. Программирование в среде Turbo Pascal 7.0. М., Диалог-Мифи, 1993.

  6. Зуев Е.А. Система программирования Turbo Pascal. М., Радио и связь, 1992.

  7. Зуев Е.А. Программирование на языке Турбо-Паскаль 6.0,7.0. М. Радио и связь. Веста. 1993.

  8. Йодан Э. Структурное программирование и конструирование программ. М.: Мир, 1979.

  9. Кенин А.М., Печенкина Н.С. Работа на IBM PC. М., АО "Книга и бизнес", 1992.

  10. Кнут Д. Искусство программирования на ЭВМ. М.: МИР, т.1, 1976; т.2, 1977; т.3, 1978.

ҚОСЫМША

Программа Листингі

program Menu;

uses crt,graph;

const

nmenu=7;{количество пунктов меню}



DO_=262;

RE=294;


MI=330;

FA=349;


SOL=392;

LIA=440;


S=494;

var


ch:char;

functionkey:boolean;

GD,GM:integer;

width,height,depth,text_color,back_color,select_text_color,

select_frame_color,frame_color,

select_back_color,screen_back_color,

wx,wy,dy,i,crm:integer;

strmenu:array[0..nmenu-1]of string[40];

{инициализируются значения переменных}

procedure Init;

begin

GD:=0;


Initgraph(GD,GM,'d:\bp\bin');

{устанавливаются цвета}

text_color:=Black;

back_color:=LightBlue;

select_text_color:=White;

select_frame_color:=Yellow;

frame_color:=White;

select_back_color:=LightRed;

screen_back_color:=LightGray;

dy:=20;{расстояние между строками}

wx:=15;{координата х левого верхнего угла}

wy:=35;{координата у левого верхнего угла}

width:=250;{ширина меню}

height:=18;{высота "шпалы" меню}

depth:=10;{глубина "шпалы" меню} crm:=0; {номер строки меню,которая будет подсвечена первоначально(нумерация начинается с нуля)}

strmenu[0]:='„До';

strmenu[1]:='Ре';

strmenu[2]:='Ми';

strmenu[3]:='Фа';

strmenu[4]:='Соль';

strmenu[5]:='Ля';

strmenu[6]:='Си';

end;

{процедура первоначально выводит на экран меню}



Procedure Draw_Menu;

var i,j,y:integer;

begin

SetFillStyle(1,screen_back_color);



Bar(0,0,GetMaxX,GetMaxY);

SetTextJustify(CenterText,CenterText);

for i:=0 to nmenu-1 do

if i<>crm then

begin

y:=wy+i*(height+dy);



SetColor(frame_color);

SetFillStyle(1,back_color);

Bar3D(wx,y,wx+width,y+height,depth,TopOn);

SetColor(text_color);

OutTextXY((wx+width) div 2,y+(height div 2),strmenu[i]);

end


else

begin


y:=wy+i*(height+dy);

SetColor(select_frame_color);

SetFillStyle(1,select_back_color);

Bar3D(wx,y,wx+width,y+height,depth,TopOn);

SetColor(select_text_color);

OutTextXY((wx+width) div 2,y+(height div 2),strmenu[i]);

end;

end;


{обновляет изображение меню,соответственно значениям old-старый номер текущей (подсвеченной) строки,sel-новый номер текущей (подсвеченной) строки}

Procedure New_Menu(old,sel:integer);

var

y:Integer;



begin

y:=wy+old*(height+dy);

SetColor(frame_color);

SetFillStyle(1,back_color);

Bar3D(wx,y,wx+width,y+height,depth,TopOn);

SetColor(text_color);

OutTextXY((wx+width) div 2,y+(height div 2),strmenu[old]);

y:=wy+sel*(height+dy);

SetColor(select_frame_color);

SetFillStyle(1,select_back_color);

Bar3D(wx,y,wx+width,y+height,depth,TopOn);

SetColor(select_text_color);

OutTextXY((wx+width) div 2,y+(height div 2),strmenu[sel]);

end;


{реакция на нажатие клавиши "стрелка вверх"}

Procedure Up;

var old:integer;

begin


old:=crm;

crm:=crm-1;

if crm<0 then crm:=nmenu-1;

New_Menu(old,crm);

end;

{реакция на нажатие клавиши "стрелка вниз"}



Procedure Down;

var old:integer;

begin

old:=crm;



crm:=crm+1;

if crm>=nmenu then crm:=0;

New_Menu(old,crm);

end;


{процедура получает управление при нажатии клавиши Enter}

procedure Do_Select(crm:Integer);

begin

if crm=0 then



begin Sound(DO_); Delay(500); Nosound; end;

if crm=1 then

begin Sound(RE); Delay(500); Nosound; end;

if crm=2 then

begin Sound(MI); Delay(500); Nosound; end;

if crm=3 then

begin Sound(Fa); Delay(500); Nosound; end;

if crm=4 then

begin Sound(SOL); Delay(500); Nosound; end;

if crm=5 then

begin Sound(LIA); Delay(500); Nosound; end;

if crm=6 then

begin Sound(S); Delay(500); Nosound; end;

end;


{эта процедура анализирует код нажатой клавиши и, в зависимости от него, передает управление процедурам Up, down}

Procedure DoCommand(Key:char;functionkey:boolean);

begin

{если была нажата клавиша "Enter"}



if(not functionkey) AND(upcase(key)=#13) then

Do_Select(crm);

if functionkey then{если клавиша специальная}

case upcase(key) of

#72:Up;{была нажата клавиша "стрелка вверх"}

#80:Down;{была нажата клавиша "стрелка вниз"}

end;

end;


begin

Init;


Draw_Menu;

repeat


ch:=readkey;

if ch=#0 then

begin

functionkey:=True;



ch:=readkey;

end


else functionkey:=False;

DoCommand(ch,functionkey);

until(upcase(ch)=#27);

end.





с. 1

скачать файл