Object Pascal тілінің операторлары


Операторлар программаның немесе модульдiң соңғы бөлiмiнде begin және end түй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ктеме сөздер жазып отыру керек. Оларды ағылшын немесе ұлттық алфавит әрiптерiмен жазуға рұқсат етiлген.

Операторлар қарапайым және құрамды болып екі топқа бөлiнедi. Қарапайым операторлар тек бiр оператордан тұрады, құрамында басқа операторлар болмайды. Мысалға меншiктеу, көшу, процедураны шақыру және бос операторларды келтiруге болады.

Құрамды операторлар бiрнеше қарапайым операторлардан тұрады. Бұларға жай құрама оператордан басқа шартты, таңдау және үш циклдық операторлар жатады.

Жай құрама оператор бiрнеше қарапайым операторларды бiрiктiрiп, қосымша жақша тәрiздес begin және end арнаулы сөздердiң арасына орналастырудан пайда болады. Құрама оператор басқа құрамдас операторлардың құрамына енгiзiлiп, бiр оператор тәрiздi орындалады.

Мысалы:

  begin

            a := beta/5.25 ;       

           c := 2*beta+sin(a);

       end;

3.1 Қарапайым операторлар

Қарапайым операторлар тек бiр оператордан тұрады, құрамында басқа операторлар болмайды. Олардың қатарына меншiктеу, көшу, процедураны шақыру операторлары жатады.

3.1.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+1;   {i - дiң ескi мәнiне 1 - дi қосып,  i - ге теңестiру}

  x1:=(-b+sqrt(b*b-4*a*c))/(2*a);

  a[2,3]:=m-n;

  fun:=false;

  l:=2*pi*r;

Программа жазылғанда оның орындалу уақытын үнемдеудi қарастыру қажет. Мысалы, y = sin3 (x-1) берiлсе, онда есептеу келесi меншiктеу операторлары арқылы орындалғанды үнемдi деп санайды:

y := exp (3* ln(sin(x-1)); немесе y := sin(x-1); y:= y*y*y;  Ал  y= a4 берiлсе, онда келесi операторлар тiзбегiн пайдалануға болады:  y:=a*a;  y := y*y;

3.1.2 Шартсыз өту операторы (GOTO)

Шартсыз өту операторы қатарлардың рет-ретiмен орындалуын бұзып, белгiсi бар операторға көшу iсiн атқарады. Ол goto (өту) түйiндi сөзiнен басталады, одан кейiн label бөлiмiнде сипатталған белгi идентификаторы келтiрiледi. Оның жазылу форматы:

GOTO_< белгi >;

мұндағы < белгi > - белгiнiң идентификаторы, “_” - бiр бос орын қалдыру белгiсi.

Мысалы:

              goto 20;

              ...

              goto n1;

Жалпы құрылымдық программалау тәртiбi бойынша бұл операторды қолданбауға тырысу керек. Ол программаны оқып түсiну iсiн қиындатады.

Goto операторын қолданған шақта оның қатарына жүйелi жақша iшiне нелiктен басқа қатарға көшу қажет екендiгiн түсiндiрiп кету керек немесе шартты операторын пайдаланған жөн.

3.2 Құрамды операторлар

Құрамды операторлар деп құрамына бiрнеше операторлар кiретiн операторларды айтамыз. Оларға келесi операторлар жатады:

  • Жай құрама оператор;
  • Шартты оператор if;
  • Таңдау операторы case;
  • Қайталану операторлары for, repeat, while

3.2.1 Жай құрама оператор (операторлық жақша)

Жай құрама оператор деп beginend жақшасының аралығында жазылған орындалатын операторлар тiзбегiн атайды. Begin … end операторлар арасындығы операторлар тiзбегi бiр оператор сияқты орындалады.

End арнайы сөзi операторлық жақшаның жабылуын көрсетедi, сонымен қатар алдыңғы оператордың соңын көрсетедi, сондықтан end алдына “;” белгiсiн қоймаса да болады. Егер “;” белгiсi тұрса, онда соңғы оператормен end арасында бос оператор тұр деп саналады, яғни осы аралыққа белгiнi қоюға болады.

3.2.2 Шартты оператор (IF_THEN_ELSE)

Басқару операторлары программа қатарларының орындалу ретт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:

  1. IF <логикалық өрнек> THEN <1-шi оператор>;
  2. IF <логикалық өрнек> THEN <1-шi оператор>

ELSE    <2-шi оператор> ;

  1. IF <логикалық өрнек_1> THEN <1-шi оператор>

ELSE IF <логикалық өрнек_2> THEN <2-шi оператор>

ELSE <3-шi оператор>;

  1. IF (егер) операторы логикалық өрнекті есептейдi. Егер логикалық өрнектiң нәтижесi TRUE (ақиқат) болса, онда THEN бұтағы, яғни 1-шi оператор орындалады.
  2. Егер логикалық өрнек FALSE - ке (жалған) тең болса, онда ELSE бұтағы (әйтпесе), яғни 2 - шi оператор орындалады.
  3. Шартты оператордың құрамында басқа IF операторы болуы мүмкін.

Егер логикалық өрнек_1 ақиқат болса, онда 1-ші оператор орындалады. Керісінше, яғни логикалық өрнек_1 жалған болса, онда ELSE бұтағы бойынша ішкі IF орындалады. Егер логикалық өрнек_2 ақиқат болса, онда 2-ші оператор орындалады, керісінше, яғни логикалық өрнек_2 жалған болса, онда 3-ші оператор орындалады.

1-шi және 2-шi операторлар құрама операторлар (BEGIN_END блоктары), немесе басқа IF операторы болады. IF операторын белгiлегенде нүктелi үтiрлердi ( ; ) дұрыс қою керек. ELSE (әйтпесе) Паскаль тiлiнiң жеке операторы емес, IF операторының бөлiгi, ал ( ; ) нүктелi үтiр операторларды бөледi, яғни ELSE-тiң алдына ол қойылмайды, себебi бiр операторды екiге бөлуге болмайды.

Шартты өрнектер берiлгендердi қатынас таңбалары арқылы салыстырғанда немесе логикалық амалдарды қолданғанда пайда болады. Мысалы, If ( a>b) and (b<c) then

Төменде A және B мәндерiнiң үлкенiн және кiшiсiн анықтау алгоритмi көрсетiлген (5.1-сурет).

5.1-сурет. Шартты оператор

3.2.3 Тандау операторы (CASE_OF)

Таңдау операторының синтаксисi:

CASE  <айнымалы немесе өрнек > OF

1-шi мән : <1-шi амал>;

2-шi мән : <2-шi амал>;

.

Ni мән : <Ni амал>;

ELSE  < N+1-шi амал>;

END; { CASE }

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

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

3.2.4 Қайталану (цикл) операторлары

Күндел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 программа сандарды 10-нан бастап 1-ге дейiн шығарады. Осы есептiң блок-схемасы яғни алгоритмнiң қысқартылып жазылған көрінісi 5.3-суретте келтiрiлген.

Бастапқы кезiнде i – қайталану параметрi 10 мәнiн қабылдап, цикл денесi орындалғаннан кейiн 1-ге азайып отырады. I мәнi       1-ден кiшi болғанда циклдан шығамыз.

Obiect Pascal тілінде қайталануды жеңіл және қарапайым түрде ұйымдастыруға арналған үш оператор бар, олар For_to_do немесе (For_downto_do), While_do, Repeat_until.

5.3-сурет. Қайталану алгоритмi

3.2.4.1 Қайталану (цикл) операторы FOR _TO_DO

For_to_do қайталану операторының синтаксисi:

  1. FOR (үшiн) < жай айнымалы>:=<алғашқы мән >TO (өсiру)

<соңғы мән >DO (орындау)< оператор>

  1. FOR (үшiн) <жай айнымалы:>=<соңғы мән>

         DOWNTO (азайту)<алғашқы мән> DO (орындау)

<оператор>

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

  1. Қайталану операторында TO түйiндi сөзi тұрса, онда циклдың параметрi +1-ге артып отырады (5.4-сурет, A).
  2. Қайталану операторында DOWNTO түйiндi сөзi тұрса, онда циклдың параметрi -1-ге азайып отырады (5.4-сурет, B).

Жалпы кез келген циклдың iшкi қайталамасы болуы мүмкiн. Онда iшкi циклдың параметрi “жедел” өзгередi. Сыртқы циклдың параметрi бiр мәнге ие болғанда, iшкi циклдың параметрi алғашқы менiнен соңғы мәнiне дейiн өзгерiп отырады. Ал iшкi цикл толығымен орындалғаннан кейiн сыртқы циклдың параметры FOR операторында көрсетiлген қадамға өзгередi де, iшкi циклдың параметрi өзiнiң алғашқы мәнiнен соңғы мәнiне дейiн қайтадан өзгере бастайды.

5.4-сурет. For операторының екi түрi

3.2.4.2 Қайталану операторы WHILE_DO

WHILE_DO операторы шығу шартын қайталанудың басында тексередi, ол жалпылама жұмыс iстейтiн қайталану құрылымына жатады.

Синтаксисi:

         WHILE <шарт> DO           WHILE <шарт> DO

            <оператор> ;                   begin

                                                   <оператор> ;

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

                                                    <оператор>;

                                                 end; 

WHILE (әзiрше) және DO (орындау) арнаулы сөздер. Қайталану операторы келесi түрде орындалады:

<Логикалық өрнек> ақиқат болғанда ғана <оператор> орындалады, ал <Логикалық өрнек>  жалған болса, <оператор> орындалмайды.

WHILE_DO оператордың REPEAT_UNTIL операторынан айырмашылығы REPEAT_ UNTIL операторы ең кемiнде бiр рет орындалады.

Қайталану операторы REPEAT_UNTIL

REPEAT_UNTIL операторы шығу шартын қайталанудың соңында тексеретiн құрылым, бұл қайталану операторы ең кемiнде бiр рет орындалады.

Синтаксисi:

                  REPEAT (қайтала)

                      < операторлар >

                 UNTIL ( дейiн) < логикалық өрнек >;

Repeat_Until арасындағы операторлар <логикалық өрнектiң> мәнi жалған болғанда ғана орындалады. Цикл денесiндегi операторлар кем дегенде 1 рет орындалатының ескеру керек. Бұл осы түрдегi  қайталанудың WHILE және FOR-дан айырмашылығы болып табылады. Repeat қайталанудағы операторларды begin end блоктарына жинаудың қажетi жоқ.

Мысалы, p= N ! мәнiн табу үзiндiсiн келесi түрде келтiруге болады:

                k:=1; p:=1;

                 Repeat             // қайтала

                    p:=p*k;

                   k:=k+1 

                until k > n;    // k мәнi n- нен кiшi немесе тең болса қайтала

Бақылау сұрақтары:

  1. Object Pascal құрамындағы қарапайым операторларға анықтама беріңіз.
  2. Шартсыз өту операторы және программадағы белгі деген ұғымдарын түсіндіріңіз.
  3. Құрамды операторлар қатарына қандай операторлар жатады?
  4. Шартты оператор қалай жұмыс істейді?
  5. Таңдау операторы қалай жұмыс істейді?
  6. Қайталану операторларының түрлерін келтіріңіз. Әр оператор жұмысын түсіндіріңіз.
  7. Апатты жағдайдан қорғауды қалай ұйымдастырады?