ОҚУ-Әдістемелік материалдар семей 2013. мазмұны



бет8/16
Дата25.04.2016
өлшемі7.2 Mb.
#89166
1   ...   4   5   6   7   8   9   10   11   ...   16

Нақты типтер


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

Ұзындығы байт

Атауы

Мәнді цифрлар мөлшері

Мәндер аралығы

8

Real

15...16

5,0*10324- …1,7*10308

4

Single

7...8

1,5*10-45 …3,4*1038

8

Double

15...16

5,0*10-324 … 1,7*10308

10

Extended

19...20

3,4*10-4951 …1,1*104932

8

Comp

19...20

-263…+263-1

8

Currency

19...20

922 337 203 685 477,5807

Кестеде көрсетілгендей, Object Pascal тілінде нақты сандар 4-тен 10 аралығындағы аралас байтқа дейін орын алады.

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

Мысалы, «машиналық эпсилонды» мынадай программа көмегімен есептеуге болады:

typeRealType=Real;

Var Epsilon, Eps 1: RealType;

Epsilon:=Epsilon/2;

Eps1:=1+ Epsilon;

Until Eps=1;

LBOutput.Caption:=FloatToStr(2* Epsilon)

End.

Object Pascal тілінде Comp және Currency типтері ерекше орын алады, бөлшек бөлігінің ұзындығы шектеулі нақты сан ретінде қарастырылады: Comp типінің бөлшек бөлігінің ұзыдығы 0 (ноль) разряд, яғни болмайды, ал Currency типінің бөлшек бөлігінің ұзындығы 4 ондық разряд. Бұл аталған екі типке 19...20 мәнді ондық цифрды сақтайтын үлкен бүтін санды анықтайды. Бұл типтерді бухгалтерлік есептеуде қолданған өте ыңғайлы.



Нақты мәліметтермен жұмыс істеу үшін орнатылған математикалық функцияларды пайдалануға болады: abs(x), arctan(x), cos(x), frac(x) –санның бөлшек бөлігі; int(x)–санның бүтін бөлігі; ln(x) –натурал логорифм, Random-0..1 аралығындағы псевдокездейсоқ сан; Randomize - псевдокездейсоқ сандар генераторын орнату; sqr(x)-x – тің квадраты; sqrt(x) – тің квадрат түбірі.

Псевдо кездейсоқ сандар генераторы – базалық деп аталатын қандай да бір бүтін санды алып, оның разрядын белгілі бір анықталған алгоритм бойынша өзгертіп, нәтиже ретінде жаңа санды береді. Сонымен бірге, функцияға оралғанда жаңа сан базалық болады және т.с.с. (Сөйтіп процедура алгоритмі жұмыс барысында өзгермейтін сандар деп аталады). System жүйелік модулінде кез келген программада автоматты түрде кіруі мүмкін болатын базалық сан RandSeek айнымалысында сақталады және оның барлық уақытта бастапқы мәні 0-ге тең. Бұл Random функциясына әр түрлі программамен оралғанда бірдей кездейсоқ сандар тізбегінің шығатынын көрсетеді. Мысалы, төмендегі оқу программасынның BbRunClick терезесіне 300 кездейсоқ сан шығарылады, олар 20 саннан жолға топтастырылып, егер сан үш цифрдан кем болса, нольмен толықтырылады. Егер программаны қайтадан орындайтын болсаңыз, дәл сондай сандар тізбегін аласыз.

Procedure TfmExample.bbRunClick(Sender:TObject);

Var k:integer; s, ss:string;

Begin

S:=’’;


For k:=1 to 300 do

Begin


Ss:=intToStr(Random(1000));

While Length(ss)<3 do

Ss:=’0’+ss;

S:=s+ss+’’;

If k mod 20=0 then

Begin


mmOutput.Lines.Add(9);

s:=’’


end

end


end.
Randomize процедурасының көмегімен RandSeek айымалысына сандардың басқа тізбегін шығаратын жүйелік уақыттың сандық мәні орналасады.

Күн және уақыт типі


Күн, уақыт типі TdataTime стандартты идентификаторымен анықталады, ол уақытты және күнді бір мезгілде сақтауға арналған. Жадыдағы ішкі орналасуы бойынша 8 байт орын алады, Currency типіне ұқсас, шектеулі бөлшек бөлігі бар нақты сан: санның бүтін бөлігінде күн, бөлшек бөлігінде уақыт сақталады.

Күнмен және уақытпен жұмыс істеу төмендегідей қосалқы программалар пайдаланылады:



  1. Function Date:TDateTime; –ағымдағы күнді береді;

  2. Function DateToStr (D:TDateTime):String;-күнді символдар жолына түрлендіреді;

  3. Function DateTimeToStr (D:TDateTime)- күн мен уақытты символдар жолына түрлендіреді;

  4. Function FormatDateTime(Format:String; Value:TDateTime):String;П – күн мен уақыт Format параметрінің спецификаторына сәйкес Value параметрін символдар жолына түрлендіреді;

  5. Function Now:TDateTime; – ағымдағы күн мен уақытты береді;

  6. Function Time:TDateTime – ағымдағы уақытты береді;

  7. Function TimeToStr – уақытты жолға айналдырады.

Төмендегі BbRunClick өңдеуші оқу программасының көмегімен енгізу жолына кез келген нақты санды енгізіп, оны TDateTime типінің мәні ретінде көруге болады:

Procedure TfmExample.bbRunClick(Sender:TObject);

Var k:double;

Begin


Try

K:=StrToFloat(edinput.text);

Except

ShowMessage; (“Нақты санның жазылуында қате бар”);



Edinput.SelectAll;

Exit


End;//Нәтижені күн-уақыт ретінде көрсетеміз LBOutput.Caption:=FormatDateTime(‘dd.mm.yyyy.hh:mm:ss,k’);

//енгізу жолын Edinput-қа айналдыру

Edinput.SetFocus;

End;


ТАПСЫРМА:
ТАПСЫРМАНЫ ОРЫНДАУҒА ӘДІСТЕМЕЛІК НҰСҚАУЛАР:
ҰСЫНЫЛАТЫН ӘДЕБИЕТТЕР: [1-9]
БЕКІТУ СҰРАҚТАРЫ:


  1. Object Pascal тіліндегі мәліметтер типіне жалпы сипаттама беріңдер.

  2. Қарапайым типке қандай типтер жатады?

  3. Реттелген типке қандай типтер жатады?

  4. ORD(X) жәнеPRED(X) функцияларының қызметі қандай және оларды қандай типтерге қолдануға болады?

  5. SUCC(X) функциясының қызметі қандай?

  6. Бүтін тптердің қандай түрлері бар және олар қалай белгіленеді?

  7. Бүті типтерге қандай стандартты процедуралар мен функциялар қолданылады?

  8. Object Pascal тілінде логикалық тптердің ұандай түрлері қолданылады.

  9. Символдық типтер қалай белгіленеді және олардың мәндері қалай анықталады?

  10. Саналатын типтер қалай белгіленеді олардың ең жоғарғы мәні қаншаға тең?

  11. Аралық тип деп қандай типті айтамыз және олар қалай бейнеленеді?

  12. Аралық типтердің қызметін сүйемелдейтін функцияларды атаңдар және олардың қызметтері қандай?

  13. Реттелген типтерден нақты типтердің айырмашылығы қандай?

  14. Нақты типтермен жұмыс істеуге арналған математикалық функцияларды атаңдар және олардың қызметі қандай?

  15. Күн және уақыт типі қалай анықталады?

  16. Күн және уақытпен жұмыс істеуге арналған қандай қосалқы программалар бар?

  17. Object Pascal тілінде қанша құрылымдық тип бар?

Зертханалық жұмыс №7

Тақырыбы: Құрылымдық типтер
Мақсаты Delphi ортасының жұмысына жалпы сипаттама
Қолданылатын материалдар мен құрал- жабдықтар:

Компьютер, Delphi программалау ортасы
Теориялық түсініктеме:

Кез келген құрылымдық типтер осы элементтер типін құрайтын жиынмен сипатталады. Object Pascal тілінде оларды 4- ке бөлуге болады: массивтер, жиындар және файлдар.

Object Pascal тілінде типтер бірінің ішіне бірі еркін орналаса алады, олардың кез келгенінің ұзындығының қосындысы 2 Гбайттан аспауы тиіс.

Масссивтер

Object Pascal тілінде массивтер басқа программалау тілдеріндегі элементтер типіне ұқсас келеді. Массивтердің айырымдық ерекшеліктері олардың компоненттерінің бәрі бір типті мәліметтер болады (құрылымдық болуы мүмкін). Бұл компоненттерді өте оңай реттеуге және олардың реттік номерін көрсету арқылы кез келгенімен жұмыс істеуге болады, мысалы:

Type

Digit=array[0..9] of char;



Matrix=array[byte] of single;

Var


M:matrix:

D:digit:


I:integer:

Begin


End.


Массивтер типі төмендегідей сипатталады:

<тип аты>=array[<индекстік типтер тізбегі>] of<тип аты>;

Мұндағы <тип аты>- индентификатор атауы;

Array, of- қызметші сөздер;

<индекстік типтер тізбегі>- үтір арқылы ажыратылған бір немесе бірнеше индекстік типтер тізбегі.

Object Pascal тілінде индекстік тип ретінде өлшемі 2 Гбайттан артпайтын кез келген реттелген типті пайдаланцуға болады.

Айнымалыны массив ретінде анықтауға болады, массив типін алдын- ала сипаттамай- ақ, айнымалы ретінде тікелей сипатталынады. Мысалы,

Var


a,b:array[1..10] of real:

Әдетте, индекстік тип ретінде аралық тип пайдаланылады, мұнда индекстін шекарасының өзгерісі беріледі. Массивті сипаттауда of сөзінен кейінорналасқан типтің өзі Object Pascal-дың кез келген типі болуы мүмкін, тіпті басқа массив болуы мүмкін.

Мысалы,

Type


Mat=array[0..5] of array[-2..2] of array[char] of byte;

Мұндай жазуды ықшамды етіп сипаттауға болады:

Type

Mat=array[0..5,-2..2,char] of byte;



Дербес компьютердің жадында массив элементтері кіші адрестен үлкен адреске көшкенде массивтің оң жақ индкесті жылдам өзгеретіндей болып бірінен соң бірі орналасады.мысалы, егер

Var


a:array[1..2,1..2] of Byte;

Begin


a[1,1]:=1;

a[2,1]:=2;

a[1,2]:=3;

a[2,2]:=4;

end.

Болса, онда жадында 1, 3, 2, 4 мәндерімен байттар бірінен соң бірі орналасады.



Object Pascal тілінде бір массивтің барлық элементтерін басқа массивке меншіктеу операторы арқылы беруге болады. Мысалы,

Var


a,b:array[1..5] of single;

begin


a:=b;


End.


Меншіктеу командасы орындалғаннан кейн А массивінің элементтері В массивінің элементтерімен бірдей болады.

Массивтер үшін қатынас операциялары анықталамаған.

Мысалы, төмендегі жазу қате:

If a=b then…

Екі массив элементтері бойынша салыстырылады. Мысалы:

Var


a,b:array[1..5] of single;

p: Boolean;

i: byte;

begin


P:=true;


For i= 1 to 5 do

Ifa[i]<>b[i] then p:=False;

If p then

End.



Динамикалық массивтер. Delphi- дің 4- нұсқасынан бастап динамикалық массивтер енгізілген. Программада мұндай массивтердібейнелегенде индекстің шекараларын көрсетудің қажеті жоқ:

Var


A:array of integer;

B:array of array of char;

C:array of array of array of real;

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

SetLegth(А, 3);

Бір өлшемді А динамикалық массиві тағайындалады, яғни үш бүтін санды орналастыруға жететін жадыдан орын бөлінеді. Динамикалық массивтің кез келген өлшемі бойынша индекстің төменгі шекарасы 0 (нолге) тең, сондықтан А массивтің индексінің жоғарғы шекарасы 2- ге тең болады.

Динамикалық массивтің идентификаторы жадының алғашқы байтының адресінен тұратын көрсеткішке сілтеме жасап, бөлінген орынға массивті орналастырады. Сондықтан осы жадыны босату үшін индентификаторға Nil мәнін меншіктеу жеткілікті (басқа тәсілмен Finanaize процедурасмын пайдалануаға болып табылады).

Var


A,B:array of integer;

Begin // жадыны үлестіреміз:

SetLegth(А, 10);

SetLegth(B, 20);//Массивтреді пайдаланамыз:

A:=Nil;

Finanalize(B);



End;

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

Көп өлшемді массивтерде алдымен оның алғашқы өлшемінің ұзындығын тағайындалады, одан кейін екінші, үшінші т.с.с.

Мысалы,


Var

A:array Of array of integer;// екі өлшемді динамикалық массив;

Begin // бірінші өлшемнің ұзындығын тағайындаймыз (бағандар өлшемі);

SetLegth(А, 3);

// әрбір бағанның ұзындығын береміз;

SetLegth(А[0], 3);

SetLegth(А[10], 3);

SetLegth(А[2], 3);

End;


Динамикалық массивтің әдеттегі массивтен айырмашылығы оның екінші, үшіші өлшемінде ұзындықтары әртүрлі болуы мүмкін. Алдынғы мысалда өлшемі 3х3 квадрат массив анықталған. Үшбұрыш массив құрып көрейік:

SetLegth(А, 3);

// әрбір бағанның ұзындығын береміз;

SetLegth(А[0], 3);

SetLegth(А[10],4);

SetLegth(А[2], 5);

Көпөлшемді динамикалық массивтерде N-1 өлшемінің әрбір элементі динамикалық массив болуы мүмкін, сондай- ақ, ол тағайындауды талап етеді. Мысалы 3х3х3 өлшемді нақты куб массивті тағайындау қажет:

Var


A:array Of array of integer;

I,j:integer;

Begin

SetLegth(А, 3);



For i:=0 to 2 do

Begin


SetLegth(А[i], 3);

For i:=0 to 2 do

SetLegth(А[I,j], 3);

End;


End;


Енді Delphi ортасында массив элементтерімен жұмыс істеуге қажетті компоненттерді қарастырайық.

Delphi ортасында экранға массив элементтерін енгізу және шығаруды компоненттер палитрасын Additional бетінде орналасқан Stringrid компонентінің көмегімен ұйымдастырылаған ыңғайлы. Бұл компонент ақпаратты кесте түрінде бейнгелеу үшін пайдаланылады. Кесте белгілкенген және жұмыс аймағынан тұрады. Белгіленген аймақ жұмыс аймағының жол және баған атауларын шығару және тышқанның көмегімен олардың өлшемін басқару қызметін атқарады. Белгіленген аймақ басқа түспен ерекшеленген және оған клавиатурадан ақапарат енгізуге болмайды. Белгіленген аймақтын жолдары мен бағандар саны FixedRows және FixedCols қасиетінде көрсетіледі. Ал, жұмыс аймағы RowCount- жол және ColCount баған ақпараттарынан тұрады, оны программалық жолмен де, тышқанның немесе клавиатураның да көмегімен өзгертуге болады. Программадағы ақпаратпен қатынас Cells[Acol,AROW:integer]:String қасиетінің көмегімен жүзеге асырылады. Мұндағы Acol- кестенің баған нөмері, ал AROW- жол нөмері, ал нөмірлеу нөлден басталады. Сонымен қатар, қосымша батырмаларсыз кестенің өлшемін басақару үшін компоненттер палитрасының Samplesбетінде орналасқан SpinEdit редактор өрісін пайдалануға болады. Енді осы компоненттердің қызметін пайдаланатын мысал қарастырайық.


ТАПСЫРМА:

A={aij}(Xj=apj,j=1,2,..m) матрицасының P жолына тең болатын Х={Х1X2,….Xm} векторының, A={Yi=aiq, i=1,2,..,n} матрицасының q бағанына тен болатын Y={Y1,Y2,…Yn} векторын есептейтің және A={aij} матрицасының ең үлкен және ең кіші элементтерінің экранға шығаратын программа құрайық (n6, m8)


ТАПСЫРМАНЫ ОРЫНДАУҒА ӘДІСТЕМЕЛІК НҰСҚАУЛАР:

Алдымен формаға Additional бетінен: Stringrid1, Stringrid2 және Stringrid3 компоненттерін, ал Samples бетінен SpinEdit1, SpinEdit2 және есептеу процесін орындау үшін Button1 компоненттерінің орналастырамыз. Бұл мыслада барлық StringGrid компоненттері үшін белгіленген аймақ пайдаланылмайды. Объектілер Инспекторы FixedRows және FixedCols қасиеттерінің мәніне 0 мәнін меншіктейміз. Есеп шартына сәйкес StringGrid компоненттері үшін n жол мен m бағанның ең жоғарғы шектік мәндерін тағайындаймы:



StringGrid1

RowCount=6;

ColCount=8

StringGrid2

RowCount=8;

ColCount=1

StringGrid3

RowCount=6;

ColCount=1

StringGrid1 компонентіне ескертусізклавиатурадан мән енгізбес үшін осы компонент үшін объектлер инспекторы терезесіндегі Options қасиетіндегі + белгісін тышқанмен жылдам екі рет басқанда ашылған GoEditing командасына True мәнін тағайындаймыз. Ал, SpinEdit1, SpinEdit2 компоненттері үшін төмендегідей қасеиттерге мән береміз:



SpinEdit1

MaxValue=1

MinValue=6

SpinEdit2

MaxValue=1

MinValue=6

Енді SpinEdit1 және SpinEdit2 компоненттері үшін осы оқиғаларды өндеу процедураларын ққұрайық. Ол үін курсорды SpinEdit1 және SpinEdit2 компоненттерінекелтіріп тышқанның батырмасын жылдам екі басамыз. Нәтижесінде программалар коды терезесінде:

Procedure SpinEdit1Cgange(Sender:TObject);

Procedure SpinEdit2Cgange(Sender:TObject);

Оқиға өндеуші процедураларын аламыз.

Программа мәтіні төмендегідей:


unit Unit1;
interface
uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Spin, Grids;
type

TForm1 = class(TForm)

StringGrid1: TStringGrid;

StringGrid2: TStringGrid;

StringGrid3: TStringGrid;

SpinEdit1: TSpinEdit;

SpinEdit2: TSpinEdit;

SpinEdit3: TSpinEdit;

SpinEdit4: TSpinEdit;

Button1: TButton;

Button2: TButton;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

Label7: TLabel;

Label8: TLabel;

Label9: TLabel;

Label10: TLabel;

Label11: TLabel;

Label12: TLabel;

Procedure SpinEdit1Change(Sender:TObject);

Procedure SpinEdit2Change(Sender:TObject);

Procedure FormCreate(Sender:TObject);

Procedure Button1Click(Sender:TObject);

Procedure Button2Click (Sender:TObject);

Private {Private declarations}

Public {Private declarations}

End;

Var


Form1:TForm;

implementation


{$R *.dfm}

Var


A:array[1..6,1..8] of extended;

X:array[1..8] of extended;

Y:array[1..6] of extended;

m,n,p,q:integer;max,min:extended;


Procedure TForm1.FormCreate(Sender: TObject);

Begin


SpinEdit1.Text:='4';

SpinEdit2.Text:='6';

SpinEdit3.Text:='2';

SpinEdit4.Text:='3';

StringGrid1.RowCount:=4;

StringGrid1.ColCount:=6;

StringGrid2.RowCount:=6;

StringGrid3.RowCount:=4;

End;
Procedure TForm1.SpinEdit1Change(Sender: TObject);

Begin


n:=StrToint(SpinEdit1.Text);

StringGrid1.RowCount:=n;

StringGrid3.RowCount:=n;

End;
Procedure TForm1.SpinEdit2Change(Sender: TObject);

Begin

n:=StrToint(SpinEdit2.Text);



StringGrid1.ColCount:=m;

StringGrid2.RowCount:=m;

End;

Procedure TForm1.Button1Click(Sender: TObject);



var i,j:integer;

begin


n:=StrToint(SpinEdit1.Text);

StringGrid1.RowCount:=n;

StringGrid3.RowCount:=n;

m:=StrToint(SpinEdit2.Text);

StringGrid1.ColCount:=m;

StringGrid2.RowCount:=m;

p:=StrToint(SpinEdit3.Text);

q:=StrToint(SpinEdit4.Text);

for i:=1 to n do

for j:=1 to m do

A[i,j]:=StrToFloat(StringGrid1.Cells[j-1,i-1]);

Max:=A[1,1]; //Ең үлкен және ең кіші элементті табу

for i:=1 to n do

for j:=1 to m do

if A[i,j]>max then max:=A[i,j]

else if A[i,j]

label9.Caption:=floattostr(max);

label2.Caption:=floattostr(min);

for j:=1 to m do // X[j] массивін шығару

begin


X[j]:=A[p,j];

StringGrid2.Cells[0,j-1]:=FloatToStrF(X[j],ffFixed,3,1);

end;

for i:=1 to n do // Y[i] массивін шығару



begin

Y[i]:=A[i,q];

StringGrid3.Cells[0,i-1]:=FloatToStrF(X[j],ffFixed,3,1);

end;


end;

Procedure TForm1.Button2Click(Sender: TObject);

begin

Close;


end;

end.


Программаның орындалу нәтижесі 5.1-суретте көрсетілген.


5.1-сурет. Массивтерді шығару терезесі.
Ұсынылатын әдебиеттер: [1-9]
Бекіту сұрақтары:

  1. Масссив дегеніміз не және оның жазылуы форматы қандай?

  2. Динамикалық массив дегеніміз не жән олар қалай бейнеленеді?

  3. Setlength функциясының қызметі қандай?

  4. Р және n натурал санадары мен а1...,аn бүтін сандары берілген. а1...,аn тізбегінің Р санына еселі болатын мүшелерінің көбейтіндісін табындар?

  5. P, q және а1...,аn бүтін санадары берілген (P>q>=0). а1...,аn тізбегінде модулі Р-ға бөлгенде q қалдық беретін мүшелерін нолмен алмастырындар.

  6. а1...,аn тізбегіндегі

а) 5- ке еселіж

б) тақ және теріс

в) 5- ке бөлінетін және 7- ге бөлінбейтін;

г) |aj|2 шартын қанағаттанадыратын мүшелерінің қосындысын және санын табатын программа құрыныз.



  1. A(m,n) матрицасының әр жол элементтерінің ең үлкен экранға шығаратын программа құрыныз.

  2. A(m,n) матрицасының диагональдарындағы ең кіші элементті экранға шығаратын программа құрыныз.

  3. A(m,n) матрицасының диагоналндағы және одан жоғары жатқан элементтерін нольмен алмастырындар.

Зертханалық жұмыс №8

Тақырыбы: Жазулар
Мақсаты Delphi ортасының жұмысына жалпы сипаттама
Қолданылатын материалдар мен құрал- жабдықтар:

Компьютер, Delphi программалау ортасы
Теориялық түсініктеме:

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

Жазуларды сипаттаудың форматты төмендегідей:



<тип аты>=record

<өрістер тізімі>

End;


Мұндағы <тип аты>- жазудың атауы;

Record, end; қызметші сөздер (жазу соңы дегенді білдіреді);



<өрістер тізімі>- өрістер тізімі, ол нүктелі үтір арқылы ажыратылып жазылған жазулар бөлімдерінің тізбегі.

Жазудың әрбір бөлімі бір немесе бірнеше өріс атауларынан тұрады, олар бір- бірінен үтір арқылы ажыратылып жахзылады. Индентификатордан кейін қос нүкте қойылып, өрістер типі сипатталады. Мысалы:

Type

BirthDay=record



Day, Month: Byte;

Year:Word;

End;

A, B: BirthDay



Бұл мысалда BirthDay типі, өрістері Day, Month, Year болып келген жазу; А және В айнымалылары BirthDay типті жазудан тұрады.

Массивтердегідей, жазу типті айнымалының мәнін типі дәл сондай бсақа айнымалыға меншіктеугеболады, мысалы:

а:=b


егер құрама атау пайдаланатын болса, жазудың әр компонентіне кіруге мүмкіндік алуға болады. Яғни айнымалының атын көрсетіп, одан кейін нүкте қойылып, өріс аты жазылады:

a.day:=27;

b.year:=1963;

қабаттасқан өрістер үшін нақтыллауды жалғастыра беруге болады:

Type

BirthDay=record



Day, Month: Byte;

Year:Word;

End;

Var


C:record

Name:string;

Bd: BirthDay;

End;


Begin

If c.Bd.Year=1963 then…



End;

Жазудың өрісіне кіруді жеңілдету үшін Width жалғастыру операторы пайдаланылады.

Width<айнымалы> do <оператор>;

Мұндағы Width, do- қызметші сөздер; <айнымалы>-жазу тпті айнымалы, мұнда бірінің ішіне бірі орнласқан өрістер тізімі жазылады; <оператор>- Object Pascal тілінің кез келген операторы.

c.Bd.Month:=9;

Бұл төмендегі жазумен бара-бар:

Width c.Bd.do Month:=9;

Width c do Width Bd.do Month:=9; немесе

Width c.Bd.do Month:=9;

Object Pascal тілінде бірнеше вариатты өрісі бар жазуларды пайдалануға болады, мысалы:

Type

Forma\record



Name:String;

Case byte of

0:(BirdthPlace:String[40]);

1:(Country: String[20]);

EntryPort: String[20]);

EntryDate: 1..31;

EntryDate: 1..31)

End;


Бұл мысалда Forma типі бір шектеулі Name өрісімен және «case … of» қызметші сөзі арқылы өзгермелі бөлігі берілетін жазуды анықтайды. Өзгермелі бөлігі бірнеше варианттан тұрады. Әрбір вариант таңдау тұрақтысы бойынша анықталады; таңдай тұрақтысынан кейін қос нүкте қойылып, өрістер тізімі жазылады. Кез келген жазуда өзгермелі бөлігі тек біреу ғана болады.

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

Var

Mem4:record



0:(By:array[0..3] of byte);

1:(Wo:array[0..1] of word);

2:(lo:longInt);

End;


Бұл мысалда Mem4 жазуныңүш вариантты бар, олардың әрқайсысы жадыдан 4 байттың біреуін ғана алады. Біз программадағы жазудың қай өрісіне оралатынымызға байланысты сол бөлік массив ретінде қарастырылады. 4 байт – by өрісі, Word тәрізді екі бүтін типтен құрылған массив (Wo -өріс); longInt тәрізді бір бүтін типті сан (Lo - өрісі). Бұл мысалда алдымен ең ұзын бүтін мәнді меншіктеп, одан кейін нәтижені байт немесе сөз бойынша талдауға болады:

Var


x:word;

Xb:byte;


Xl:LongInt;

Begin


Width m do

Begin

lo:=Trunc(2*Pi*x);



if wo[1]=0 then

if by[1]=0 then

xb:=x[0]

else


x:=wo[0]

else


x1:=lo

end;


End.


Өзгермелі бөлікті ашатын case…of сөзі сыртқы түрі таңдау операторына ұқсағанымен, бұл жерде тек өзгермелі бөліктің басын көрсететін қызметші сөзді ғана атқарып тұр. Сондықтан өзгермелі бөліктің соңына case…of қызметші сөзінің жұбы ретінде end сөзін жазбауға болады. (Өзгеомелі бөлігі барлық уақыттта жазудың соңында болғандықтан end сөзі жазылады, бұл record сөзінің жұбы)

Хабарланған жазудағы өрістердің атауы бірегей болуы тиіс. Егер жазу жазу өрістерінен тұратын болса, олар бірінің ішіне бірі орналасқан болса, онда олардың атаулары қабаттасудың әртүрлі деңгейлерінде қайталануы мүмкін.



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




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

    Басты бет