47
2-зерханалық жұмыс тапсырмаларын қарап қарапайым математикалық
өрнектерді шешу мысалдарын көрсетіңіз.
Бақылау
сұрақтары
1.
Математикалық функциялар қалай сипатталады.
2.
Шамалардың қандай түрлері бар.
Есеп беру мазмұны жəне формасы: Тапсырмалар нұсқасын құрастыру.
Тапсырманы орындау реті. Орындау нəтижелері. Қортынды.
2.4. Зертханалық
жұмыс
№
4. Рекурсия
жəне
циклдарды
ұйымдастыру
Мақсаты: Турбо Пролог ортасында рекурсивті есептерді шешу əдістерін,
арифметикалық амалдардын іс−жүзінде қолдану.
Көптеген
қарапайым
арифметикалық
есептеулер
итерациалық
бағдарлама көмегімен берілуі мүмкін. Мысалы, факторларды есептеу
циклдардың көмегімен орындалып, тізбектер сандарға көбейтіліп, керекті
факториалды алуға болады. Керекті процедура Паскаль тілінде жазылып,
төменде көрсетілген.
1-мысал. Факториалды есептеу.
real factorial (N: integer);
var i: integer ;
f: real ;
begin
i:=o; f:=1;
While (i
begin
i:=i+1; f=f*i
end;
factorial:=f
end;
Пролог тілінде итерациялық құрылымдағы мұндай бағдарлама жоқ.
Рекурсивті жəне итерациялы алгоритімдерді рекурсия қолданылады.
Итерацияның рекурсиядан негізгі мүмкіншілігі тиімділігінде, ең маңызды
тиімділігі жадыны қолдануы. Əрбір рекурсивті шақыруда рекурсияны
орындау белгілі бір уақытқа дейін аяқталмай, байланысқан ақпараттарды
сақтауды талап етіп, мəліметтердің құрылымын анықтау, стек фрагменті деп
аталады.
Стек -арнай мəліметтер құрылымы, элементері келесі қасиеттерге
байланысты болады: соңғы болып стекқа келген, алды болып стектан кеткен.
Стек элементтері берілуіне байланысты реттелген, сырттан тек стек
төбелеріне ғана қатынауға болады.
48
Элементтер төбелеріне жетсе, онда стектің жаңа төбесі элемент
орналасқан төбенің алдындағы төбесі болады. Егер стекке жаңа элемент
қосылса, онда ол стектің жаңа төбесі болады.
Есептеудегі жады өлшеміне процедураға n рекурсивті қатынауы кіріп,
n-ге сызықты байланысты болады. Бағдарламаның орындалу кезінде стектің
толып кетуін қадағалау керек, өйткені нəтижесінде бар мəліметтерді
жоғалтып алу мүмкін. Рекурсивті бағдарламадан итерациялы бағдарламаның
айырмашылығы шектелген жады көлемін қолданып, итерация санына
байланысты болмайды.
Турбо Пролог бағдарламасында қайталанатын іс-əрекеттерде рекурсия
қолдануға болады. Турбо Пролог тілінде бүтін санның факториалын
есептейтін бағдарлама жазайық. 5.4 бағдарлама екі ережеден тұрып, оның
бірі рекурсивті болады. Байқайтынымыз рекурсивті ереже үш ішкі мақсаттан
тұрып, ал соңғы ішкі мақсат Fact X=X+FactY, X-санының факториалын
есептеп жəне X-1 факториал саны FactY -айнымалысының мəні болмайынша
есептелмейді.
2-мысал. Факториалды рекурсивті жолмен есептеу.
Бағдарламаның жұмысын, мысал арқылы түсіндірейік. Мақсат factorial(
5,F) түрінде берілген 5-тің факториалын есептейік. Алдымен Пролог бұл
мақсатты бірінші мақсаттың тақырыбымен теңестіреді. Теңестіру сəтсіз
аяқталып, екінші ереже таңдалады. Бұл жағдайда теңестіру сəтті аяқталып,
Х-айнымалысының мəні 5-ке тең болады. Содан кейін У-айнымалысының
мəні есептеліп жəне Турбо-Пролог factorial(Y,FactY) -ішкі мақсатын
есептеуге көшеді, мұндағы Х=4 болып, жаңа мəнмен рекурсивті түрде екінші
тəртіп қайта шақырылады.
Тапсырмалар :
1 . 1-ден 100-ге дейінгі сандардың қосындысын табатын программа жаз.
2 . 1-ден 100-ге дейінгі тақ сандардың қосындысын табатын программа жаз.
3. 1-ден 100-ге дейінгі жұп сандардың көбейтіндісін табатын программа жаз.
4 . 1-ден N -ге дейінгі сандардың ішінен Х-тен санды тап.
5 . А жəне В аралығында жататын теріс сандарды санататын программа жаз
2.5.Зертханалық
жұмыс
№
5.ТІЗІМДЕР
.
Жұмыстың мақсаты: пролог программасында тізімдермен жұмыс жасауға дағдылану.
Қысқаша анықтама
Тізім – бұл бір ізді термадан тұратын, арнайы терманың түрі.
Ол квадрат жақша ішінде үтір арқылы жазылады. Мысалға:[1,2,-5,4,0].
Бұндай тізім келесідей сипатталады:
domains
list=integer*
Егер тізім аралас типті болса, онда келесідей сипатталады:
Domains
49
element=c(char); i(integer)
list=element*
Бұндай жазу келесідей тізімге сəйкес келеді.
[i(15), i(-6), c(‘a’), i(8), c(‘z’)]
Тізім пролог программасының негізгі құрылымы болып табылады.
Тізімдердің ыңғайлы жазылуы үшін екі түсінік енгізілген: басы (head) жəне
аяғы (tail). Мына тізім үшін [1,2,3] 1 элемент тізімнің басы болып саналады,
ал қалған элементтер [2,3] тізімнің аяғы.
Келесі кестеде тізімге байланысты негізгі мысалдар келтірілген:
Тізім Басы Аяғы
[’a’,’b’,’c’] ‘a’ [’b’,’c’]
[1] 1 []
[ ] айқындалмаған айқындалмаған
[[1,2,3],[3,4],[]] [1,2,3] [[3,4],[]]
Тізімде
басының
аяғынан
ажыратылуы
үшін
келесі
символ
пайдаланылады |. Мысалы, мына тізім үшін [X|Y] X – тізімнің басы,
Y - тізімнің аяғы.
Тізімдермен жұмысқа мысалдар :
а) қосу (X,L,L1) –L1 тізімі Х элементінің L тізімінің басына қосылуы
арқылы жасалынған.
қосу
(X,L,[X|L]). /* тапсырманың
шешуі
*/
б
) жатады
(X,L) – Х
элементі
L тізіміне
жатады
.
жатады
(X,[X|_]). /* шектеулі
шарт
*/
жатады
(X,[Y|T]):-X<>Y, жатады
(X,T).
в) тіркеу (L1,L2,L3) - L1 жəне L2 тізімдері L3 тізімінде қосылады, яғни
бірігеді.
L1 L2
H T1
H T3
L3
Келесі
тапсырма
үшін
Пролог
программасын
пайдаланамыз.
Элементтер саны берілген тізімнен, жаңа тізім құру керек. Ол тізімде
берілген элементтер екі есе үлкейіп жазылған болу керек. Екі тізімді де
стандарт түрде элементтерін үтір арқылы орналастырып, квадрат жақша
арқылы өрнектеу.
/* барлық элементтердің екі есе өсу программасы */
domains