Оқулық Қазақстан Республикасы Білім және ғылым министрлігі бекіткен Алматы, 2011



Pdf көрінісі
бет112/121
Дата31.08.2022
өлшемі2,81 Mb.
#38343
түріОқулық
1   ...   108   109   110   111   112   113   114   115   ...   121
айнымалылар статусын алады және дайын емес мәндерді қабылдайды. 
2. b = z. Енді b айнымалысы да дайын емес болды, ал жүйе ешқандай 
бӛгеліссіз одан ары бағдарламаны орындайды. Бұл мысал, дайын емес 
мәндерді кӛшіруге болатынын кӛрсетеді. Бірмезетте біз G функциясы 


193 
нәтижесінің тұтынушылар құрамын да ӛзгерттік. Енді үшінші нәтиже Z 
айнымалысына да, дәл осылай B айнымалысына да берілуі тиіс. Әрине, осы 
мезеттегі b айнымалысының дайын емес екендігі, G функциясының 
аргументі ретінде алынған b мәніне еш әсер етпейтінін байқаймыз. 
3. y = a. Айнымалы а - жай, сондықтан дайын емес y айнымалысы 
дайын болады және де а айнымалысының мәнін қабылдайды. 
4. w = a. Бұл оператордың орындалуында қиыншылық туындамайды, 
себебі мұнда жай айнымалылар пайдаланылған. 
5. t=b+a*w. Бұл операторда фрагменттің орындалуы, қашан G 
функциясы b айнымалысының нәтижесін қайтармайынша бұғаттауда болады. 
Екінші оператордағыдай, мұнда дайын емес мәндерді кӛшіруге болады, бірақ 
олармен ешқандай басқа операциялар орындауға болмайды. 
Бұл фрагментке қатысты анықталмаған бір сұрақ қалады. Үшінші 
оператор үшін, фрагмент детерминделген құлығына ие болмайды деген әсер 
туындауы мүмкін. Шынында , егер «y = a» операторы G функциясының 
аяқталуынан ерте орындалса, онда y айнымалысының мәні G функциясымен 
анықталады, ал егер кеш орындалса онда у айнымалысы а мәнін қабылдайды. 
Негізінде детерминделу қамтамасыз етілген. Осы оператор орындалғаннан 
кейін у айнымалысының мәні әрқашан а мәніне тең болады. «y = a» 
операторын ӛңдеу алдында у айнымалысы бұғатталады. 
Бұдан әрі айнымалының мәнін тексеру орындалады, егер мәні дайын 
емес болса, онда күтілетін мәнді қабыл алмау ұсынылады және 
жабдықтаушымен байланыс үзіледі. Біздің жағдайда бұл қабылдамау G 
функциясының орындалуынан шығатын мән. Барлық тексерістерден және 
оператордың орындалуынан кейін айнымалы бұғаттаудан босатылады. 
Мұндай тізбек бағдарлама құлығының детерминделгенінің кепілін бере 
алады және де әдеттегідей семантиканы қамтамасыз етеді: y = a 
орындалғаннан кейін у мәні а мәніне тең болады. 
Жаңа кілттік сӛздер қосылғаннан кейінгі С тілінің диалекті, ТС деп 
аталады. Жаңа тіл кӛптеген бағдарламалаушыларға бағдарламаларды 
функционалды стильде жазу үшін әдеттегідей императивті жазбаны 
қолдануға мүмкіндік береді.
Т-жүйесінің және ТС тілінің базалық конструкцияларымен танысу үшін 
екі қарапайым мысал қарастырайық: Фибоначчи санының есептелуі және 
ағаш тәрізді деректер структурасын рекурсивті қарап шығу. 
Фибоначчидің n- ші санын табу есебін қарастырайық: 










3
,
2
1
,
1
2
1
n
f
f
n
немесе
n
егер
f
n
n
n
Т- жүйесін қолдана отырып есепті шешу бағдарламасының мәтіні 
тӛменде кӛрсетілген. Жолдардың нӛмірі, әрине Т-жүйесінің бӛлігі болмайды. 


194 
Олар бізге бұдан әрі бағдарламалардың әртүрлі конструкцияларына түсінік 
бергенде керек болады. 
001 # include
002 
003 # include
004 # include  
005 
007 unsigned cfib (unsigned _n)
008 {
009 return _n < 2 ? _n : cfib (_n-1) + cfib (_n-2) 
010 } 
011 
012 tfun viod fib (unsigned _n, tout unsigned *_res) 
013{ 
014 if (_n <32) {
015 *_res = cfib(_n) 
016 } else { 
017 tval unsigned res1, res2; 
018 fib (_n-1, &res1); 
019 fib (_n-2, &res2); 
020 *_res = res1+res2; 
021 } 
022 }
023 
024 int tmain (int argc, char* argv[]) 
025 { 
026 unsigned n; 
027 tval unsigned res; 
028 if (argc < 2) { 
029 terrprint ( 
030 “Usage:\n” 
031 “ gr_fib \n” 
032 ); 
033 return - 1 
034 } 
035 n= (unsigned)atoi(argv[1]); 
036 fib(n, &res); 
037 (unsigned) res; 
038 terrprint(“fib(%u) = %u\n”, n, rez) 
039 return 0; 
040 } 
Бағдарламада tval кілттік сӛзі кӛмегімен жай және дайын емес 
мәндерді сақтай алатын res1, res2 және res айнымалылары анықталған.


195 
Олардың адрестері fib Т-функциясына берілген мезетте, ал ол 18,19 
және 36 жолдардағы fib шақыруы, шақыру функциясының орындалуы 
тоқтамайды және ол ары қарай жұмысын жалғастырады. fib екінші 
формальды параметрінің сипатталуы tout болғандығы себепті шақырулар 
мезеттерінде сәйкес айнымалы res1, res2 және res «дайын емес» болады. 
Ол дәл сол арнайы дайын емес (даярлықсыз) мәнді қамтиды. Қашан 
шақырылған функция fib нәтижені есептейді және оны айнымалыға 
қайтарады (жол 15 болмаса 20), бұл мән жай «дайын» мәнімен 
алмастырылады. 
«Дайын емес» айнымалыларға қатынас (олардың мәндеріне) 
функцияның есептеу процесін бұғаттайды. Мысалы, ол 20 –шы жолда болуы 
мүмкін, онда res1 және res2 айнымалыларына қатынас (обращение) тұр. 
18-ші және 19-шы жолдарда res1 және res2 айнымалыларының мәндерін 
білу қажет етілмейді, сондықтан fib Т-функциясының екі шақыруы да 
бұғаттаусыз орындалатын болады, және олары есептеу параллельді жүруі 
мүмкін. 
Бағдарлама жұмысы барысында туындаған Т-функциясы fib 
шақырулары (18, 19 және 36 жолдар) есептеуге дайын тәуелсіз жұмыс 
порцияларын қалыптастырады (параллельділік гранулалары). Барлық 
бӛліктер (порциялар) кезекке қойылады, олардан есептеуіш орындаушы - 
процестер ӛздері үшін жұмыс алады. Бағдарламаның мәтінінде Т-
функциялары кодтың потенциалды параллель фрагменттерінің үлгілерін 
кӛрсетеді. Бағдарламаның жұмысы барысында Т-функциясы нақты 
шақыруының нәтижесі сияқты нақты параллельді фрагменттер пайда болады 
және Т-жүйесімен ӛңделеді.
Бағдарламада 14 жолда тұрған шартты оператор 2 есепті орындайды. 
Бір жағынан, қандай да бір уақыт мезетінде жаңа жұмыс порцияларының 
құрылуын тоқтату, және соңғы қорытынды нәтижені қалыптастыруды бастау 
керек. Бұл мағынада мұнда жай рекурсивті функциялармен толық ұқсастық 
бар. Басқа жағынан, барлық қалыптасқан жұмыс бӛліктері жеткілікті 
салмақты болулары тиіс. Кезекті бӛліктің қандай да бір процеске берілуі 
есебінен болатын қосымша шығындарды жасыру керек, оны есептеу кӛлемін 
арттыру арқылы істеуге болады. Осы ойлардан келіп берілген жолдағы 32 
тұрақтысы пайда болады. 
Дегенмен, дайын емес айнымалылар Т-жүйесінде синхрондаудың 
негізгі құралы болады. Дайын емес айнымалыларды оқу (мәнге қатынас) 
және жазу (қабылдау үшін қатынас) жағдайларының, яғни ситуацияларының 
айтарлықтай айырмашылықтары бар: 

дайын емес айнымалы оқу барысында осындай қатынасты 
орындайтын есептеу процесін бұғаттау орын алады; оның күтуі, 
айнымалы дайын мәнді алғанға дейін жалғасады;

жай мәнді дайын емес айнымалыға жазу барысында ол ӛзінің 
тұтынушылары үшін дайын болады, ал берілген айнымалыда 


196 
ертеректе (алдында) бұғатталған процестер бұғаттау жағдайынан 
шығады.
Енді қашықтағы кӛрсеткіштермен жұмысты суреттейтін ағашты 
рекурсивті аралап шығу бағдарламасын қарастырайық. 


Достарыңызбен бөлісу:
1   ...   108   109   110   111   112   113   114   115   ...   121




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

    Басты бет