Crc press баспасы Taylor & Francis баспа тобы



Pdf көрінісі
бет16/26
Дата20.12.2019
өлшемі6,26 Mb.
#53875
1   ...   12   13   14   15   16   17   18   19   ...   26
Байланысты:
Бағдарламалау тілдеріне кіріспе (1)


4.2 Басқару абстракциясы
Деректерді басқаратын командалар бағдарламалау парадигмасына бай-
ланысты  абстракцияланады.  Бағдарламалау  парадигмасына  байланыс-
сыз
 командаларды бөлуге болады: (1) конструкторлар — деректердің жаңа 
элементін құрады; (2) мутаторлар — идентификаторға тіркеулі, мән-
ді өзгертетін командалар; (3) селекторлар — деректердің құрама объ-
ектісінен немесе деректер объектілерінің жиынтығынан деректер эле-
менттерін іріктеуді жүзеге асыратын командалар; (4) шарт командалары 
—шартқа  байланысты  нұсқалардың  бірін  таңдайтын  командалар;  (5) 
итераторлар—ұйымдастырушылық  тәртіпте  деректер  объектілерінің 
жиынтығына бір операцияны циклді орындайтын командалар; (6) есеп-
теуіштер —өрнекті есептейтін командалар; (7) секвенсорлар— басқа-
руды қандай да бір белгі арқылы орындайтын командалар; (8) шақыру 
командалары—  қандай  да  бір  мәнді  есептеу  үшін  функцияны  немесе 
процедураны белсенді ететін командалар.
Тағайындау  операторы  ретінде  мутатор  жад  ұяшығында  сақталған 
мәндерді  түрлендіру    есебінен  жад  блогын  өзгертеді.  Кейбір  тілдерде 
жад блогы сондай-ақ деректердің жаңа элементін құруда немесе хабар-
лауда  мәнді  инициализациядау  кезінде  өзгереді.  Мутаторлардың  жүй-

169
елігі жағдайында әр мутатор сатылы түрде жад блогын жаңасына түр-
лендіреді. Жад блогы ағымдағы параметрдің мәні формалды параметрге 
жататын жад ұяшығымен байланысқанда немесе ауыспалы хабарланды-
руда нақты мағынаға инициализацияланғанда  өзгереді.
Командалар жүйелілігі шарт командаларымен, ауысу операторларымен 
немесе  итераторлармен  өзгеруі  мүмкін.  Бағдарламаны  орындау  уақы-
тында орындалған командалардан кейінгі командалар жүйесі жалғасу 
деп аталады.
Жалғасу бағдарламаның мінез-құлқының себебін түсіндіру үшін қажет 
және  бағдарламалаудың  нақты  тілдеріндегі  денотациялық  семантика-
ны анықтаудың ажырамас бөлігі болып табылады. Таңдау функциясы-
ның жалғасуында, мысалы, шартта операторда бірнеше нұсқалар бар, 
олардың бірі шартты бағалағаннан кейін бағдарламаны орындау уақы-
тында таңдалады. Осындай, итерациялық оператордың жалғасы шарт-
тың шынайылығын анықтағанда циклді көп ретті айналуын қамтиды. 
Итеративті циклдің немесе шартты операторлардың жалғасын болжау 
қиын, себебі ол шартты бағалау нәтижесіне байланысты. 
4.3-мысал
Ұсынылған бағдарламаның жалғасын қарастырайық.
x = 4; z = 6;
goto L; z = 8;
L: y = 5;
while (z > 4)
{x = y + 5; z = z − 1;}
= 4 операторының жалғасы {= 6; = 5; if > 4 then exit; x + 5;  z = z 
− 1; if z> 4 then exit;x = y + 5;z = z − 1; if z> 4 then exit} болып табылады.
Мәтіндік тәртіпте “goto L” секвенсоры бағдарламаны орындау тәртібін 
мәтіндік  тәртіпте  өте  жақсыға    өзгертеді.осындай  түрде,  операторлар 
циклінде Z 4-ке тең болғанша, WHILE цикліндегі операторлар екі рет 
орындалады  және  одан  кейін  басқару  Z  4-ке  тең  болғанша,  WHILE 
цикліне кіреді. Осылайша, жалғасы есептеуге байланысты болады және 
оны бағдарламаға қарап болжау қиын.
4.2.1 Тағайындау және командалар жүйелілігі
Тағайындау операторы жад ұяшығын тағайындау операторының оң жақ 
бөлігіне жазылған өрнекті анықтауға арналған идентификатормен бай-
ланыстырады. Байланыстыру анықтаған соң жүзеге асырылады. Жалпы 

170
алғанда тағайындау бір байланыстан тұрады, ол оператордың <иденти-
фикатор>  =  <өрнек>  түрге  ие  екендігін  білдіреді.  Соған  қарамастан, 
бірқатар тілдерде, мысалы ALGOL-68, C++, Python және Ruby бір өр-
нектің  анықтамасымен  байланысты  бірнеше  ауыспалысы  бар  тізбекті 
тағайындау (немесе көптеген тағайындау) қолданады. Функционалдық 
және объектілік-бағытталған бағдарламауды қолдайтын Ruby заманауи 
тіліндегі синтаксисте көптеген тағайындаулар былай жазылады: 
x = y = 4 + 5 + 6 (Python және Ruby қолданады)
x, y = 4 + 5 + 6 (Scala қолданады)
Оператор “4 + 5 + 6” өрнегін есептейді және 15- мәнді x және ауыспа-
лы жад ұяшығымен байланыстырады.
Кейбір тілдерде, мысалы, Ruby, C++, Python, Perl және Lua, бір реттік 
тағайындау немесе параллельді тағайындау қолданылады. Бір реттік 
тағайындауда  тиісті  өрнектердің  мәні  бір  уақытта  бірнеше  жекелеген 
байланысты емес ауыспалыға тағайындалады,ал өрнекті есептеу баста-
пқы ұяшықтың мәнін қабылдайды. Бір уақыттағы тағайындауға қойы-
латын негізгі талап – ауыспалы жадтың жекелеген ұяшықтарында жа-
зылуы тиіс.
 Бір уақыттағы тағайындау мына түрге ие:
var1, var2, var3, …, varN= exp1, exp2, exp3, …, expN
Жоғарыдағы оператор семантикасы expi(1 ≤ i≤ n) әр өрнегі σS жадтың 
бастапқы  блогына  қатысты  есептеледі,  ал  есептелген  мәндер  vari(1  ≤ 
i≤ n) ауыспалыға сәйкес жад ұяшығымен байланыстырылады. Мысалы, 
Interactive Ruby тілінің синтаксисінде келесі көптеген x1 с 4, x2 с 5 және 
x3-ты  6-мен  байланыстырады.  Соған  қарамастан,  егер  екі  ауыспалы 
бүркеншік болса, онда жад блогы соңғы байланысудан тұрады.
x1, x2, x3 = 4, 5, 6 % x1 →   4; x2 →   5; x3 →  6
y, y = 8, 9 % y→  9
Бағдарламалау тілінің парадигмасына байланысты C1; C2 түрін тағай-
ындау операторларының жүйелілігі жад блогын сатылы немесе парал-
лельді  өзгертуге  қабілетті.  Жад  блогын  сатылы  өзгерту  кезінде  ал-
дыңғы тағайындау операторы бірінші жад блогына өзгерістер енгізеді, 
ал кейінгі тағайындау операторлары жадтың өзгертілген блогымен жұ-
мыс істеуді жалғастырады.  Жад блогын параллельді өзгерту кезінде екі 
немесе  одан  да  көп  тағайындау  операторы  бір  жадтың  бастапқы  бло-

171
гымен жұмыс істейді. Жадтың әр түрлі ұяшықтарында өзгерістер орын 
алуы тиіс; жад ұяшығы жиынтығын оқу немесе жазу жарыс жай-күй-
ін тудырады; ол – жад блогы келісілмеген және егер, бір операторлар 
жиыны бірнеше рет есептеу жүргізсе, әр түрлі мән беруі мүмкін. Жарыс 
жай-күйі толығырақ 7-тарауда сипатталған.
4.4-мысал
Мысалы,  “x=  4;  y=x;”  түріндегі  сатылы  тағайындау  алдымен  σ’S= 
σS⨁(x→4) жад блогын жасау үшін алдымен σS жад блогын бұзады.мұн-
да σ’S= σS⨁(x→4) жад блогын жасау үшін “→” символы императивті 
бағдарламалау парадигмасында деструктивті жаңартуды білдіреді. Енді 
yx” тағайындау операторы  σ’S жад блогынан х ауыспалы мәнін оқи-
ды және жаңа өзгертілген σ’’S= σ’S⨁(y→4) = σS⨁(x→4) ⨁(y→ 4) жад 
блогын құрады.
Императивті  бағдарламалау  парадигмасын  қолдайтын  бағдарлама-
лау тілдерінде тағайындау операторы болып мутатор табылады. Бұл 
идентификатордың деструктивті жаңартылуы мүмкін жад ұяшығымен 
байланысты екендігін білдіреді. Алдында айтылғандай, бұзып жаңарту-
дың басымдығы - алдыңғы есептеу нәтижелерін жою мен бағдарлама-
лау үшін маңызды мәнге ие негізгі математикалық принциптерді бұзуы 
мүмкін бағдарламаның қолайсыз режимдерінің жанама әсерлері есебі-
нен жадты қайта пайдалануда.
Декларативті  бағдарламалау  парадигмасы  бір  реттік  тағайындау  қа-
сиетін  пайдаланады  және  ауыспалы  өрнектің  мәнін  тек  бір  рет  қана 
тағайындайды  және  байланыстыруды  анық  жою  мүмкін  емес.  Соған 
қарамастан,  бағдарламалаудың  кейбір  тілдері,  мысалы,  Prolog,  артық 
қайтарымдарды  қолдайды,  қайтарымдар  –  шешім  нұсқасын  іздеудегі 
алдыңғы есептеуге қайтып оралу. Артық қайтарымдарды орындау уақы-
тында Prolog негізгі іске асыру машинасы ауыспалыны алдыңғы мәні-
нен ажыратуды жүзеге асырады.
Логикалық  бағдарламалауда  тағайындау  операторының  нұсқасы  бо-
лып  бірегейлендіру  ұғымы  табылады.  Бірегейлендіруде  екі  логикалық 
терм теңестіріледі. Логикалық терм бұл – ауыспалы, тұрақты литерал-
дарды  және  басқа  енгізілген  логикалық  термдерден  құралған  құрама 
құрылым. Теңестіру кезінде есептеу жүргізілмейді, себебі термдер өр-
нек болып табылмайды. Оның орнына, сол жақтағы логикалық термдер 
мен оң жақтағы логикалық термдер әр позиция сайын салыстырылады. 
Егер термдердің бірі ауыспалы болса, онда екі логикалық термдердегі 
ауыспалының пайда болуы декларативті бағдарламалау парадигмасын-
дағы бір реттік тағайындау әсерінен тиісті логикалық термге тіркеледі. 

172
Егер екі тиісті терм-литерал болса, онда олар солай салыстырылады.
Мысалы, X + 4 + 3 термін 5 + Y + 3 термімен бірегейлегендіру кезін-
де 5 + 4 + 3 аламыз, X ауыспалы 5 литералмен байланыстырылады, Y 
ауыспалы  4  литералмен  байланыстырылады,  ал  3  және  3  литералдар 
сәтті салыстырылады. Керісінше,  X + 4 + 3 және 5 + Y + 2 сәйкестен-
діруін жүзеге асыру мүмкін емес, себебі тиісті 3 және 2 литералдар  бір-
бірімен салыстырылмайды. 
Бірегейлендіру 10-тараудағы логикалық бағдарламалауда толық зертте-
леді. Соған қарамастан, ол мұнда шартты оператор ұғымы туралы толық 
түсіну үшін айтылған.
4.2.2 Шартты операторлар
Шартты  конструкциялар  бағдарламалау  тілдерінде  бірдей  құрылымға 
ие. Шарттың оператордың негізгі конструкциясы абстрактылы синтак-
систік мына қағидасында ұсынылған:
<шартты оператор>::= if'('<шарт>')' then<оператор>
[else<оператор>];
<шарт>::= <шарт>&&<шарт> | <шарт> ||
<шарт> |not<шарт> |
<арифметикалық-өрнек><c-операция><арифметикалық-өрнек> |
truefalse
<c-операция>::= '>' | '<' | '>=' | '=<' | '=='
Әр түрлі тілдерде әр түрлі резервтелген сөздер қолданылады. Мысалы, 
‘.and’ орнына ‘&&’ немесе ‘.or’ - ‘||’ тұруы мүмкін.
(if-then-else) шартты операторында then операторы мен еlse операторы-
ның  ықтималдығы  тең  және  шартты  теріске  шығаруды  тексергеннен 
кейін орындау тәртібін өзгерту функционалды түрде (if-then-else) шарт-
ты операторының бастапқы нысанына функционалды тең болады, бұл 
“if (<шарт>) then<оператор-then>else<оператор-else>” функционалды 
if (not <шарт>) then<оператор-else>else<оператор-then> тең екендігін 
көрсетеді, себебі <шарт> және not<шарты> өзара тыйым салуды талап 
етеді.
Then операторы да, else операторы да (if- then-else) басқа шартты опера-
торын қамтитын кез-келген оператор болуы мүмкін. 3-тарауда енгізіл-
ген шартты оператор жағдайында else бөлігі барлық уақытта жақын then 
операторына жатқызылады.
Тармақталудың  басқа  конструкциясына  таңдау  операторы  жатады.  
Таңдау операторының құрылымының түрі:

173
case(<өрнек>) of :
< 1 мәндер жиыны>: < 1 командалар жүйелілігі>;

< N мәндер жиыны>: < N командалар жүйелілігі>;
otherwise: <N+1 командалар жүйелігі>
end case
Таңдау операторында өрнек есептеледі. Көп мәнді нәтиже мүмкін және 
әр  кіру  мәні  немесе  шығу  мәндерінің  салалары  үшін  әрекеттердің  әр 
түрлі  жүйелігі  мүмкін.  Әрекеттердің  әр  түрлі  жүйелілігіне  ие  барлық 
нұсқалар орындалады, ал соңында егер басқа барлық нұсқалар орын-
далатын болса, қолданылатын catch-all операторы бар. Өрнекті бағалау 
негізінде бір таңдау жасалса, таңдау операторы анықталған болатынына 
назар аударыңыз 
Lisp мына түрдегі шартты операторлар жиынын пайдаланады:
(cond((<предикат1><өрнек1>)

(<предикатN><өрнекN>) (t<catch-all-өрнек>)))
Мұндай  функция  жоғарыдан  төмен  тексеріледі;  егер  <предикатi
кез-келгені  шынайы  болса,  онда  тиісті  функция  орындалады;  әйтпесе 
<catch-all-өрнек> орындалады.
1. Бірнеше  функционалдық  тілдерде  қолданылған  басқа  шартты  кон-
струкция,  мысалы  Lisp-те,  -Жалпы  блок  ол  пайдаланылатын  әр  ішкі
бағдарламада жариялануы тиіс.
2. Жалпы блокта жарияланған бірнеше ауыспалының сәйкестігі сенімсіз
болып табылады.
Блоктық-құрылымданған  тілдер  әр  бағдарламалық  блокқа  ақпаратты 
көрінетін қылуы үшін ғаламдық ауыспалыны және енгізілген бағдарла-
малық блоктар үшін жергілікті емес ауыспалы пайдаланады. Жергілікті 
емес ауыспалылар тек кіріктірілген бағдарламалық бағдарламалар үшін 
ғана қолжетімді.  Сыртқы бағдарламалық блоктарға арналған ақпарат сы-
ртқы бағдарламалық блокқа енгізілген бағдарламалық блокқа арналған 
жергілікті  емес  ауыспалы  болып  табылатын  сыртқы  блокқа  арналған 
ауыспалы,  жергіліктінің  көмегімен  берілуі  мүмкін.  Сонымен  қатар, 
блокты-құрылымданған тілдер ауыспалы атауын немесе жад ұяшығы-
ның  мекенжайын  немесе  шақырушы  бағдарламалық  блок  пен  шақы-

174
рылатын  бағдарламалық  блок  арасындағы  ақпаратты  беруге  арналған 
ауыспалы мәнін пайдаланады. Параметрлерді беру кезінде шақырушы 
бағдарламадағы  аргументтер  нақты  параметрлер,  ал  шақырылатын 
бағдарламалық  блоктағы  тиісті  аргументтер  формалды  параметрлер 
деп аталады. Параметрлерді беру кезінде параметрлер сәйкестігі төрт 
жолмен алынуы мүмкін:
1. Нақты және формалды параметрлер сол жақтан оң жаққа беттеседі,
бұл позициядан позицияға дейінгі салыстыру түрі. Бұл параметрлерді
салыстырудың жалпы режимі көптеген бағдарламалау тілдерінде.
2. Нақты және формалды параметрлердің атауы атау ассоциациясының
көмегімен, мысалы, ADA бағдарламалау тілінде салыстырылады. Егер
атау ассоциациясы пайдаланылса, онда позициялар бойынша салысты-
ру қажеттілігі жоқ.
3. Нақты  және  формалды  параметрлердің  сәйкестігі  ішкі  бағдарлама
шақыруында анықталады. Атауды араластырған жағдайда бір параметр
нақты  параметр  екі  басқа  формалды  параметрлермен  байланысады  –
нақты параметр атрибуттарын формалды параметрлермен байланысты-
ру үшін позицияларды реттеу пайдаланылады.
4. Егер ресім шақыруында аргументтер саны мен формалды параметр-
лер саны салыстырылмаса, онда формалды және нақты параметрлерді
салыстырғаннан  кейін  қалған  формалды  және  нақты  параметрлер  үн-
сіздік бойынша инициализацияланады.
5. Формалды параметрі кеңейтілетін типті болуы мүмкін, мысалы, тізім
түрінде,  мұнда  аргументтердің  белгісіз  саны  шақырылатын  бағдарла-
маға  берілуі  мүмкін,  мысалы,  “param”  хабарландыруының  көмегімен
C#.
Бағдарламалаудың объектілі-бағытталған тілдері кластардың енгізілген 
құрылымдарға ие болуы мүмкін. Осылайша, ауыспалы класта сипатта-
луы мүмкін және енгізілген ішкі кластарда көрінуі мүмкін. Класта жари-
яланған ауыспалы кластың ауыспалысы деп аталады, ол осы кластағы 
деректер элементтері мен барлық тәсілдер арасында көрінеді. Ауыспалы 
статискалық ғаламдық ауыспалы болуы мүмкін, ол барлық кластарға 
және тиісінше барлық объектілер үшін қолжетімді болады. Ауыспалы 
тәсіл  үшін  сипатты  болуы  мүмкін.  Ақпарат  тәсілдер  мен  объектілер 
арасындағы хабарламаны беру арасындағы параметрлерді беру, ғалам-
дық ауыспалының, класс ауыспалының көмегімен объектілер арасында 
берілуі мүмкін. Егер тіл модульдерді, кластар мен объектілер, мысалы, 
Modula-3-ті  қолдаса, онда тәсілдер мен ауыспалылар импорт-экспорт 

175
тетігі арқылы модульдер арасында пайдаланылуы мүмкін.
Бағдарламалаудың  функционалды  тілдерінде  ақпаратпен  алмасудың 
қуатты тетігі бар. Олар шақырылатын функцияда шақырылуы мүмкін 
параметр сияқты толық функцияны беруі мүмкін. Деректер, сондай-ақ 
функциялар сияқты функцияның екі түрлі табиғаты бұл – функционал-
дық тілдердің ерекшелігі.
  Функционалдық  бағдарламалау  сондай-ақ  өрнекті  есептеу  алдында 
нақты параметр атына формалды параметрді мәтіндік ауыстыруды пай-
даланады.  Егер  өрнекті  есептеу  қажет  болғанша  кейінге  қалдырылса, 
онда ол шақырылатын функцияға ақпаратты бергенше есептелуі мүм-
кін. Ол мәтіндік ауыстырылуы тиіс. Формалды параметрден нақты па-
раметр  атауына  мәтіндік  ауыстыруды  пайдалану  есебінен  ақпаратты 
беру қасиеті атау бойынша шақыру деп аталады және келесі тарауда 
қаралады.
4.4 Параметрлерді беру
Императивті тілде ауыспалы аты→жад ұяшығы r-мән деп аталады. 
Ауыспалығы  үш  атрибут  жатады:  аты,  жад  ұяшығы  және  мән.  Осы 
үшеуін  бергенде  ғана  түпкілікті  r-мәнді  алуға  болады.  Бұл  параметр-
лерді  береді.  Егер  атау  нақты  параметрде  аргурмент  ретінде  берілсе, 
онда  параметрді  беру  тетігі  атауы  бойынша  параметрлерді  беру  деп 
аталады.  Егер  жад  ұяшығы  аргумент  ретінде  берілсе,  онда  параметр-
лерді беру тетігі сілтеме бойынша параметрлерді беру деп аталады, ал 
егер r-мәні берілсе, онда параметрлерді беру тетігі параметрлерді мәні 
бойынша беру немесе параметрлерді көшірмесі бойынша беру деп ата-
лады.
Көптеген  жағдайларда  шақырылатын  бағдарлама  шақыратын  бағдар-
ламаға  кері,  шақырылатын  ішкі  бағдарламала  жергілікті  есептеуден 
алынған нәтижелерді береді. Нәтижелер  ғаламдық ауыспалының, жер-
гілікті  емес  ауыспалының,  жадтың  жалпы  аймағы  мен  параметрлерді 
беруді пайдалануды бөлудің көмегімен берілуі мүмкін. 

176
Value – құны; calling subprogram – кіші бағдарламаны шақырушы; 
Arg  –  аргумент;  result  –  нәтиже;  called  subprogram  –  шақырылғын 
кіші бағдарлама 4.4-СУРЕТ.  
 4.4 –сурет. Аргументтердің r-мәнін көшіру арқылы параметрлерді беру.
Параметрлерді атауы бойынша және сілетеме бойынша беру шақырушы 
ішкі  бағдарламадағы  ауыспалымен  байланысты  жад  ұяшығын  анық 
емес өңдейді.
  Мән  бойынша  параметрлерді  берудің  4.4-суретте  көрсетілгендей  үш 
нұсқасы бар.
Шақыратын бағдарлама нақты параметрден формалды параметрге ақпа-
рат бере алады. Соған қарамастан, нәтиже шақырылатын ішкі бағдарла-
мадан шақыратын ішкі бағдарламаға кері берілмейді. Параметрді беру-
дің осы типі параметрлерді мәні бойынша беру деп аталады.
Параметрлерді  нәтиже  мәні  бойынша  беруде  ақпаратты  беру  екі 
нұсқамен жүзеге асырылады. Соған қарамастан, нәтиже шақырылатын 
бағдарлама аяқталғаннан кейін ғана кері беріледі. Ақпаратпен алмасу 
белгілі тәртіпте жүреді. Әдетте, позицияға сәйкес сол жақтан оң жаққа.
r-мән  анық  берілетін,  параметрді  берудің  соңғы  тетігі  параметрлерді
нәтижесі бойынша беру деп аталады. Параметрлерді мән бойынша бе-
руде ақпарат ішкі бағдарламаны шақыру жүріп жатқанда, нақты пара-
метрден формалды параметрге өтпейді; формалды параметрлер үнсіздік
бойынша инициализацияланады. Соған қарамастан, шақырылатын ішкі
бағдарламаны аяқтағаннан кейін нәтиже формалды параметр мен нақты
параметрдің сәйкестігі арқылы шақырылатын бағдарламаға қайтып ора-
лады.
Әдетте, параметр ретінде берілетін аргументтер саны нақты анықталып,
белгіленген.  Бірақ,  кейбір  тілдер  шақырушы  ішкі  бағдарлама  беретін
нақты параметрлердің ауыспалы санына рұқсат береді. Нақты параме-
трлердің ауыспалы саны формалды параметрдегі деректердің кеңейтіл-

177
ген абстракциясын білдіреді, ол деректердің кеңейтілетін абстракция-
сының  өлшемін  алатын  және  кеңейтілген  деректер  абстракциясының 
әр  элементін  өңдейтін  итерациялық  циклде  өңделуі  мүмкін.  Осындай 
ерекшелікті C# және Java тілдері қолдайды. Мысалы, C# “paramstring[] 
names”  формалды  параметріндегі  хабарландырудың  көмегімен  шақы-
рушы  бағдарламадағы  “Mike,”  “Karen,”  и  “Ambika”  сияқты  үш  аргу-
ментті  белгілейді.
 “param” резервтелген сөзі шақыратын ішкі бағдарламаға ішкі бағдарла-
маның қалған аргументтерімен деректердің кеңейтілген абстракциясы 
сияқты қолдану пәрменін береді. Мұнда “names” – “Mike,” “Karen” және 
“Ambika” деректерінің үш элементінен тұратын вектор.
Кеңейтілетін  параметрлерді  вектор  ретінде  беру  басымдығы  мынада: 
оны вектор ретінде көрсетіп, өңдеуге болады.
Логикалық  бағдарламалау  парадигмасында  параметрлерді  берудің 
тетіктері болып бірегейлендіру жатады. Бірегейлендіру  мен параметр-
лерді берудің басқа тетіктеріндегі айырмашылық мынада: бірегейлен-
діру ақпарат пен тағайындауларды екіжақты беруге рұқсат береді, бірақ 
өрнекті есептемейді. Бірегейлендіру 10-тарауда зерттелген. 
4.4.1 Параметрлерді мәні бойынша беру және оның түрлері
Өрнекте параметрлерді мәні бойынша беру (параметрлерді көшірмесі 
бойынша беру) немесе параметрлерді режимі бойынша беруде алдымен 
нақты  параметр  есептеледі,  содан  кейін  нәтижелі  мән  шақыратын 
бағдарламаға беріледі және тиісті формалды параметрмен байланысады. 
Формалды параметр жергілікті ауыспалы сияқты мәртебеге ие, ал нақты 
параметрдегі өрнек мәні бар формалды  параметрлерді байланыстыру 
тағайындау операторы тәрізді.  Шақыратын ішкі бағдарлама ортасында 
шақыратын ішкі  бағдарламаға жүгіну кезінде жадтың жаңа ұяшықтары 
жасалады  және  жад  ұяшықтарына  тиісті  нақты  параметрлерден  есеп-
телген өрнектердің мәндері беріледі. Бірақ көшіру тек бір бағытта ғана 
жүргізіледі: нақты параметрдің тиісті жад ұяшығынан формалды пара-
метрдің жад ұяшығына. Формалды және нақты параметрлер арасында 
мәндерді көшірген соң ешқандай өзара әрекеттер болмайды. Шақыра-
тын ішкі бағдарлама қандай да бір ақпарат бермей, есептеуді жүргізеді.
Параметрлерді мәні бойынша беру шақыратын функциялар үшін пайда-
ланылады, олар нәтижені параметрлер сәйкестігінің көмегімен қайтар-
майды. Бірақ функциялар 4.8-мысалда көрсетілгендей “return (өрнек)” 
көмегімен мәнді анық қайтарады.

178
4.8-мысал
Келесі кодты қарастырайық. Бағдарлама “square_ sum” функциясының 
параметрлері  мәні  бойынша  беру  көмегімен  х  және  у  ауыспалы  мән-
дерін береді, ал функция есептелген мәнді басты шақырушы бағдарла-
маға қайтарады. Ұғымды түсіндіруге арналған жалпы синтаксис.
Program main
{ integerx, y, z;
read(x, y);
z = square_sum(x, y)
print(“square sum of the numbers: ~d and ~d is ~d”, x, y, z);
}
function integer square_sum(a, b)
{ return(a*a + b*b);}
Формалды  параметр  “a”  формалды  параметрі  “x”  нақты  параметріне 
сәйкес келеді, ал “b” формалды параметрі “y” нақты параметріне сәй-
кес келеді. Формалды параметрлер нақты параметрлер сияқты типке ие 
екендігіне назар аударыңыз. “a”, сондай-ақ “b”  бұл – square_sum функци-
ясының ортасында қосымша жад бөлетін “x” және “y” ауыспалысының 
көшірмелері. Параметрлерді мәні бойынша берудің негізгі басымдығы 
мынада: нәтиже тиісті нақты параметрге кері берілмейтіндіктен, щақы-
рылатын ішкі бағдарлама  шақырылатын процедура ортасында күтпеген 
деструктивті жаңартуларға байланысты бағдарламаның кездейсоқ теріс 
әрекетін, жанама әсерлерді болдырмау үшін  жадтың тиісті ұяшығын де-
структивті жаңартпайды. Параметрлерді мәні бойынша беру сондай-ақ 
4.9-мысалда көрсетілгендей, параметрлердің бастапқы мәндеріне ғана 
қажет есептеулер үшін шақырылатын ішкі бағдарламадағы жағдайларда 
ғана пайдаланылады.

Достарыңызбен бөлісу:
1   ...   12   13   14   15   16   17   18   19   ...   26




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

    Басты бет