Жазбалар


Бiр құрылымға бiрiктiрiлген әртүрлi тектегi бiр-бiрiмен байланысты мәлiметтердiң жиыны жазба деп аталады. Жазба, массив тәрiздi, мәлiметтердiң күрделi түрiне жатады және бiр заттың әртүрлi маңызды мәлiметтерiн бiрiктiрiп қолдану үшiн пайдаланылады. Жалпы жазба пайдалануға өте тиiмдi деп саналады, олар дерек қорлармен (База данных) жұмыс iстеуге бейiмделген. Жазбаның (record) құрамына кiретiн мәлiметтердi өрiстер деп атайды, және жазба өрiстерiнiң массив элементтерiнен айырмашылығы келесiде:

- жазбаның өрiстерi бiрыңғай түрге жатпауының мүмкiндiгi;

- өрiстерге олардың аты арқылы қол жеткiзуге болатындығы.

Жазбаның сипаттау синтаксисы :

Type

< жазба  аты> =record

<1 өрiстiң аты >: <кез келген стандартты  тұр>;

<2 өрiстiң  аты>: <кез келген стандартты тұр>;

                            .....................................

           <N өрiстiң  аты>:<кез келген стандартты түр>;

         end;

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

                       жазба аты. 1 өрiстiң аты :=   …;

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

Жазбалар түрiндегi анықталған айнымалыларға, массив сияқты, осы түрдегi анықталған басқа шаманың мәнiн бiрден меншiктеуге болады.

Мысалы, Student жазбасының құрамына кiретiн Name (аты), SecondName (екiншi аты), SurName (фамилиясы), Sex (жынысы), MyGrоup (тобының аты) өрiстерiн сипаттап, ал S1 және S – айнымалы шамаларды Student түріне жатады деп анықтап, олармен келесi түрде жұмыс атқаруға болады:

Type Student = record

                  Name: string [12];

                  SecondName: string [20];

                  SurName: string [15];

                  Sex: (Male, Female); 

{өрiстiң мәнi санаулы Male, Female екi ғана мән қабылдайды}

             MyGroup: string[10];

       end;                 { жазба сипаттамасының соңы}

Var S1, S:Student;     { S1, S - айнымалылар Student түрiне жатады деп анықталуы }

    Begin                { операторлық бөлiгiнiң басталуы}

S.Name:=’ Айдар’; // S  жазбаның әр өрiсiмен бөлек жұмыс атқару

  1. SecondName:=’ Сулейменов’;
  2. SurName: =’ Марат‘;

       S.Sex:=Male;

  1. MyGroup: = ‘ АиСУ-02-1’;

      S1:=S; // S1 - ге S айнымалының мәнi меншiктеледi

End.                                     { программаның соңы}

5.1 Жинақтау операторы

Жазбаның  өрiстерiмен жұмыс атқаруда тағы да бiр әдiс қолданылады. Ол With (пен) <жазбаның аты> do ( орындау) - жинақтау  операторы. Бұл оператор  арқылы жазба өрiстерiне  оңай және  ыңғайлы түрде  қол жеткiзуге болады.

With <жазбаның аты> do операторының iшiнде  begin … end жақшаны қолдануға болады, сол себебтен  өрiстерiмен жұмыс атқарғанда жазбалық айнымалының атын қоймаса да болады. Мысалы,  келтiрiлген S жазбаның өрiстерiмен жұмыс iстеу үшiн With S do  жинақтау операторын пайдаланып, программаны келесi түрде көрсетейiк.

Type Student = record

            Name, SecondName, SurName: string [20];

//Егер бiрнеше өрiстер бiр түрге жатса, онда оларды бiр

{ сөйлемде анықтауға болады}

            Sex: (Male, Female);

            MyGroup: string [10];

      end;                         { жазба сипаттамасының соңы}

Var S : Student;          {S - айнымалы Student түрiне жатады}

Begin                           {операторлық бөлiгiнiң басталуы}

  With S do       {анықталған  S  жазбамен жұмыс атқару}

       Begin                { With S  do операторының басталуы}

          Name:=’ Айдар’;

          SecondName:=’ Сулеймен’;

          SurName: =’ Муратов‘;

          Sex:=Male;

         MyGroup: = ‘ АиСУ-01-1’;

      end;              { With S do операторорының соңы}

Жазба өзi өрiс ретiнде басқа жазбада қолданылуы мүмкiн. Мысалы, Student жазбасында студенттiң туған күнi туралы қосымша мәлiмет алу қажет болсын, делiк. Осы деректердi Student жазбасының құрамына Month, Day, Year өрiстерi түрiнде кiргiзуге болады, бiрақ оларды бөлек анықталған түрде көрсеткен жөн. Екiншi әдiстi қолдану үшiн Date жаңа жазбаны келесi түрде анықтайық:

Type

     Date = Record

             Month:( Jan,Feb,Mar,Apr,May,June,July,

                          Aug,Sept,Oct,Nov,Decem);

             Day: 1..31;

             Year: 1975..2000; end;

Ендi осындай түрде келтiрiлген Date жазбасын Student жазбасының өрiсi ретiнде пайдалануға болады:

 Var  Student = record

               Name, SecondName, SurName: string [20];

               Sex: (Male, Female);

               MyGroup: string[10];

               BirthDay :Date;

            end;                  { жазба сипаттамасының соңы}

BirthDay жазбаның өрiстерiне қол жеткiзу үшiн жалпы жазбаларға қолданылатын ережелер пайдаланылады, мысалы:

  1. BirthDay. Year:=1983; S. BirthDay.Month:=Feb;
  2. BirthDay.Day:=1;

Келтiрiлген операторларды With <жазбаның аты> do арқылы келесi екi түрде жазуға болады:

1) With S do

    Begin        

   BirthDay. Year:=1983;

   BirthDay.Month:=Feb;

   BirthDay.Day:=1; 

  end;

 2) With S do

   With     BirthDay do  begin

      Year:=1983;

      Month:=Feb;

     Day:=1;

  end;

5.2 Таңдамалы жазбалар

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

Мұндай жағдайларда жазбаның ерекше түрi – варианттық (таңдамалы) жазба қолданылады. Кез келген құрылымдық түр өрiстердiң бекiтiлген тiзiмiнен басқа осы түрдiң бiрнеше құрылымын анықтайтын варианттық бөлiгiнен тұруы, яғни әртүрлi айнымалылар бiр түрге жатса да олардың құрылымы әртүрлi болып анықталуы мүмкiн. Бұл айырмашылық мәлiметтердiң (өрiстердiң) санына және олардың түрiне де қатысты бола алады.

Таңдамалы бөлiгiн анықтау үшiн Case of түйiндi сөздер қолданылады. Жазбаны анықтайтын варианттық бөлiмiнiң саны бiр ғана болады және ол жазбаның бекiтiлген тiзiмiнен соң орналасуы тиiс.

Варианттық жазбалардың ерекшелiгi келесiде: жазбада анықталған варианттар бiрiнiң үстiнен бiрi жазылып отырады, яғни жадта барлық болуы мүмкiн мәндерге тек қана бiр аумақ бөлiнедi.

Бiр түрдегi бiрнеше жазбалармен жұмыс атқару үшiн оларды массивке немесе файлға бiрiктiрген жөн. Кейiн массивке немесе файлға қолданылатын ережелердi пайдалануға болады.

5.3 Жиындар

Бiр түрдегi санаулы немесе түгелденген объектiлердi жиындар деп атайды. Жиынның түрi жиынды құратын объектiлердiң түрiмен анықталады. Жиын элементтерiнiң саны 255-дан аспайды. Олардың реттiк нөмiрi 0…255 аралықта болады.

Жиындарды анықтау үшiн ‘’Set  of‘’ (-дан жиын) деген сөздер қолданылады. Түйiндi сөздерден соң мәлiметтердiң негiзгi түрi көрсетiледi. Негiзгi түрi ретiнде Word, Integer, LongInt, Int64 түрлерiнен басқа кез келген  реттiк түрлердi пайдалануға болады.

Мысалы:

Type CharSet=set of char;   {char түріндегi обьектiлер жиыны}

   DayInMonth=set of 1..31{бұтiн сандардың iшкi жиыны}

   Day=(sun, mon, tue, wed, thur, fri, sat);

Days=set of Day; {Day түріндегi жиын, яғни sun, mon, tue, wed, thur, fri, sat мәндерін  қабылдай алады}

Colors=set of (red, green, blue){ (red,green,blue) белгiленген объектiлер  жиыны}

Жиынды анықтау жиынның құрастырушысы деген конструкция көмегiмен орындалады. Жиынға кiретiн элементтер тiзiмiн квадрат жақшаларына орналастырып, оларды үтiрмен бөлiп, жиынды құруға болады. Элементтер ретiнде тұрақтылар және шектелген шамалар болуы мүмкiн. Егер тiзiм шектелген элементтерден құрылса, онда жиынның жазуында “..” таңбаларды алғашқы және соңғы мәндерiн көрсетiп, қоюға болады. Мысалы:

      [ ]                         бос жиын

      [ 1,2,6,7,9 ]           бүтiн сандардың iшкi жиыны

      [ ‘A’..’Z’ ]              A- дан  Z- ке дейнгі таңбалар жиыны

      [ mon,wed .. fri ]    апта күндерінің  жиыны.

Жиындармен орындалатын амалдар кейбiр ерекше операторлар көмегiмен орындалады. Келесi жиындар берiлдi, делiк:

          set1:=[ ‘A’ , ’B’ , ’C’ ];             set2:=[ ‘C’ , ’D’ , ’E’ ];

          set3:=[ ‘A’ , ’B’ , ’C’ ];              set4:=[ ‘A’ , ’B’ ];

Қосу операторы (“+” таңбасы) екi жиынды бiрiктiредi, нәтижесiне екi жиынның барлық элементтерi бiр-бiрден кiредi:

          set1 + set2=   [‘A’,’B’,’C’,’D’,’E’];   (6.10-сурет, а)

Айыру операторы (“-“ таңбасы) бiрінші жиыннан екiншiнi алады, яғни алдыңғы жиынның екіншімен ортақ мүшелерін айырады:

          set1 -set2 = [‘A’,’B’]        (6.10-сурет, b)

Қиылысу операторы (‘*’ бейнесi) екi жиынның ортақ мүшелерiнен жаңа жиын жасайды: set1 * set2= [‘C’] (6.10-сурет, c)

Мүше операторы (in сөзi) 1-шi жиын 2-шi жиынның толық бөлiгi болуын анықтайды:

           if (‘A’ in set1) then ... (6.10-сурет, d)

6.10-сурет. Жиындарға қолданылатын амалдар

Кейбiр бүтiн немесе жолдар түрiндегi берiлгендермен орындалатын амалдарды жиындарға да қолдануға болады. Мысалы, тең операторы (“=” белгiсі) екi жиындар бiрдей екенiн анықтап, буль өрнегiн құрайды:

set1=set3     нәтижесi ақиқат,

set1=set2     нәтижесi жалған.

Тең еместiгiн көрсететін операторы (“<>” таңбасы) екi жиындардың тең еместiгiн анықтап, буль өрнегiн құрайды:

set1<>set3      нәтижесi жалған,

set1<>set2      нәтижесi ақиқат .

Салыстыру операторы (“<=” және “>=” таңбалар) 1-шi жиын 2-жиынның iшкi жиыны екенiн көрсетедi. Егер 1-шi жиын 2-нің iшкi жиыны болса “<=” операторы ақиқат бередi. Ал егер 2-шi жиын 1-шi жиынның iшкi жиыны болса, онда ақиқаттығы “>=” таңбамен кәрсетiледi.