Программа денесі(операторлар тізбегі)



бет5/21
Дата16.03.2018
өлшемі5,46 Mb.
#39417
түріПрограмма
1   2   3   4   5   6   7   8   9   ...   21

ЖАЗБАЛАР
Массив сияқты жазба да көп мәліметтен тұрады. Бірақ массивтен айырмашылығы - жазбада әртүрлі типтерге жататын элементтер болуы мүмкін. Осыған байланысты жазбаның әртүрлі элементтеріне қол жеткізу механизмі ерекшеленеді. Массивте элементтердің орны индекс бойынша анықталады және массив элементтерін әртүрлі тәсілмен сұрыптауға болады. Ал жазбаға келетін болсақ, мұнда әр элементтердің жеке атауы бар, ал сұрыптау амалының мағынасы жоқ. Жазба (мәліметтердің комбинацияланған типі) қандай-да бір объект туралы ақпаратты біріктіруге қолайлы. Мұндай мәліметтер қандай-да техникалық құрылғының сипаттамалары немесе өндіріс орнының экономикалық мәліметтері немесе адам туралы мәліметтер болуы мүмкін. Жазбаны құратын элементтер өріс деп аталады.

Жазбаны сипаттау келесі түрге ие:

а=record

x,y:m;


. . .

z:n


end;

Мұндағы, а - комбинацияланған типтің атауы. RECORD және END резервтелген сөздер, бұлар жазба және соңы мағынасын береді, x,y,z - өріс атаулары, m,n- өрістер жататын типтер. RECORD сөзінен кейін үтір-нүкте қойылмайды. Жеке өрістердің сипатталуы үтір-нүктемен аяқталады.

Жазба өрістерін сипаттау кәдімгі айнымалыларды сипаттауға ұқсас. Өрістер кез-келген типке жата алады, яғни қарапайым, сол сияқты құрылымданған, сол сияқты стандартты қолданушы анықтаған типтерге жатуы мүмкін. Мысалы, өрістерінің өзі массив немесе жазба болатын жазбалар болады.

Жазба өрістері туралы бірнеше ескертулер:



  • Жазбадағы өрістер саны бекітілген және жазбаны сипаттау кезінде анықталады;

  • Жазба аясында өрістер атаулары қайталанбау керек;

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

  • Программадағы басқа идентификатор сияқты өріс атаулары ондағы ақпараттың мағынасына сәйкес болуы керек.

Мысал ретінде адамдар туралы мәліметтерді алайық. Осы жазбаны сипаттау кезінде программа төмендегідей сипатталады:

type


Employee=record

ID:word;{идентифиатор (жеке. номер)}

FirstName, SecondName, SurName: string 20;

{Аты, Тегі, Әкесінің аты}

Standing:byte; {өтілі}

Salary:real; {еңбекақысы}

End;

Var


Assistant: Employee;

Жоғарыда сипатталған Employee комбинацияланған типі 6 өрістен тұрады. Олардың 3-і - FirstName, SecondName, SurName - әрбіреуі 20 символдан тұратын жолдарды көрсетеді, қалғандары ID, Standing, Salary - мазмұнына сәйкес келетін типтері бар өрістер. Employee типтеріне жататын бір жазбаның мазмұны төмендегідей болады.


ID SurName FirstName SecondName Standing Salary

14873 Петров Иван Кузмич 15ж. 1000 сом.


Жоғарыдағы мысалда келтірілген ассистент айнымалысының әр түрлі өрістерін шақыру үшін төмендегідей көрсетуге болады.

Assistant.ID:=19876

Write(Assistant. FirstName);

Read(Assistant. SecondName);

Assistant. SurName:=” Петров”;

A:= Assistant. Standing;

B:= Assistant. Salary\100;

Басқаша сөзбен айтқанда, жазба өрістерімен амалдарды типін есепке ала отырып, кәдімгі айнымалылармен жұмыс істеген сияқты орындаймыз. Жоғарыдағы мысалда фамилия, аты, әкесінің атын көрсетуге арналған өрістер жолдар болып табылады. Сондықтан осы жолдардағы символдардың кез келгенін көрсету үшін жазба атауын, өріс атауын және жолдардағы символ нөмірін көрсету жеткілікті. Осындай шақыру төмендегідей болады және бұл оператор адам атының бірінші әрпін экранға шығарады.

Write (Assistant. FirstName [1]);

Мысалы: адамның аты мен әкесінің атынан инициалын алу қажет болсын. Онда:

Write(‘Петров’);

Write(Assistant. FirstName[1],’.’);

Write (Assistant.SecondName [1],’.’);

Осы операторлар тізбегінің жұмыс нәтижесі төмендегідей.

Петров И.К.
With операторы

Егер операторда құрама атаулар қолданылса, онда мұндай операторлар тым үлкен көлемде болады. Осындай жағдайда жазба атауын өріс атауларының сыртына шығарып, өрістермен әр түрлі әрекеттер орындай аламыз. Ал жазба атауын тақырып ретінде қоюға болады. Мұндай тақырыпты жасауға With операторы мүмкіндік береді. With операторының түрі төмендегідей.

With p do s;

Мұнда With және do резевтелген сөздері қолданылған, олар сәйкесінше осыдан бастап және орындау мағыналарына ие. P идентификаторы - комбинацияланған типті айнымалының атауы, S - оператор (көбінесе құрама).

Жоғарыда көрсетілген мысалдағы Assistant жазбасының 6 өрісін шақыруды төмендегідей ұйымдастыруға болады.

With Assistant do

Begin

ID:=19876;



Write(FirstName);

Read(SecondName);

SurName:= ‘Петров’;

a:=Standing;

b:=Salary/100

end;


Бұл жерде Assistant айнымалысы With операторынан кейін бір рет қана қолданылып тұр. Содан кейін өрістермен барлық амалдар тек қана өріс атауын көрсету арқылы орындалып тұр.

Жазбалармен жұмыс істеуге бір мысал келтірейік.

program Stud;

uses crt;

type

student=record



fam:string[20];

aty:string[10];

jasy:integer;

end;


var

top:student;

i:integer;

a:array[1..5] of student;

begin

clrscr;


with top do

begin


for i:=1 to 5 do

begin


writeln(i,'-student');

write('fam:'); readln(fam);

write('aty:'); readln(aty);

write('jasy:'); readln(jasy);

a[i]:=top

end;


end;

for i:=1 to 5 do

begin

with a[i] do



writeln(fam:20,aty:10,jasy:5);

end;


readln;

end.


Бұл мысалда type бөлімінде сипатталған комбинацияланған тип Student үш өрістен тұрады: fam:string[20]; aty:string[10]; jasy:integer; Айнымалыларды сипаттау бөліміндегі top айнымалысы типі Student болатын жазба. Осыдан кейін

әр элементінің типі Student болатын а массиві жарияланған. Ары қарай, цикл денесінде топтың әрбір студентінің фамилиясын, атын және жасын енгіземіз. Келесі цикл денесінде оларды экранға шығару ұйымдастырылған.


Иерархиялық жазбалар(бірінің ішіне бірі салынған жазбалар)

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

Type

Adress=record



Post Code:1..9999999;{ пошталық индекс}

City, street: string[20]; { қала, көше}

House: word; {үй}

Apartment: word {пәтер}

End;

Datе=record



Day:1..31;{күні}

Month:1..12;{айы}

Year:1900..2000{жылы}

End;


NewEmployeе=record

ID:word;


First name, second name, sur name: string [20];

Starding: byte;

Salary: real;

BirthDatе: Datе;

Habitation: address;

End;


Var

New Assistant: new employeе;

Жоғарыда сипатталған NewEmployeе комбинациялық типінде сегіз өріс бар. Олардың екеуі BirthDatе, Habitation өздері жазба болып табылады. Олардың типтері Datе, Address болып табылады, олар NewEmployeе типінің алдында жарияланған. Ішкі жазбалардың өрістеріне қол жеткізу үшін негізгі өріс атауы, ішкі жазба өріс атауы және өріс атауынан тұратын құрама атауды көрсету керек.

NewEmployeе.Address.PostCode



немесе

NewEmployeе.Date.Day



Егер, жазбалар бірнеше деңгейлі ішкі жазбаларға ие болса, онда құрама атаулар өте ұзын болады. Осы жағдайда жоғарыда сипатталған With операторы қолданады. 3-суретте NewEmployeе комбинациялық типінің құрылымы көрсетілген.



9-ДӘРІС Паскальдагы графика.

  1. Графика. Графикалық координаттар.

  2. Мәтіндік және графиктік режимдер.

  3. Мәтіндік және графикалық режимдер арасындағы ауысулар.

  4. Графиканы бағдарламалау принциптері.

  5. Графикалық режимді инициализациялау.

  6. Графикалық қарапайымдарды шығару.

  7. Graph модулінің процедуралары және функциялары.

Графикалық және текстік режимдер

Graph модулінің құралдары экранда тұтас экранға шығарылатын немесе қосымша жасалған терезелерге шығарылатын әртүрлі түрлі-түсті бейнелерді жасауға мүмкіндік береді. Сызықтар мен толтырулардың бірнеше типтері қолданылады. Шрифттардың масштабталуына икемделетін жиынтық бар. Модульдің бірқатар ішкі программалары экранда әртүрлі толтырылған және толтырылмаған фигураларды бейнелеуге мүмкіндік береді.



Графикалық режимге өту

Экранға қандай-да бір бейнені шығаруды жүзеге асыратын Graph модулінің процедуралары мен функцияларын пайдалану үшін алдымен графикалық режимді іске қосу (инициировать) қажет. Графикалық режимге өтуді InitGraph процедурасы жүзеге асырады.

InitGraph процедурасы видеоадаптердің графикалық режимге өтуін жүзеге асырады. Тақырыбы:

Procedure InitGraph(var Driver, Mode: Integer; Path: string);

Мұндағы Driver – графикалық драйверді анықтайтын параметр; Mode – көрсетілген драйвер үшін мүмкін графикалық режимдердің біреуін көрсететін параметр; Path – графикалық драйвер файлының атауы (немесе жолы);

Егер Path параметрінің мәні бос жолға сәйкес келсе, драйвер файлын іздеу ағымдағы каталогта жүргізіледі.

Driver параметрінің мәні Graph модулінде жарияланған тұрақтылардың жиынтығымен шектеледі. Бұл тұрақтылардың атауы мен мәндері төмендегі 1-кестеде көрсетілген.

1-кесте.



Тұрақты атауы

Сандық код

Detect

0 (Автоанықтау)

CGA

1

MCGA

2

EGA

3

EGA64

4

EGAMono

5

IBM8514

6

HercMono

7

ATT400

8

VGA

9

PC3270

10

Егер Driver параметрінің мәні Detect(0) – ге тең болса, жүйе видеоадаптердің типін автоматты түрде анықтауға тырысады. Бұл жағдайда InitGraph процедурасы DetectGraph процедурасын шақырады. Егер графикалық аппараттық жабдық табылса, сәйкес графикалық драйвер инициализацияланып, графикалық режим іске қосылады. Мұнда DetectGraph процедурасы жұмысын аяқтағаннан кейін Driver және Mode параметр-айнымалыларының мәндері драйвердің сәйкес коды мен видеоадаптердің жұмыс режимінің мәндерін қабылдайды. Егер Driver параметрі Detect мәнінен басқа болса, драйвер көрсетілген мәнге байланысты таңдалынады. Осыдан кейін видеожүйе берілген Mode параметрі анықтаған режимге өтеді.

DetectGraph процедурасы (әдетте InitGraph процедурасымен шақырылатын) құрылғыны тестілеп, осы видеоадаптерге қандай графикалық драйвер мен режим сәйкес келетінін анықтайды. Тақырыбы:

Procedure DetectGraph(var Driver, Mode: Integer);

Мұндағы Driver – графикалық драйвердің сәйкес келетін типін анықтайтын параметр; Mode – осы драйвер қолдайтын графикалық режимдердің біреуін беретін параметр.

Driver параметріне Detect-тен басқа мән беру қажеттілігі DetectGraph процедурасы ұсынған драйверден басқа драйвер қолдану қажет болған жағдайда туындайды.



  • Егер InitGraph процедурасында белгілі бір драйвер (яғни Driver параметріне Detect-тен басқа мән берілсе) көрсетілсе, бұл жағдайда сол сияқты осы драйвер үшін мүмкін режим көрсетілуі қажет (Mode параметрі).

  • Автотабуды қолдану мақсаты – кез-келген видеоадаптерлі компьютерде жұмыс істейтін программа жасау екенін түсіну қажет. Егер графикалық драйвер мен режим анық көрсетілген болса, бұл жасалынған программаны қолдануды күрделендіреді.

Егер сіз автотабуды қолданбауға шешім қабылдасаңыз (яғни Driver параметріне Detect-тен басқа мән бергіңіз келсе), онда таңдалынған драйверге мүмкін графикалық режим көрсетуіңіз қажет. Әртүрлі видеоадаптерлерге арналған режимдерді анықтайтын тұрақтылар мен олардың сандық кодтары төмендегі 2-кестеде көрсетілген.

2-кесте.



Тұрақтының атауы

Код

Шешім

Палитра

Беттерді қолдау

CGA драйвері

CGAC0

0

320x200

C0

1

CGAC1

1

320x200

C1

1

CGAC2

2

320x200

C2

1

CGAC3

3

320x200

C3

1

CGAHi

4

640x200

2 түс

1

MCGA драйвері

MCGAC0

0

320x200

C0

1

MCGAC1

1

320x200

C1

1

MCGAC2

2

320x200

C2

1

MCGAC3

3

320x200

C3

1

MCGAMed

4

640x480

2 түс

1

MCGAHi

5

640x480

2 түс

1

EGA драйвері

EGALo

0

640x200

16 түс

4

EGAHi

1

640x350

16 түс

2

EGA64 драйвері

EGA64 Lo

0

640x200

16 түс

1

EGA64Hi

1

640x350

4 түс

1

EGA-MONO драйвері

EGAMonoHi

3

640x350

2 түс

1

EGAMonoHi

3

640x350

2 түс

2

HERC драйвері

HERCMonoHi

0

720x348

2 түс

2

ATT400 драйвері

ATT400C0

0

320x200

C0

1

ATT400C1

1

320x200

C1

1

ATT400C2

2

320x200

C2

1

ATT400C3

3

320x200

C3

1

ATT400CMed

4

640x200

2 түс

1

ATT400CHi

5

640x400

2 түс

1

VGA драйвері

VGALo

0

640x200

16 түс

2

VGAMed

1

640x350

16 түс

2

VGAHi

2

640x480

16 түс

1

PC3270 драйвері

PC3270Hi

0

720X350

2 түс

1

IBM8514 драйвері

IBM8514Lo

0

640x480

256 түс

1

IBM8514Hi

0

1024x768

256 түс

1

Кестенің 4-ші бағанында түстер туралы ақпарат көрсетілген.


Графикалық амалдың қателігі

Графикалық амалдарды орындау кезінде әртүрлі қателіктер болуы мүмкін (мысалы, видеоадаптерді анықтай немесе драйверді таба алмады). Егер қателік болса, оның сипатын анықтауға GraphResult функциясы көмектеседі.

GraphResult функциясы соңғы орындалған графикалық амал қателігінің кодын береді. Тақырыбы:

Function GraphResult: Integer;

Қателік кодын Graph модулінің келесі процедуралары мен функциялары орнатады:

Bar, Bar3D, ClearViewPort, CloseGraph, Detect Graph, DrawPoly, FillPoly, FloodFill, Get GraphMode, ImageSize, InitGraph, InstallUserDriver, InstallUserFont, PieSlice, RegisterBGIdriver, RegisterBGIfont, SetAllPalette, SetFillPatterrn, SetFilllStyle, SetGraphBufSize, SetGraphMode, SetLineStyle, SetPalette, SetTextJustify, SetTextStyle.

GraphResult функциясы қайтаратын мәндер Graph модулінде жарияланған тұрақтылармен анықталады.

Графикалық амалдардың қателіктерінің тұрақтылары мен кодтары 3-кестеде көрсетілген.



3-кесте

Тұрақты атауы

Код

Текстік хабарлама

grOk

0

Қатесіз

grNoInitGraph

-1

Графикалық режим инициализацияланбаған

grNotDetected

-2

Адаптер типін анықтай алмады

grFileNotFound

-3

Драйверлі файл табылмады

grInvalidDriver

-4

Табылған файл сәйкес драйверден тұрмайды

GrNoLoadMem

-5

Драйверді жүктеуге жады жеткіліксіз

grNoScanMem

-6

Аймақтарды қарауға жады жеткіліксіз

grNoFloodMem

-7

Аймақтарды толтыру үшін жады жеткіліксіз

grFontNotFound

-8

Қаріптері бар файл табылмады

grNoFontMem

-9

Қаріпті жүктеуге жады жеткіліксіз

grInvalidMode

-10

Таңдалынған драйверге мүмкін емес режим

grError

-11

Жалпы қателік

grIOerror

-12

Енгізу-шығару қателігі

grInvalidFont

-13

Қаріптің дұрыс емес форматы

grInvalidFontNum

-14

Қаріптің дұрыс емес номері

GraphResult функциясын шақырғанда графикалық амалдың қателігінің кодын шақырады, және де бұл кезде жүйеде қателік коды 0-ге (grOk) орнатылады. Егер соңынан GraphResult функциясын қайта шақырса, онда осы нәтиже (grOk) қайтарылады.

GraphResult функциясының нәтижесінен қателік сипатын ұғу қиын болады. Сондықтан Turbo Pascal-да GraphErrorMsg функциясы қарастырылған. Оның параметрі ретінде GraphResult функциясы қайтарған код көрсетіліп, нәтижесі сәйкес қателік туралы экранға шығарылатын хабарлама болып табылады.

GraphErrorMsg функциясы оның сандық коды бойынша қателік туралы хабарлама мәтінін (ағылшын тілінде) қайтарады. Тақырыбы:

Function GraphErrorMsg(ErrorCode:Integer):string;

Мұндағы, ErrorCode - GraphResult функциясы қайтарған қателік коды.

Төмендегі мысалдағы программа барлық қателіктердің сандық кодтарын және оларға сәйкес хабарламаларды экранға шығарады.

Program GrErMsg;

Uses Graph;

Var i:integer;

Begin


For i:=0 to 14 do

Writeln(-i:3, ‘=’, GraphErrorMsg(-i));

End.
Қолданылатын графикалық режим туралы ақпарат

Осы мезетте қандай графикалық режим (DetectGraph процедурасы арқылы таңдалынған) қолданылып тұр? Қандай графикалық драйвер қолданылып тұр? Осы графикалық адаптер үшін қолданылған драйвердің қай графикалық режимін мейлінше қолдануға болады. Графикалық программаларды құру кезінде көбінесе осындай сұрақтарға жауапты білу қажет болады. Осы мәліметтерді анықтауға GetModeName, GetDriverName, GetMaxMode процедуралары көмектеседі.

GetModeName функциясы графикалық режим қолданатын тұрақтының атауын қайтарады. Тақырыбы:

Function GetModeName(ModeNumber:Integer):string;

Мұндағы ModeNumber – графикалық режимнің коды.

GetDriverName функциясы осы мезетте драйверлер қолданып тұрған файлдың атауын (кеңейтілусіз) көрсетеді (яғни, .BGI-файлдар). Тақырыбы:

Function GetDriverName:string;

GetMaxMode функциясы ең мүмкін графикалық режимнің кодын береді. Тақырыбы:

Function GetMaxMode: Integer;

GetMaxMode функциясы осы қолданылған адаптер жұмыс істей алатын ең мүмкін графикалық режимнің (жүктелген графикалық режимнің) кодын анықтауға мүмкіндік береді.

Төмендегі мысалдан GetModeName, GetDriverName, GetMaxMode функциялары қолданылған программаны көресіздер:

Program ModDrive;

Uses graph;

Var i,j,k,Err:integer;

Begin

I:=Detect;



Initgraph(i,j,’ ‘);

Err:=GraphResult;

If Err<>grOk then

Writeln(GraphErrorMsg(Err))

Else

For k:=0 to GetMaxMode do



Begin

Writeln(‘драйвер:’, GetDriverName, ‘; Режим: ‘, GetModeName(k));

End;

Readln;


CloseGraph;

End.


Бұл программада графикалық режимге өтуді келесі операторлар жүзеге асырады:

I:=Detect;

Initgraph(i,j,’ ‘);

Графикалық режимге өтуде қателік жіберілгенін тексеру келесі түрде жүзеге асырылады:

Err:=GraphResult;

If Err<>grOk then

Writeln(GraphErrorMsg(Err))

Else...


Мұндай тексеру графикалық режим қолданылатын әрбір программада қарастырылу керек (GraphResult функциясы дәл осыған арналған).

Әрі қарай GetModeName, GetDriverName және GetMaxMode функцияларының көмегімен қажетті ақпарат анықталып (драйвер файлының атауы және мүмкін графикалық режимдер тізімі), экранға шығарылады.

Мұндай программаны іске қосқаннан кейін графикалық режим қосылып, жұмыс нәтижелері графикалық экранға шығарылады. Бұл нәтижелерді көру үшін ең дұрысы программаға параметрсіз Readln операторын қосқан дұрыс. Нәтижесінде программа пернетақтадан енгізуді тосып, экрандағы бейнені көруге мүмкіндік бере отырып, жұмысты тоқтата тұрады. Программа жұмысын жалғастыру үшін пернесін басу жеткілікті.

Ең соңында графикалық режимдегі видеоадаптердің жұмысын аяқтайтын CloseGraph процедурасы шақырылады.


Графикалық драйверлер режимі

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

GetModeRange процедурасы көрсетілген графикалық драйвер үшін мүмкін графикалық режимдердің кодтарының диапазонын береді. Тақырыбы:

Procedure GetModeRange(Driver:Integer; var MinMode, MaxMode:Integer);

Мұндағы Driver – берілген графикалық драйвер коды; MinMode -«ең кіші» режим коды; MaxMode – шектік режим коды.

Егер Driver – параметрінің мәні қате болса, онда MinMode және MaxMode айнымалылары -1 мәнін қайтарады.

GetModeRange процедурасын қолданар алдында графикалық режимге өту міндетті емес.

Төмендегі мысалдан GetModeRange процедурасын қолдануды көруге болады:

Program ModeRange;

Uses Graph;

Const

D:array[1..11] of String[8]=



(‘CGA ‘,’MCGA ‘, ‘EGA ‘,’EGA64 ‘, ‘EGAMono’, ‘IBM8514 ‘,’HercMono ‘, ‘ATT400 ‘, ‘VGA ‘,’PC3270 ‘,’ERROR ‘);

Var i,j,k:integer;

Begin

Writeln;


Writeln(‘Driver’, ‘MinMode’:11, ‘MaxMode’:10);

Writeln(‘---------------------------------------------’);

For i:=1 to 11 do

Begin


GetModeRange(I,j,k);

Writeln(d[i],j:6,k:10)



End;

End.
Программа нәтижесі:





Достарыңызбен бөлісу:
1   2   3   4   5   6   7   8   9   ...   21




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет