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



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

Символдың тип. Символдық типтегі шамалар былай сипатталады:

amayl, атау2,... , атауп: char;

Жоғарыда айтылғандай символдың типтегі шамалардың мәндері апостроф ішіне алынып жазылады. Символдың айнымалылардың мәндері арифметикалық өрнектерде пайдаланылмайды. Әр сим­волдың өзіне тән рет нөмірі коды (ASCII кодындағы) болады, олар символдардың орналасу реті бойынша өсіп отырады, мысалы:

0,1, ... , 9, А, В, С Z, а, b, с,...,z.

Символдың шамаларға қатынас амалдары: < ,<= ,=, <>, >, >= қолданылады. Бұл амалдар орындалғанда символдардың өздері емес олардың нөмірлері (кодтары) салыстырылады.

Символдың шамаларға төмендегі стандартты функциялар қолданылады:

ord(*) — х-тің символының реттік нөмірін (кодын) береді, мысалы: order(?) = 63, ord(5) = 53;

chr(х) — х-тің реттік номеріне сәйкес символды береді, мысалы: chr(53) = 5, chr (73)=І;

pred(x) — х символының алдындағы символды береді, мысалы: pred(M) = L;



succ(х) x символынан кейінгі символды береді, мысалы: succ(M) = N.

Жоғарыда келтірілген стандартты функциялар олардың мәндерін автоматты түрде тез есептеуге мүмкіндік береді.



ӨРНЕКТЕР ЖӘНЕ ОЛАРДЫҢ ЖАЗЫЛУЫ

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

Алгоритмдік тілдерде (Паскаль, Бейсик, Си т.б.) арифметикалық амалдардың орындалу тәртібі олардың математикадағы орындалу тәртібіне сәйкес келеді, яғни алдымен жақша ішіндегі амалдар, сонан соң көбейту, бөлу, қосу, азайту т.б. амалдар орындалады. Олар 5-кестеде көрсетілген.

5-кесте

Амалдар түрі

Амалдар немесе оның элементтері

Жақша ішіндегі өрнектер

( )

Функция мәндері

Функциялар

Унарлық амалдар

@, not, бірорынды + және -

Көбейту, бөлу түріндегі амалдар

*,/, div, and, shi,shr

Қосу амалдары

+, -, or, xor

Қатынас амалдары

=, <>,<, >, <=, >=, in

Өрнектердің алгоритмдік тілде және программалау тіліндегі жазылуы да бір-біріне сәйкес келеді. Паскаль тілінде өрнектер тек сызықты түрде жазылады.



ПРОЦЕДУРАЛАР МЕН ФУНКЦИЯЛАР

Қарастырылатын сұрақтар:

  • Ішкі программа ұғымы;

  • Процедураның сипатталуы;

  • Функциялардың сипатталуы;

  • Парметрлер.

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

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

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

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

Ішкі программаны программада шақырту үшін ол программаның сипаттау бөлімінде сипатталуы қажет. Ішкі программаны жариялау – оның тақырыбын көрсетіп (онда қолданылатын формальды параметрлерімен), жергілікті айнымалыларды сипаттау және денесін көрсету.

Turbo Pascal тілінде ішкі программалардың екі түрі қарастырылған: функциялар мен процедуралар.
Процедураны сипаттау

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

Program editor;

{белгілерді, тұрақтыларды, типтерді және айнымалыларды сипаттау бөлімі}



...

Procedure Line;

Var symbol:integer;

Begin {процедура денесінің басы}

Write (‘{‘);

For symbol:=1 to 78 do

Write (‘-’);

Writeln (‘}’);

End; {процедура денесінің соңы}

Begin {программа денесінің басы}



Line; {процедураны шақыру}

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



Бұл editor программасында Line процедурасы сипатталған. Схемада процедураны сипаттау (бұл функцияға да қатысты) программа денесінің алдында жүргізілетіні көрініп тұр. Процедураның құрылымы программа құрылымын қайталайтыны көрініп тұр – мұнда да тақырыбы, сипаттау бөлімі және денесі бар. Процедура PROCEDURE резервтелген сөзінен басталады, содан кейін бос орыннан соң тақырыбы жазылады. Тақырып жолы міндетті түрде нүктелі үтірмен аяқталуы қажет. Осыдан кейін процедураның сипаттау бөлімі болады. Бұл мысалда тек бір ғана айнымалы сипатталған. Бірақ программадағыдай мұнда да белгілерді, тұрақтыларды, типтерді және айнымалыларды, сол сияқты Line процедурасының ішіне салынған процедуралар мен функцияларды сипаттауға болады.

Сипаттау бөлімінен кейін оның денесі көрсетіледі. Процедура денесі операторлық жақшаға (begin..end) алынған операторлар тізбегі жазылады. Line процедурасын шақыру үшін оның атауын қажетті жерге көрсетсе жеткілікті. Осы процедураны шақыру мысалы editor программасында көрсетілген. Осы процедура экранда 78 «минус» (-) символдарынан тұратын жолды шығарады. Ал егер өңделетін құжатта әртүрлі мәтін үзінділерін басқа символдар жолымен бөлу керек болса және де олардың ұзындығы да басқа болу қажет болса, онда программа денесіне қажетті ақпаратты (символ мен жол ұзындығын) енгізуге мүмкіндік беретін Read операторын қарастыру қажет болады. Бұл оператор қалай да бұл ақпаратты процедураға береді. Ақпаратты программа денесінен процедураға беру параметрлер механизмінің көмегімен жүзеге асады. Жоғарыда келтірілген программа схемасы төмендегідей өзгертілген:

Program editor;

{белгілерді, тұрақтыларды, типтерді және айнымалыларды сипаттау бөлімі}



...

Procedure Line(ch:char; ln:integer);

Var symbol:integer;

Begin {процедура денесінің басы}

Write (‘{‘);

For symbol:=1 to ln do

Write (‘ch’);

Writeln (‘}’);

End; {процедура денесінің соңы}

Begin {программа денесінің басы}



Read(a,b); {символ мен жол ұзындығы беріледі}

Line(a,b); {процедураны шақыру}

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



Екінші схема біріншісінен несімен ерекшеленеді? Процедура сипаттамасында тақырыбынан кейін формальды параметрлер берілген (ch:char; ln:integer). Олар таңдалынған символ (ch) мен жол ұзындығын (ln) программадан процедураға беруге арналған. Және де көрсетілген параметрлердің идентификаторлары процедура денесіндегі бекітілген мәндерді (78 және ‘-’) ауыстырды. Программа денесінде де екі өзгеріс болды. Біріншіден, кез-келген символ мен жол ұзындығын енгізуге мүмкіндік беретін жаңа оператор (Read(a,b)) қосылды. Екіншіден, процедураны шақыру операторы (Line(a,b)) енді нақты параметрлерге ие болды. Мәндері Read операторының көмегімен енгізіліп, содан кейін Line процедурасының сипаттамасында көрсетілген формальды параметрлерге берілетін a және b айнымалылары программаның сипаттау бөлімінде сәйкесінше char және integer типтері ретінде жариялануы керек.
Функцияны сипаттау

Turbo Pascal-да процедуралардан басқа да ішкі программалардың түрі бар – олар функциялар. Нақты мысал қарастырайық.

Turbo Pascal-да берілген санның берілген дәрежесін сипаттайтын стандартты функция жоқ. Дегенмен, сондай функцияны өзіміз жасауға ешқандай бөгет жоқ. Дәрежені есептейтін функция анықталған программаның схемасы төмендегідей болады. (функция дәрежесін есептейтін сан да, сол сияқты дәреже көрсеткіші де бүтін сандар болсын).

Program example;

{белгілерді, тұрақтыларды, типтерді және айнымалыларды сипаттау бөлімі}



...

Function Power (Num, Pow:integer):integer;

Var i:integer; a:real;

Begin {функция денесінің басы}

a:=num;

for i:=1 to pow do



a:=a*num;

power:=a


end; {функция денесінің соңы}

Begin {программа денесінің басы}



Read(a,b);

X:=power(a,b)+y; {функцияға қатынас жасау}

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


Example программасында Power функциясы сипатталған. Программаның осы схемасында функцияның сипаттамасы (процедурадағыдай) сипаттау бөлімінің соңында болу керектігі көрініп тұр. Функция құрылымы (процедура сияқты) программа құрылымын қайталайды. Бірінші Function резервтелген сөзінен басталатын тақырып жолы болады. Одан кейін бос орыннан соң жақшаның ішінде формальды параметрлер тізімі көрсетіледі (Num – дәрежесі есептелінетін сан, Pow – дәреже көрсеткіші), осыдан кейін қос нүкте, оның соңынан функцияның мәнінің типі көрсетіледі. Тақырып жолы үтір-нүктемен (;) аяқталады. Функция тақырыбынан кейін оның сипаттау бөлімі орналасады. Қарастырылып отырған функцияда небәрі екі айнымалы ғана анықталған, бірақ программадағы сияқты мұнда да белгілерді, тұрақтыларды, Power функциясының ішіне салынған басқа да процедуралар мен функцияларды жариялауға болады.

Функцияның сипаттау бөлімінен соң оның денесі орналасады. Функцияның денесі операторлық жақшаларға алынған операторлар тізбегінен тұрады.

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

Ескерту:



  • Шақыру операторының (процедура атауы, және де нақты параметрлер болуы мүмкін) көмегімен белсендірілетін процедуралардан ерекшелігі - функция атауы өрнекке қатысады. Осы функцияға қатынас жасау мысалын Example программасынан көреміз;

  • Функцияның процедураға қарағанда басқа да ерекшеліктері болады. Мысалы, функцияны қолдану нәтижесінде қандай-да бір мән қайтарылады. Функция қайтаратын мәннің типі функцияның сипаттамасында (тақырып жолында) көрсетіледі. Егер процедура атауы оны шақыруға ғана қолданылса, функция атауы қандай-да бір қайтарылатын мәнмен байланысты болады;

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

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


Параметрлер

Функциялар мен процедураларды қолданған кезде параметрлер өте маңызды орын алады. Алдыңғы мысалда Line процедурасын қажетті формальды параметрлермен безендірген болатынбыз. Және де Example программасының денесінде қажетті мәндерді пернетақтадан енгізуге мүмкіндік беретін Read(a,b) операторы енгізілген. Осыдан кейін осы мәндермен Line процедурасы шақырылады (Line(a,b)). Мұндағы a және b нақты параметрлер болып табылады.

Сонымен, Line процедурасын шақырған кезде a және b айнымалылары процедураның ішіне ch және ln формальды параметрлерінің көмегімен беріледі.

ПАРАМЕТРЛЕРДІ ПАЙДАЛАНУ АЙМАҒЫ
Қарастырылатын сұрақтар:


  • Процедура параметрлері;

  • Паскаль тілінің негізгі блоктары;

Процедура тақырыбында сипатталған параметрлер (белгілер, тұрақтылар, айнымалылар) жергілікті объектілер деп аталады. Олар тек осы процедура ішінде анықталушы болып саналады да негізгі программада пайдаланылмайды. Бұл объектілердің барлығы процедура іске қосылғанда ғана пайда болады да, процедура жұмысын аяқтағанда жойылады. Егер бір негізгі программа құрамында жұмыс істеудің бір айнымалысы, мысалы А кездесетін болса, онда ол әр процедурада, әр айнымалы болып саналады яғни, әрбір процедурада ішіндегі объектілер соның ішінде анықталған жергілікті объект болып табылады. Ал негізгі программаның сипаттау бөлімінде анықталған объектілер сол программаның өзінде де оның ішінде қосалқы программада да (процедуралар, функциялар) пайдаланыла береді. Өйткені олар ортақ (ауқымды) объектілер мен оның ішкі қосалқы программалар арасында мәлімет алмасу тек нақтылы параметрлер ғана емес, осы ортақ объектілер арқылы да жүргізіледі. Егер бір идентификатор, мысалы, В негізгі программада да және оның ішкі программасында да сипатталып анықталған болса, ол ортақ объект ретінде қарастырылады. Бірақ процедура ішінен ортақ объектіні пайдалана алмаймыз. Өйткені ол сол атаумен белгіленген ішкі жергілікті объектімен алмасқан болып саналады. Паскаль программалау тілінде процедуралар мен функцияларды бірінің ішіне бірін салып қабаттай беруге рұқсат етілген. Негізгі программада сипатталған процедура ішінде басқа да ішкі процедуралар мен функциялар сипатталуы мүмкін. Мұндайда шақыратын процедурада анықталатын объектілер оның ішкі процедурасына ауқымды, яғни ортақ объектілері болып табылады.



Сонымен әр түрлі блоктарда сипатталған объектілерді дұрыс пайдалану үшін мынандай ережелерді орындаған жөн:

  1. Кез келген бір блокта сипатталған объектілер атаулары осы блоктың өзінде және ішкі блоктарындағы белгілі болып табылады.

  2. Бір блокта сипаттаған объектілер бір – бірінен бөлек болуы тиіс. Ал, әртүрлі блоктардағы атаулары бірдей объектілер бола береді.

  3. Егер блокта сипатталған бір объектінің атауы оның сыртқы блогында кездесетін болса, онда сыртқы блоктағы сол объект ішкі блокта пайдаланылмайды.

Осы ережелерді 1-суреттегі құрылымға пайдаланайық.

Осы суретке қарап мынадай тұжырымдардың дұрыстығына көз жеткіземіз: В блогында анықталған объектілер осы блокта және С, D блоктарында пайдаланыла береді. Бірақ, А блогында белгісіз болып табылады. F блогында анықталған объектілер тек осы блокта анықталуы тиіс.

Мысалы: Дөңес төртбұрыштың төрт қабырғасымен бір диоганалінің ұзындығы бойынша оның ауданын тауып көрейік.
Дөңес төртбұрыштың диогоналі оны екі үшбұрышқа бөледі. Әрбір үшбұрыштың ауданын табу үшін белгілі Герон формуласын қолданамыз.

P
2-сурет. ABCD төртбұрышы.


= ;

S= ;

Бұл төртбұрыштың ауданын табу үшін үшбұрыштың программасын 2 рет пайдаланамыз.


Program B20;

Var AB, BC, CD, DA, AC, S1, S, a, b, c, P: real;

Procedure Str1;

Begin


P:= (a+b+c)/2;

S:= sqrt (P*(P-a)*(P-b)*(P-c));

End;

Begin


Real (AB, BC, CD, DA, AC) ;

а:=AB, b:=AC, c:=CD;

Str1;

S1:=S1+S;



Write (‘S1=’, S1);

End.
Бұл программада Str1 процедураны 2 рет пайдаландық. Әр пайдалану алдында а, b, с айнымалылар жаңа мәндер қабылдап отырды, мұндағы а,b,с айнымалылары негізгі программада да, процедурада да пайдаланылды. Яғни оларды ортақ айнымалылар ретінде қарастыру керек. Ал, Р айнымалысы тек процедурада ғана пайдаланылды. Сондықтан оны ортақ емес жергілікті айнымалы ретінде қарастырылып, тек қосалқы программада сипаттау жеткілікті.


8-ДӘРІС Паскальдағы деректердің пайдаланушы типтері.

  1. Деректердің пайдаланушы типтерінің сипаттамасы.

  2. Типтердің үйлесімділігі. Жазулар.

  3. Бекітілген бөлігі бар жазулар.

  4. Нұсқалы жазулар.



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




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

    Басты бет