Турбо Прологтағы программаның құрылымы
Зертханалық сабақтардың жоспары
1 Зертханалық жұмыс Турбо-Пролог программасының құрылымы
Жұмыстың мақсаты: Турбо-Пролог жүйесінің негізгі мүмкіндіктерін игеру,
Пролог тілінің негізгі түсініктерін, логикалық программалау тілінде
программа құрудың негізгі принциптерін үйрену.
Жұмысты атқарудағы әдістемелік ұсыныстар.
Турбо-Пролог IBM PC класты машиналарға арналған Prolog командасын енгізе
отырып Турбо- Пролог жүйесін активтендіруге болады.
Турбо – Пролог басты менюлері. PROLOG программасын жұмысқа қосқаннан
кейін компьютер экранында жүйенің терезелері пайда болады. Терезе төрт
бөліктен және экранның жоғарғы жағында пайда болған 7 меню пунктінен
тұрады.
Бірінші Еdit – терезесі, программаның мәтінін енгізуге арналған,
Dialog терезесінде программаның нәтижесіне байланысты берілген сұраққа
жауап беруге, яғни диалог жүргізуге мүмкіндік алынады. Message – төменгі
сол жақта орналасқан терезе хабарлау деген атқа ие болса, оң жақ төменде
Trace – трассировка жасау терезесі орналасқан.
Меню опцияларының әрқайсысының атқаратын қызметі әртүрлі.
1. Run –программаны жұмысқа қосу;
2. Compile – программаға трансляция жасау;
3. Edit – программа мәтінін редакциялау;
4. Options – компилятор опциясын беру;
5. Files - файлдармен жұмыс;
6. Setup – жүйенің күйін келтіру;
7. Quit – жүйеден шығу.
Командаларды екі түрлі тәсілмен беруге боладыы задаются 2 способами:
- команданың алғашқы әріпін кілтжиыннан теру арқылы;
- ( және ( нұсқау пернелерін басып, қажетті командаға апарғаннан кейін
Enter пернесін басу. .
Командалармен жұмысты аяқтау үшін Esc пернесін басу қажет. Экранның
жоғарғы қатарында экрандағы файл туралы мәлімет көрсетілген.
Indent – қатарды автоматты түрде теңестіру әлпісінің жұмысқа қосылып
тұрғанын білдірсе, Insert – қою әлпісінің жұмысқа қосылып тұрғанын
білдіреді.
WORK.PRO – жұмыс файлының еркін берілген аты.
. PRO – Пролог тілінде жазылған программаның кеңейтілуі болмақ.
Line 1, Col1 –курсордың бірінші қатардың бірінші позициясына тұрғанын
көрсетеді.
Тапсырма және жұмыстың орындалу тәртібі.
Жүйе менюін қолданып үйрену үшін Еdit командасына ауысып, Enter пернесін
басу қажет (E әрпін басса да болады). Editor терезесінің жоғарғы шетінде
жыпылықтаған курсор пайда болады. Редактор сізден программа мәтінін
енгізуді күтеді, F1 функционалдық пернесін басып, қажетті командалар мен
пернелердің атқаратын қызметтерін көруге болады.
Есепті шешу мысалдары
Турбо Прологта алғашқы программаны енгізетін де уақыт келді:
predicates
run
goal
run.
clauses
run :-
write(“Фамилия, аты, әкесінің аты, тобы”),nl,
write(“Турбо-Прологты үйренуді бастадым”).
Қатардың соңына шыққаннан кейін келесі қатарға ауысу үшін
Enterпернесін басса жеткілікті. Программаны орындауға жіберу үшін
редактордан шығу қажет. Ол үшін Esc пернесін басқан жөн.
Редактордағы курсор жоғалады да меню қатарында пайда болады. Run
командасына курсорды ауыстырып орындауға жібергеннен кейін, Message
хабарлау терезесіндегі көріністерге назар аударыңыз. Сонымен қатар Dialog
терезесіндегі программаның нәтижесіне қараңыз. Run командасын бергенде
трансляция автоматты түрде орындалады. Compile командасына жүгінудің қажеті
жоқ. Диалог құру терезесінде екі қатардан тұратын сіз енгізген
программадағы мәтін пайда болады.
WRITE тіркелген предикаты шығарудың ағымдағы құрылғысына жазбаны
шығарады. Мұндағы шығару құрылғысы экран болып табылады. Форматы:
WRITE(“ Мәтін “, V1,V2, ... ...)
Мұндағы V1,V2, ... ... – тұрақтылар немесе айнымалылар.
NL тіркелген предикаты қатарды келесі қатарға көшіру қызметін атқарады.
Форматы: NL.
Жүйе редакторына кіріп, топтың нөмірі жаңа қатардан шығатындай етіп
программаға өзгеріс енгізіңіз, яғни
фамилия, аты, әкесінің аты
тобы
мен Турбо-Прологты оқып отырмын.
Жүйе редакторына кіріп, программа мәтінің соңына жаңа қатар енгізіңіз:
nl, write(“кез-келген мәтін”)
Интерактивті режим. Диалог ұйымдастыру. Программаға алдыңғы ақпаратты
өзіңізден сұрап экранға шығаратындай жағдайда өзгеріс енгізіңіз.
predicates
dialog
clauses
dialog:-
write(“фамилияңызды, атыңызды енгзіңіз:”), nl,
readln(Name),nl,
write(“Сіздің оқитын тобыңыз?”), nl,
readln(Group),nl,
write(“жасыңыз нешеде:”), nl,
readint(Age),nl.
Мақсат (Goal) предикаты программаның орындалуын жұмысқа қосу үшін
қолданылады. Турбо-Прологта диалогты жоғарыда айтып өткендей Goal (мақсат)
терезесінде жүргізуге болады. Турбо –Прологта ішкі мақсатпен қатар сыртқы
мақсатпен жұмыс істеуге мүмкіндік бар. Ішкі мақсат программа құрамында
қамтылса, сыртқы мақсатпен жұмыс кезінде программаны орындауға жібергеннен
кейін сұрақты кілтжиыннан енгізу қажет.
Диалогты терезеде dialog сөзін енгізіңіз.
READCHAR тіркелеген предикаты енгізудің ағымдағы құрылғысынан символды
оқып, берілген айнымалымен салыстырады.
Форматы:
READCHAR(X)
READLN тіркелеген предикаты енгізудің ағымдағы құрылғысынан қатарды оқып,
берілген айнымалымен байланыстырады.
Форматы:
READLN (СТР)
Мұндағы ҚАТАР – қолданушы енгізген қатармен байланыстырылатын айнымалы.
READINT бүтін санды оқып, берілген айнымалымен байланыстырады.
Форматы:
READINT(Х).
READREAL нақты санды оқып, берілген айнымалымен байланыстырады.
Форматы:
READREAL(X).
Осы тақырып бойынша сынақ тапсыру үшін, орындалған программаны студент
оқытушыға көрсетіп, бақылау сұрақтарына жауап беруі қажет.
Программалауға тапсырма
1. Егер N құрамында ең аз дегенде екі элементі бар L тізімінің соңғының
алдындағы элементі болса, сол жағдайда шын мәнін қабылдайтын p(+L,-N) –
предикатын жазыңыз.
2. Бүтін дәрежеге шығару амалын көбейту және бөлу арқылы іске асырыңыз.
3. Егер L тізімдердің тізімі болса, ал а S - осы тізімдерді бір тізімге
біріктірген тізім болса, сол жағдайда шын мәнін қабылдайтын p(+L,-S)–
предикатын жазыңыз.
4. Егер L тізімі V тізіміне қайталап кіретін элементтерден тұрса, мысалы
p[a,b,c,d], [a,b,c,d] – шын
болса, сол жағдайда шын мәнін қабылдайтын p(+V, -L) – предикатын
жазыңыз.
5. Егер L тізімі V тізімінің N-орнына X қосқаннан пайда болатын
элементтерден тұрса болса, сол жағдайда шын мәнін қабылдайтын p(+X, +N,
+V, -L) – предикатын жазыңыз.
6. Егер L тізімі V тізімінің Y -орнына X ауытырғаннан соң пайда болатын
элементтерден тұрса болса, сол жағдайда шын мәнін қабылдайтын subst(+V,
+X, +Y, -L) – предикатын жазыңыз.
Негізгі әдебиеттер – 1[18-25, 152-165], 2[9-24,95-96], 5[3-12]
Қосымша әдебиеттер - 3[78-94], 5[20-30]
Бақылау сұрақтары:
1. Декларативті тілдің императивті тілден айырмашылығы.
2. Интерактивті режим дегеніміз не?
3. Ішкі мақсаттың сыртқы мақсаттан ерекшелігі;
4. Турбо-Пролог жүйесінің ерекшеліктері; Жүйенің терезелерімен меню
пункттері, редактор опциялары, мүмкіндіктері;
5. Турбо-Пролог тілінің негізгі түсініктері: терм, предикат, құрылым.
6. Жұмыс бойынша тіркелген предикаттардың басқа предикаттардан
айырмашылығы.
2 Зертханалық жұмыс Турбо-Пролог тіліндегі программаның құрылымы.
Статикалық дерекқор мысалындағы программаның орындалу барысы
Жұмыстың мақсаты: Турбо-Пролог тілінде программа құрудың негізгі
принциптерін , тілдің базалық түсініктерін оқып – үйрену.
Жұмысты атқарудағы әдістемелік ұсыныстар.
Турбо Прологта деректер фактылар мен ережелердің көмегімен
көрсетілдеі. Турбо – Пролог жүйесіндегі бір жүйеге келтірудің ішкі
программалары, программаның орындалуын және деректерді өңдеуді басқарады.
Турбо-Пролог тілінде жазылған кез-келген программа бес бөлімнен
тұрады. Кілттік сөздерді: domains, database, predicates, goal, clauses.
Әрқайсысы өздеріне сәйкес тараудың басын білдіреді.
Барлық программалар бұл тараулардың барлығын бірдей қамтымауы мүмкін.
Сонымен қатар пролог тілінде программаның кез келген жеріне түсінік
(комментарии ) беріп отыруға да болады. Ол былайша жазылады.
*комментарий *
Пролог тілінде программа жазған кезде мына ережелерді есте ұстаған жөн:
- барлық қатынастар мен объектілер аттары кіші әріппен жазылады;
- алдымен қатынас (предикат) аты жазылады. Сонан соң дөңгелек жақшаға
алына отырып объектілер аттары кіші әріппен жазылады. Объектілер арасы
үтірмен (,) бөлінеді;
- әрьір факт, мақсат нүктемен (.) аяқталу ытиіс.
Программаны орындау жүйе мақсат операторын кездестіргеннен бастап жүреді.
Мақсат дегеніміз – берілген программа шешуге тиіс тапсрыманың
құрастырылуы. Турбо – Прологта ішкі мақсатпен қатар, кілтжиынынан
программаны жұмысқа қосқаннан кейін енгізілетін сыртқы мақсаттың
қолданылатынын жоғарыда атап өткенбіз. Бұл жағдайда Турбо – Пролог Goal
(мақсат) шақыруын береді. Диалог жүргізу терезесінде Турбо – Пролог
мақсатты –программадағы фактылармен және ережелермен салыстырады.
Салыстыру принципі жоғарыдан төменге, солдан оңға қарай бағыттта
іздеуге негізделген.
Егер мақсат факт болып табылса, онда Турбо-Пролог True (Шындық) деп
немесе False (Жалған) деп немесе No деп жауап береді. Егер мақсат
айнымалыны қамтитын болса, пролог сол мәнді шығарып береді, болмаса No
solutions (шешімі жоқ) деген хабар шығарады.
Егер мақсат ішкі мақсаттардан тұрса және ішкі мақсаттардың ең
болмағанда біреуі салыстырылмайтын жағдайда тап болса, онда мақсат сәтсіз
аяқталды деп түсіну қажет. Егер барлық ішкі мақсаттар салыстырылатын
мүмкіндікке ие болса, онда мақсат сәтті болмақ.
Есепті шешу мысалдары
Тапсырма және жұмыстың орындалу реті. Фактылардан тұратын программаны
орындауға жіберіп, жоғарыдан төмен, солдан оңға қарай бағытта салыстыру
принципіне назар аударыңыз. Мақсат сыртқы.
Likes предикаты 2 объектінің арасындағы қатынасты суреттейді яғни
предикат 2 символдық аргументке ие. Осыған сәйкес предикаттарды суреттеу
бөлімінде былай жазамыз: likes (symbol, symbol). Домендерді көрсету
бөлімінде мәндер жиынын былай көрсету қажет: person, thing = symbol.
Бұл келтірілген мысалдарды программада былайша көрсетушге болады:
1 түрі:
domains
person, thing = symbol
predicates
likes (person, thing)
clauses
likes (tom, books).
likes (tom, car ).
likes (tom, tennis).
likes (mary, books).
likes (mary, picture).
likes (mary, tom).
2 түрі:
predicates
likes (symbol, symbol)
clauses
likes (tom, books).
likes (tom, car ).
likes (tom, tennis).
likes (tom, computer)
likes (mary, books).
likes (mary, picture).
likes (mary, tom).
likes (mary, dance)
Программа мәтінін енгізіп болғаннан кейін Run меню пункті арқылы
орындауға жіберу қажет. Программада қате болмаған жағдайда диалогты
терезеде Goal шақыруы пайда болады. Программада сыртқы мақсат қолданылады,
назар салыңыз.
Мынадай сұранымдар (мақсаттар) беріп, Enter пернесін басу керек:
1. likes (tom, X) *Томға не ұнайды*
2. likes (mary, X)
3. likes (X, Y) *кімге не ұнайды*
4. likes (X, car)
5. likes (X, books)
6. likes (mary, tom)
7. likes (tom, mary)
Шешімдерін көрсетіңіз. Қанша шешімі бар? Жүйе қандай жағдайда шешімін
бермейді, қай уақытта ол Yes немесе No жауабын береді? Өздеріңіз ойдан
сұрақтар беріңіздер. Оқытушыға шешімдеріңізді көрсетуді ұмытпаңыз.
Өзіңізді қызықтыратын ойын түрлерін көрсетіп программаға өзгеріс
енгізуіңізге немесе қайтадан программа жазуыңызға болады. Программадағы
clauses тарауында фактылардың соңына ереже қосып, predicates бөлімінде
жаңа предикаттарды суреттеуді ұмытпаңыз.
Predicates тарауына қосыңыз:
clever(symbol)
strong(symbol)
run
hobby(symbol,symbol)
clauses тарауына қосыңыз:
likes (kat, X) :-
likes (mary, X).
clever(X) :-
likes(X, books), likes(X, picture).
strong(X) :-
likes(X, tennis).
run :-
write(“Сіздің атыңыз? “), nl,
readln(N), nl,
write(N, “ , Томға ұнаған нәрсе сізге де ұнайды“),
nl,
readln(X), hobby(X, N).
hobby(X, N) :-
X=”да “,
write(N, “ ,сізге қозғалыс ұнайды “), nl,
readln(А), nl,
А=”да”,
write(N, “ , сізге теннис ұнайды “).
hobby(“да“, N) :-
nl, write(N, “ , сізге авто ұнайды “).
hobby(”нет“, N) :-
write(N, “ ,сізге тыныштық ұнайды “), nl,
readln(В),
В=“да“,
write(N, “ , сізге кітаптар ұнайды “);
nl, write(N, “ , сізге дискотека ұнайды“).
Программаның орындалу процесін түсіндіріңіз, ережені енгізгеннен кейін
қандай фактылар пайда болады?
Программа денесіне goal тарауын енгізіңіз, яғни мақсатты ішкі мақсатқа
айналдыру керек деген сөз. Енді мақсат ішкі мақсаттардан тұрады. Мақсат
ішкі мақсаттардың екеуі де сәтті болғанда ғана жеткілікті аяқталады.
goal
likes (tom,X),
write (“X=”, X).
Ішкі мақсатты пайдаланып жазған программаның орындалуын сыртқы мақсатты
программаның орындалуымен салыстырыңыз.
Мақсатты өзгертіңіз
goal
likes (X, Y),
write (“X=”, X, “Y=”, Y).
Әртүрлі типті объектілерді қолдану. Тапсырмалар вариантының бірін таңдап
программа жазыңыз және таңдалған тақырыпқа сәйкес статикалық дерекқор құру
қажет.
Мысалы, мынадай предикатты пайдаланып программа жазыңыз:
oқиды (студент фамилиясы, пән, баға, мерзімі)
study(name, subject, numb,data)
Бұл предикат символдық және бүтін сандық типті аргументтерді қамтиды.
Программалауға тапсырма
1. 6-7 студентке арналған және бірнеше пәнді қамтитын тұжырым жазыңыз.
Мұнда фамилия, пәннің тары, мерзімі бірнеше рет қайталануы мүмкін.
2. Программаны жұмысқа қосып, әртүлі сыртқы мақсатта сұранымдар беріп
көріңіз:айнымалыларсыз;
3. бір немесе бірнеше айнымалымен;анонимді айнымалылармен.
4. Программаға бірнеше ереже енгізіңіз, мысалы біледі (Х): -оқиды
(математика,_,5).программалаушы(Х): -оқиды(Х,сп,Z,Y),Z3, Y =5.
5. Мақсаттың ережемен қалай салыстыратынын түсіндіріңіз. Программаға ішкі
мақсатты қосып, өзгеріс енгізіңіз.
Тапсырмалар нұсқалары:
1) болып _табылады (ел, астана, халық, ауданы);
2) иемдену (адам, зат, саны, бағасы);
3) кітапхана (кітап, автор, бағасы, шыққан_жылы);
4) тұратын_ жері(фамилия, көше , үй, пәтер);
5) студент(фамилия, пән, баға, оқу _жылы);
6) автомобиль(түрі, түсі, құны, параметрі);
7) компьютер(түрі, фирма, процессор, құны);
8) видео(аты, актер, жанр, жылы, прокат);
9) аудио(әнші, диск, тираж, жылы);
10) азық_түлік(атаулары, өндіруші, сақталу мерзімі, бағасы);
11) дүкен(товар, елі, көлемі, бағасы);
12) кез-келген өзіңіздің ұсынатын вариантыңыз.
Негізгі әдебиеттер – 3 [104-117], 4[686-690],
Қосымша әдебиеттер - 3[78-94], 5[20-30]
Бақылау сұрақтары
1. Турбо Прологтағы программаның құрылымы. Барлық тараулардың
белгіленулері, қызметтері.
2. Турбо Прологтағы домендер түрлері.
3. Салыстыру принципі
4. Фактылар мен ережелердің айырмашылықтары, ереже қалай құрылады?
5. Предикаттардағы, мақсаттық тұжырымдағы байланыстар.
3 Зертханалық жұмыс ТУРБО ПРОЛОГТАҒЫ АРИФМЕТИКАЛЫҚ ОПЕРАЦИЯЛАР
Жұмыстың мақсаты Арифметикалық өрнектерді есептеу мен салыстыру үшін,
қызмет ететін тіркелген предикаттарды оқып үйрену.
Жұмысты атқарудағы әдістемелік ұсыныстар.
Турбо Пролог күрделі арифметикалық операцияларды орындауға арналмаса
да, құрамында қарапайым арифметикалықоператорларды қамтиды.
Турбо Прологта домендердің екі сандық типі қамтылған: бүтін және
нақты сандар. Сандарды өңдеудің тіркелген математикалық функциялары мен
предикаттарына ие. Бұлар арқылы сандарды өңдеуге болатыны белгілі.
Диапазон
- - Турбо Прологтағы бүтін сандар–32768 ден 32767-ге
- нақты сандар - +1E-307 –ден +1E308-ге дейін.
Турбо-Пролог жүйесінде мынадай арифметикалық операторлар бар:
+ қосу
- азайту
* көбейту
бөлу
mod - бүтін сандарды бөлуден қалған қалдық
div - бүтін сандарды бөлу
Екі арифметикалық өрнекті салыстыру үшін мынадай қатынас операциясы
қолданылады:
= тең
тең емес
үлкен
= үлкен немесе тең
кіші
= кіші немесе тең
Бұл операторлар операндалар арасына жазылады. Операндалар арифметикалық
өрнек болуы тиіс. Салыстыру предикаттары көрсетілген өрнекті есептейді,
олардың мәні қатынастарға сәйкес болса онда нәтиже сәтті аяқталады.
Есепті шешу мысалдары
Тапсырма және жұмыстың орындалу тәртібі. Қарапайым арифметикалық есептеуді
жүзеге асыратын программаны жазыңыз:
predicates
sred (integer, integer, real)
kvadr (integer, integer)
cub (integer, integer)
dmod (integer, integer, integer)
ddiv (integer, integer, real)
st (integer, integer, integer)
clauses
sred (A, B, D) :- D=(A+B)2. *орташа шамасын табу*
kvadr (B, D) :- D=B*B. * саннын квадратын есептеу*
cub (B, D) :- D=B*B*B. * кубты есептеу*
dmod (A, B, D) :- D=A mod B.* бүтін санды бөлуден қалған қалдықты
есептеу*
ddiv (A, B, D) :- D=A div B. * бүтінсандық бөлу*
st (N, 0, 1) :- !. *санды дәрежеге
келтіру*
st (N, P, R) :-
M=P-1,
st (N, M, Q),
R=N*Q.
Программалауға тапсырма
1. Пролог тілінде Компьютерді жөндеу жайында есептеуді жүзеге асыратын
программаны жазыңыз.
2. Пролог тілінде Автомобильді жөндеу жайында есептеуді жүзеге асыратын
программаны жазыңыз.
3. Пролог тілінде Пәтерді жөндеу (бөлмен), бөлмелер санын, өлшемдерін ойдан
алып, тұсқағаз жапсыруға кететін шығындарды есептеуді жүзеге асыратын
программаны жазыңыз.
4. Пролог тілінде квадраттық теңдеу түбірін есептеуді жүзеге асыратын
программаны жазыңыз.
5. Пролог тілінде Ұшбұрыштың ауданын табатын программаны жазыңыз. Оның үш
қабырғасы да белгілі деп есептейік (үш қабырғаның өлшемдерін ойдан
енгізіңіз). Герон формуласын қолданған жөн.
Негізгі әдебиеттер – 3 [104-117], 4[686-690],
Қосымша әдебиеттер - 3[78-94], 5[20-30]
Бақылау сұрақтары
1. Арифметикалық өрнектерді есептеуге арналған қандай тіркелген
предикатарды білесіз бе?
2. Салыстыру үшін қолданылатын предикаттарды атаңыз.
3. Турбо Прологта арифметикалық амалдарды орындауда қолданылатын негізгі
домен типтерін көрсетіңіз.
4. Тіркелген математикалық функциялар мен предикаттар түрлері.
5. Операторлардың префиксті жазылу формасы.
6. Операторлардың постфиксті жазылу формасы.
7. Операторлардың инфиксті жазылу формасы.
4 Зертханалық жұмыс Рекурсия
Жұмыстың мақсаты. Өзін өзі шақыруды қолданып ереже құруды үйрену.
Жұмысты атқарудағы әдістемелік ұсыныстар.
Программада бір тапсырманы бірнеше рет орындау қажет болған жағдайда
қайталау және рекурсия ережесі орындалады. Өзін өзі компонент ретінде
қарастыратын ережені рекурсия ережесі деп атайды. Қайталау ережесі шегінуді
қолданса, рекурсия ережесі өзін өзі шақыруды пайдаланады.
Рекурсияны басқарау үшін рекурсияның аяқталу шартын беру қажет. Олар
дерекқорда сұрақтарды қалыптастыру үшін тиімді , сонымен қатар тізім сияқты
домендік құрылымдарды өңдеу де ыңғайлы болмақ.
Есепті шешу мысалдары
Рекурсияны қамтитын екі программа берілген. Программаның қай жерінде
рекурсия қолданылғанын, одан шығу ережесін түсіндіріңіз. Бірінші программа:
predicates
play_it
play (integer)
test (integer, integer)
generate (integer)
goal
play_it.
clauses
play_it :-
generate (X),
play (X).
generate (X) :-
random (R),
X=1+R*100,
nl, write (“Мен сан жасырдым”).
play (X) :-
nl, write (“Өзіңіздің санынызды енгізіңіз”),
nl, readint (G),
test (X, G),
play (X).
test (X, G) :-
X=G,
nl, write (“Дұрыс!”),
nl, readchar (_),
exit.
test (X, G) :-
XG,
nl, write (“КІШІ”).
test (X, G) :-
XG,
nl, write (“ҮЛКЕН”).
Екінші программа:
predicates
fact (integer, integer)
clauses
fact (1, 1) :- !.
fact (N, F) :-
M=N-1,
fact (M, P),
F=P*N.
Программалауға тапсырма
1. Егер L тізімінің элементтері V тізіміндегі P предикатын (тізім
іріктеуі) қанағаттандыратын элементтерден тұратын элементтер болса, сол
жағдайда шын мәнін қабылдайтын filter(+V, +P, -L) – предикатын жазыңыз.
2. Жинақтау параметрі әдісін қолданып, Фибоначчи сандарын есептеуге
арналған предикатын жазыңыз
3. Егер S саны N натуралды сандарының қоындысы болса сол жағдайда шын мәнін
қабылдайтын summa_digits(+N, -S) – предикатын жазыңыз.
4. Берілген натурал сан қарапайым ба соны анықтайтын предикатты жазыңыз
5. Тізімді қарапайым таңдаумен іріктейтін (өсуі бойынша) программа жазыңыз.
6. Егер L тізімінің әртүрлі элементтерінің жалпы саны N болса, сол жағдайда
шын мәнін қабылдайтын p(+L,-N) – предикатын жазыңыз.
7. В тізіміндегі кейбір элементтерді сызу арқылы А тізіміндегі элементтерді
тану мүмкіндігін беретін p(+А, +В) предикатын программалаңыз.
8. Егер Sum саны TreeOfInteger ағашының төбесі болатын бүтін сандар
қосындысы болса, сол жағдайдағы sum_tree(+TreeOfInteger, -Sum) қатынас
түрін табыңыз.
9. Сандарды қосуға, алуға, көбейтінділерге бөлуге мүмкіндік беретін
plus(?X,?Y,?Z) программа вариантын жазыңыз.
10. Егер L тізімі саны N болатын нөлдер, бірліктерден, екіліктерден
тұратын тізбектер болса және ондағы цифрлардың ешқайсысы екі рет
қайталанбаса (ХХ түріндегі бөліктер жоқ) сол жағдайда шын мәнін
қабылдайтын p(+L,-N) – предикатын жазыңыз.
11. Егер Term деп аталатын термға кіретін ішкі Sub термдерінің саны N
санына тең болса, сол жағдайда шын мәнін қабылдайтын occurances(+Sub,
+Term, -N) – предикатын жазыңыз. Term термінде ешқандай айнымалы
болмайды.
Негізгі әдебиеттер – 1 [47-76], 2[30-38], 5 [16-17]
Қосымша әдебиеттер - 3[78-94], 5[20-30]
Бақылау сұрақтары
1. Рекурсия дегеніміз не?
2. Рекурсиядан шығу жолы.
3. Шегіну дегенді қалай түсінесіз?
4. Программада рекурсиядан шығу шарты қай жерде көрсетілген?
5 Зертханалық жұмыс – Лисп тілінің базалық функциялары
Жұмыстың мақсаты: Лисп тілінің базалық функцияларын оқып үйрену,
оның таңбалары мен қасиеттерін және санмен жұмыс істейтін құралдарын
білу. Функциялар жазудағы дағдыны қалыптастыру. Енгізу-шығару
функцияларын оқып үйрену.
Жұмысты атқарудағы әдістемелік ұсыныстар.
Лисп тілі сандық емес есептерді өңдеуге бағытталған. Ол тізімдік
құрылымдар алгебрасына, лямбда-есептеулер мен рекурсия теориясына
негізделген. Лисп тілі функционалды бағыттағы тіл, яғни жақшаға алынған
редактордан тыс енгізілген кез келген сөйлем функция болып есептеледі де,
бірден ENTER батырмасын басқан соң орындалады. Өрнек мәнін есептеуді
болдырмау үшін, өрнек алдынан апостроф ’ белгісін қою керек. Өрнек
алдындағы апостроф - Лисп тіліндегі қысқартылған QUOTE функциясы. Лисп
тілінде программаны бейнелеу формалары мен ол өңдейтін деректер түрі
бірдей. Екеуі де біркелкі формасы бар тізімдік құрылыммен беріледі.
Деректер типі деректер объектілері аттарымен байланыспаған, олар
объектілердің өзін бастап отырады. Айнымалылар әртүрлі уақыт кезеңінде
әртүрлі объектілерді бейнелейді. Лисп тілі деректерінің негізгі типі –
атомдар және тізімдер. Атомдар - бұл таңбалар мен сандар.
Функциялар анықтамалары файлдарда сақталады және LOAD функциясын
пайдалана отырып жүктеледі: (load файл аты)
Бұл функция өрнектер файлын жүктейді және оны орындайды..Файл аты -
бұл файл атын кеңейтусіз (".lsp" кеңейтуі) беретін жолдық константа. Егер
операция сәтті аяқталса, онда LOAD файлда анықталған соңғы функция атын
қайтарады. Егер операция сәтсіз аяқталса, онда LOAD жолдық өрнек түріндегі
функция атын қайтарады. LOAD функциясы Лисп тілінің басқа функциясынан
шақырылмайды. Ол Лисп тілінің басқа функциясы орындалмаса, бұл функция
бірден пернетақтадан шақырылады. Интерпретатор Лисп тіліндегі бастапқы
мәтіндері бар программаларды Лисп тілінің кеңейтуі бар файлдар деп
есептейді.
Xlisp тілінің жүйесі мына команда арқылы іске қосылады: Xlisp-PLUS
Жүктелу өткен бірнеше секундттан соң дисплей экранына мына хабар шығады:
XLISP-PLUS Version 2.1h
Portions Copyright (C ) 1988, by David Betz.
Modified by Thomas Almy and others.
Жүйенің жұмысқа дайын екенін білдіретін белгі шығады. Жүйелі редактор
өз жұмысын бастайды да, экранға менюлер шығады: File, Edit и Run.
Талдау функциясы. CAR функциясы тізімнің бірінші элементін қайтарады.
(CAR тізім) ( S - өрнегі (атом немесе тізім).
CONS құру функциясы. CONS функциясы оған аргумент есебінде берілген
тізім басы мен құйрығынан жаңа тізім құрады. (CONS бас құйрық). CONS
функциясы ның бірінші элементін екінші элементтің мәні ретінде қою үшін
екінші аргумент тізім болуы керек. CONS функциясының мәні үнемі тізім
болады.
SET, SETQ, SETF мән беру функциялары. SET функциясы - таңбаға мән
береді немесе онымен белгілі бір мәнді байланыстырады. Және де ол өзінің
екі аргументінің де мәнін есептейді. Анықталған байланыс түрі жұмыс
аяқталғанша сол мәнде болады.
Есепті шешу мысалдары
Функциялар мысалдары. CAR функциясы мән есебінде тізімнің бірінші
элементін қайтарады.
(CAR список) ( S - өрнегі (атом немесе тізім).
_(CAR ‘(a b c d)) ( a
_(CAR ‘((a b) c d)) ( (a b)
_(CAR ‘(a)) ( a
_(CAR NIL) ( NIL Бос тізімнің басы – бос тізім.
Апострофсыз (a b c d) аргументі бар CAR функциясын шақыру b c d
аргументі бар a функциясын шақырумен бірдей болады да, бірден қате
туралы хабар шығады.
CAR функциясы аргументтері тізім болатын функциялар үшін орындалады.
(CAR ‘a) ( Error
CDR функциясы - мән есебінде тізімнің құйрығын қайтарады, яғни
бастапқы тізімнен оның бас элементін алып тастағаннан кейінгі тізімді
қайтарады:
(CDR список) ( список
CDR функциясы тек тізімдер үшін анықталған.
_(CDR ‘(a b c d)) ( (b c d)
_(CDR ‘((a b) c d)) ( (c d)
_(CDR ‘(a (b c d))) ( ((b c d))
_(CDR ‘(a)) ( NIL
_(CDR NIL) ( NIL
_(CDR ‘a) ( Error
CONS құру функциясы.
CONS функциясы оған аргумент есебінде берілген тізім басы мен
құйрығынан жаңа тізім құрады. (CONS бас құйрық).
CONS функциясының бірінші элементін екінші элементтің мәні ретінде
қою үшін екінші аргумент тізім болуы керек. CONS функциясының мәні үнемі
тізім болады. (CONS s-өрнегі тізім) ( тізім
_(CONS ‘a ‘(b c)) ( (a ... жалғасы
1 Зертханалық жұмыс Турбо-Пролог программасының құрылымы
Жұмыстың мақсаты: Турбо-Пролог жүйесінің негізгі мүмкіндіктерін игеру,
Пролог тілінің негізгі түсініктерін, логикалық программалау тілінде
программа құрудың негізгі принциптерін үйрену.
Жұмысты атқарудағы әдістемелік ұсыныстар.
Турбо-Пролог IBM PC класты машиналарға арналған Prolog командасын енгізе
отырып Турбо- Пролог жүйесін активтендіруге болады.
Турбо – Пролог басты менюлері. PROLOG программасын жұмысқа қосқаннан
кейін компьютер экранында жүйенің терезелері пайда болады. Терезе төрт
бөліктен және экранның жоғарғы жағында пайда болған 7 меню пунктінен
тұрады.
Бірінші Еdit – терезесі, программаның мәтінін енгізуге арналған,
Dialog терезесінде программаның нәтижесіне байланысты берілген сұраққа
жауап беруге, яғни диалог жүргізуге мүмкіндік алынады. Message – төменгі
сол жақта орналасқан терезе хабарлау деген атқа ие болса, оң жақ төменде
Trace – трассировка жасау терезесі орналасқан.
Меню опцияларының әрқайсысының атқаратын қызметі әртүрлі.
1. Run –программаны жұмысқа қосу;
2. Compile – программаға трансляция жасау;
3. Edit – программа мәтінін редакциялау;
4. Options – компилятор опциясын беру;
5. Files - файлдармен жұмыс;
6. Setup – жүйенің күйін келтіру;
7. Quit – жүйеден шығу.
Командаларды екі түрлі тәсілмен беруге боладыы задаются 2 способами:
- команданың алғашқы әріпін кілтжиыннан теру арқылы;
- ( және ( нұсқау пернелерін басып, қажетті командаға апарғаннан кейін
Enter пернесін басу. .
Командалармен жұмысты аяқтау үшін Esc пернесін басу қажет. Экранның
жоғарғы қатарында экрандағы файл туралы мәлімет көрсетілген.
Indent – қатарды автоматты түрде теңестіру әлпісінің жұмысқа қосылып
тұрғанын білдірсе, Insert – қою әлпісінің жұмысқа қосылып тұрғанын
білдіреді.
WORK.PRO – жұмыс файлының еркін берілген аты.
. PRO – Пролог тілінде жазылған программаның кеңейтілуі болмақ.
Line 1, Col1 –курсордың бірінші қатардың бірінші позициясына тұрғанын
көрсетеді.
Тапсырма және жұмыстың орындалу тәртібі.
Жүйе менюін қолданып үйрену үшін Еdit командасына ауысып, Enter пернесін
басу қажет (E әрпін басса да болады). Editor терезесінің жоғарғы шетінде
жыпылықтаған курсор пайда болады. Редактор сізден программа мәтінін
енгізуді күтеді, F1 функционалдық пернесін басып, қажетті командалар мен
пернелердің атқаратын қызметтерін көруге болады.
Есепті шешу мысалдары
Турбо Прологта алғашқы программаны енгізетін де уақыт келді:
predicates
run
goal
run.
clauses
run :-
write(“Фамилия, аты, әкесінің аты, тобы”),nl,
write(“Турбо-Прологты үйренуді бастадым”).
Қатардың соңына шыққаннан кейін келесі қатарға ауысу үшін
Enterпернесін басса жеткілікті. Программаны орындауға жіберу үшін
редактордан шығу қажет. Ол үшін Esc пернесін басқан жөн.
Редактордағы курсор жоғалады да меню қатарында пайда болады. Run
командасына курсорды ауыстырып орындауға жібергеннен кейін, Message
хабарлау терезесіндегі көріністерге назар аударыңыз. Сонымен қатар Dialog
терезесіндегі программаның нәтижесіне қараңыз. Run командасын бергенде
трансляция автоматты түрде орындалады. Compile командасына жүгінудің қажеті
жоқ. Диалог құру терезесінде екі қатардан тұратын сіз енгізген
программадағы мәтін пайда болады.
WRITE тіркелген предикаты шығарудың ағымдағы құрылғысына жазбаны
шығарады. Мұндағы шығару құрылғысы экран болып табылады. Форматы:
WRITE(“ Мәтін “, V1,V2, ... ...)
Мұндағы V1,V2, ... ... – тұрақтылар немесе айнымалылар.
NL тіркелген предикаты қатарды келесі қатарға көшіру қызметін атқарады.
Форматы: NL.
Жүйе редакторына кіріп, топтың нөмірі жаңа қатардан шығатындай етіп
программаға өзгеріс енгізіңіз, яғни
фамилия, аты, әкесінің аты
тобы
мен Турбо-Прологты оқып отырмын.
Жүйе редакторына кіріп, программа мәтінің соңына жаңа қатар енгізіңіз:
nl, write(“кез-келген мәтін”)
Интерактивті режим. Диалог ұйымдастыру. Программаға алдыңғы ақпаратты
өзіңізден сұрап экранға шығаратындай жағдайда өзгеріс енгізіңіз.
predicates
dialog
clauses
dialog:-
write(“фамилияңызды, атыңызды енгзіңіз:”), nl,
readln(Name),nl,
write(“Сіздің оқитын тобыңыз?”), nl,
readln(Group),nl,
write(“жасыңыз нешеде:”), nl,
readint(Age),nl.
Мақсат (Goal) предикаты программаның орындалуын жұмысқа қосу үшін
қолданылады. Турбо-Прологта диалогты жоғарыда айтып өткендей Goal (мақсат)
терезесінде жүргізуге болады. Турбо –Прологта ішкі мақсатпен қатар сыртқы
мақсатпен жұмыс істеуге мүмкіндік бар. Ішкі мақсат программа құрамында
қамтылса, сыртқы мақсатпен жұмыс кезінде программаны орындауға жібергеннен
кейін сұрақты кілтжиыннан енгізу қажет.
Диалогты терезеде dialog сөзін енгізіңіз.
READCHAR тіркелеген предикаты енгізудің ағымдағы құрылғысынан символды
оқып, берілген айнымалымен салыстырады.
Форматы:
READCHAR(X)
READLN тіркелеген предикаты енгізудің ағымдағы құрылғысынан қатарды оқып,
берілген айнымалымен байланыстырады.
Форматы:
READLN (СТР)
Мұндағы ҚАТАР – қолданушы енгізген қатармен байланыстырылатын айнымалы.
READINT бүтін санды оқып, берілген айнымалымен байланыстырады.
Форматы:
READINT(Х).
READREAL нақты санды оқып, берілген айнымалымен байланыстырады.
Форматы:
READREAL(X).
Осы тақырып бойынша сынақ тапсыру үшін, орындалған программаны студент
оқытушыға көрсетіп, бақылау сұрақтарына жауап беруі қажет.
Программалауға тапсырма
1. Егер N құрамында ең аз дегенде екі элементі бар L тізімінің соңғының
алдындағы элементі болса, сол жағдайда шын мәнін қабылдайтын p(+L,-N) –
предикатын жазыңыз.
2. Бүтін дәрежеге шығару амалын көбейту және бөлу арқылы іске асырыңыз.
3. Егер L тізімдердің тізімі болса, ал а S - осы тізімдерді бір тізімге
біріктірген тізім болса, сол жағдайда шын мәнін қабылдайтын p(+L,-S)–
предикатын жазыңыз.
4. Егер L тізімі V тізіміне қайталап кіретін элементтерден тұрса, мысалы
p[a,b,c,d], [a,b,c,d] – шын
болса, сол жағдайда шын мәнін қабылдайтын p(+V, -L) – предикатын
жазыңыз.
5. Егер L тізімі V тізімінің N-орнына X қосқаннан пайда болатын
элементтерден тұрса болса, сол жағдайда шын мәнін қабылдайтын p(+X, +N,
+V, -L) – предикатын жазыңыз.
6. Егер L тізімі V тізімінің Y -орнына X ауытырғаннан соң пайда болатын
элементтерден тұрса болса, сол жағдайда шын мәнін қабылдайтын subst(+V,
+X, +Y, -L) – предикатын жазыңыз.
Негізгі әдебиеттер – 1[18-25, 152-165], 2[9-24,95-96], 5[3-12]
Қосымша әдебиеттер - 3[78-94], 5[20-30]
Бақылау сұрақтары:
1. Декларативті тілдің императивті тілден айырмашылығы.
2. Интерактивті режим дегеніміз не?
3. Ішкі мақсаттың сыртқы мақсаттан ерекшелігі;
4. Турбо-Пролог жүйесінің ерекшеліктері; Жүйенің терезелерімен меню
пункттері, редактор опциялары, мүмкіндіктері;
5. Турбо-Пролог тілінің негізгі түсініктері: терм, предикат, құрылым.
6. Жұмыс бойынша тіркелген предикаттардың басқа предикаттардан
айырмашылығы.
2 Зертханалық жұмыс Турбо-Пролог тіліндегі программаның құрылымы.
Статикалық дерекқор мысалындағы программаның орындалу барысы
Жұмыстың мақсаты: Турбо-Пролог тілінде программа құрудың негізгі
принциптерін , тілдің базалық түсініктерін оқып – үйрену.
Жұмысты атқарудағы әдістемелік ұсыныстар.
Турбо Прологта деректер фактылар мен ережелердің көмегімен
көрсетілдеі. Турбо – Пролог жүйесіндегі бір жүйеге келтірудің ішкі
программалары, программаның орындалуын және деректерді өңдеуді басқарады.
Турбо-Пролог тілінде жазылған кез-келген программа бес бөлімнен
тұрады. Кілттік сөздерді: domains, database, predicates, goal, clauses.
Әрқайсысы өздеріне сәйкес тараудың басын білдіреді.
Барлық программалар бұл тараулардың барлығын бірдей қамтымауы мүмкін.
Сонымен қатар пролог тілінде программаның кез келген жеріне түсінік
(комментарии ) беріп отыруға да болады. Ол былайша жазылады.
*комментарий *
Пролог тілінде программа жазған кезде мына ережелерді есте ұстаған жөн:
- барлық қатынастар мен объектілер аттары кіші әріппен жазылады;
- алдымен қатынас (предикат) аты жазылады. Сонан соң дөңгелек жақшаға
алына отырып объектілер аттары кіші әріппен жазылады. Объектілер арасы
үтірмен (,) бөлінеді;
- әрьір факт, мақсат нүктемен (.) аяқталу ытиіс.
Программаны орындау жүйе мақсат операторын кездестіргеннен бастап жүреді.
Мақсат дегеніміз – берілген программа шешуге тиіс тапсрыманың
құрастырылуы. Турбо – Прологта ішкі мақсатпен қатар, кілтжиынынан
программаны жұмысқа қосқаннан кейін енгізілетін сыртқы мақсаттың
қолданылатынын жоғарыда атап өткенбіз. Бұл жағдайда Турбо – Пролог Goal
(мақсат) шақыруын береді. Диалог жүргізу терезесінде Турбо – Пролог
мақсатты –программадағы фактылармен және ережелермен салыстырады.
Салыстыру принципі жоғарыдан төменге, солдан оңға қарай бағыттта
іздеуге негізделген.
Егер мақсат факт болып табылса, онда Турбо-Пролог True (Шындық) деп
немесе False (Жалған) деп немесе No деп жауап береді. Егер мақсат
айнымалыны қамтитын болса, пролог сол мәнді шығарып береді, болмаса No
solutions (шешімі жоқ) деген хабар шығарады.
Егер мақсат ішкі мақсаттардан тұрса және ішкі мақсаттардың ең
болмағанда біреуі салыстырылмайтын жағдайда тап болса, онда мақсат сәтсіз
аяқталды деп түсіну қажет. Егер барлық ішкі мақсаттар салыстырылатын
мүмкіндікке ие болса, онда мақсат сәтті болмақ.
Есепті шешу мысалдары
Тапсырма және жұмыстың орындалу реті. Фактылардан тұратын программаны
орындауға жіберіп, жоғарыдан төмен, солдан оңға қарай бағытта салыстыру
принципіне назар аударыңыз. Мақсат сыртқы.
Likes предикаты 2 объектінің арасындағы қатынасты суреттейді яғни
предикат 2 символдық аргументке ие. Осыған сәйкес предикаттарды суреттеу
бөлімінде былай жазамыз: likes (symbol, symbol). Домендерді көрсету
бөлімінде мәндер жиынын былай көрсету қажет: person, thing = symbol.
Бұл келтірілген мысалдарды программада былайша көрсетушге болады:
1 түрі:
domains
person, thing = symbol
predicates
likes (person, thing)
clauses
likes (tom, books).
likes (tom, car ).
likes (tom, tennis).
likes (mary, books).
likes (mary, picture).
likes (mary, tom).
2 түрі:
predicates
likes (symbol, symbol)
clauses
likes (tom, books).
likes (tom, car ).
likes (tom, tennis).
likes (tom, computer)
likes (mary, books).
likes (mary, picture).
likes (mary, tom).
likes (mary, dance)
Программа мәтінін енгізіп болғаннан кейін Run меню пункті арқылы
орындауға жіберу қажет. Программада қате болмаған жағдайда диалогты
терезеде Goal шақыруы пайда болады. Программада сыртқы мақсат қолданылады,
назар салыңыз.
Мынадай сұранымдар (мақсаттар) беріп, Enter пернесін басу керек:
1. likes (tom, X) *Томға не ұнайды*
2. likes (mary, X)
3. likes (X, Y) *кімге не ұнайды*
4. likes (X, car)
5. likes (X, books)
6. likes (mary, tom)
7. likes (tom, mary)
Шешімдерін көрсетіңіз. Қанша шешімі бар? Жүйе қандай жағдайда шешімін
бермейді, қай уақытта ол Yes немесе No жауабын береді? Өздеріңіз ойдан
сұрақтар беріңіздер. Оқытушыға шешімдеріңізді көрсетуді ұмытпаңыз.
Өзіңізді қызықтыратын ойын түрлерін көрсетіп программаға өзгеріс
енгізуіңізге немесе қайтадан программа жазуыңызға болады. Программадағы
clauses тарауында фактылардың соңына ереже қосып, predicates бөлімінде
жаңа предикаттарды суреттеуді ұмытпаңыз.
Predicates тарауына қосыңыз:
clever(symbol)
strong(symbol)
run
hobby(symbol,symbol)
clauses тарауына қосыңыз:
likes (kat, X) :-
likes (mary, X).
clever(X) :-
likes(X, books), likes(X, picture).
strong(X) :-
likes(X, tennis).
run :-
write(“Сіздің атыңыз? “), nl,
readln(N), nl,
write(N, “ , Томға ұнаған нәрсе сізге де ұнайды“),
nl,
readln(X), hobby(X, N).
hobby(X, N) :-
X=”да “,
write(N, “ ,сізге қозғалыс ұнайды “), nl,
readln(А), nl,
А=”да”,
write(N, “ , сізге теннис ұнайды “).
hobby(“да“, N) :-
nl, write(N, “ , сізге авто ұнайды “).
hobby(”нет“, N) :-
write(N, “ ,сізге тыныштық ұнайды “), nl,
readln(В),
В=“да“,
write(N, “ , сізге кітаптар ұнайды “);
nl, write(N, “ , сізге дискотека ұнайды“).
Программаның орындалу процесін түсіндіріңіз, ережені енгізгеннен кейін
қандай фактылар пайда болады?
Программа денесіне goal тарауын енгізіңіз, яғни мақсатты ішкі мақсатқа
айналдыру керек деген сөз. Енді мақсат ішкі мақсаттардан тұрады. Мақсат
ішкі мақсаттардың екеуі де сәтті болғанда ғана жеткілікті аяқталады.
goal
likes (tom,X),
write (“X=”, X).
Ішкі мақсатты пайдаланып жазған программаның орындалуын сыртқы мақсатты
программаның орындалуымен салыстырыңыз.
Мақсатты өзгертіңіз
goal
likes (X, Y),
write (“X=”, X, “Y=”, Y).
Әртүрлі типті объектілерді қолдану. Тапсырмалар вариантының бірін таңдап
программа жазыңыз және таңдалған тақырыпқа сәйкес статикалық дерекқор құру
қажет.
Мысалы, мынадай предикатты пайдаланып программа жазыңыз:
oқиды (студент фамилиясы, пән, баға, мерзімі)
study(name, subject, numb,data)
Бұл предикат символдық және бүтін сандық типті аргументтерді қамтиды.
Программалауға тапсырма
1. 6-7 студентке арналған және бірнеше пәнді қамтитын тұжырым жазыңыз.
Мұнда фамилия, пәннің тары, мерзімі бірнеше рет қайталануы мүмкін.
2. Программаны жұмысқа қосып, әртүлі сыртқы мақсатта сұранымдар беріп
көріңіз:айнымалыларсыз;
3. бір немесе бірнеше айнымалымен;анонимді айнымалылармен.
4. Программаға бірнеше ереже енгізіңіз, мысалы біледі (Х): -оқиды
(математика,_,5).программалаушы(Х): -оқиды(Х,сп,Z,Y),Z3, Y =5.
5. Мақсаттың ережемен қалай салыстыратынын түсіндіріңіз. Программаға ішкі
мақсатты қосып, өзгеріс енгізіңіз.
Тапсырмалар нұсқалары:
1) болып _табылады (ел, астана, халық, ауданы);
2) иемдену (адам, зат, саны, бағасы);
3) кітапхана (кітап, автор, бағасы, шыққан_жылы);
4) тұратын_ жері(фамилия, көше , үй, пәтер);
5) студент(фамилия, пән, баға, оқу _жылы);
6) автомобиль(түрі, түсі, құны, параметрі);
7) компьютер(түрі, фирма, процессор, құны);
8) видео(аты, актер, жанр, жылы, прокат);
9) аудио(әнші, диск, тираж, жылы);
10) азық_түлік(атаулары, өндіруші, сақталу мерзімі, бағасы);
11) дүкен(товар, елі, көлемі, бағасы);
12) кез-келген өзіңіздің ұсынатын вариантыңыз.
Негізгі әдебиеттер – 3 [104-117], 4[686-690],
Қосымша әдебиеттер - 3[78-94], 5[20-30]
Бақылау сұрақтары
1. Турбо Прологтағы программаның құрылымы. Барлық тараулардың
белгіленулері, қызметтері.
2. Турбо Прологтағы домендер түрлері.
3. Салыстыру принципі
4. Фактылар мен ережелердің айырмашылықтары, ереже қалай құрылады?
5. Предикаттардағы, мақсаттық тұжырымдағы байланыстар.
3 Зертханалық жұмыс ТУРБО ПРОЛОГТАҒЫ АРИФМЕТИКАЛЫҚ ОПЕРАЦИЯЛАР
Жұмыстың мақсаты Арифметикалық өрнектерді есептеу мен салыстыру үшін,
қызмет ететін тіркелген предикаттарды оқып үйрену.
Жұмысты атқарудағы әдістемелік ұсыныстар.
Турбо Пролог күрделі арифметикалық операцияларды орындауға арналмаса
да, құрамында қарапайым арифметикалықоператорларды қамтиды.
Турбо Прологта домендердің екі сандық типі қамтылған: бүтін және
нақты сандар. Сандарды өңдеудің тіркелген математикалық функциялары мен
предикаттарына ие. Бұлар арқылы сандарды өңдеуге болатыны белгілі.
Диапазон
- - Турбо Прологтағы бүтін сандар–32768 ден 32767-ге
- нақты сандар - +1E-307 –ден +1E308-ге дейін.
Турбо-Пролог жүйесінде мынадай арифметикалық операторлар бар:
+ қосу
- азайту
* көбейту
бөлу
mod - бүтін сандарды бөлуден қалған қалдық
div - бүтін сандарды бөлу
Екі арифметикалық өрнекті салыстыру үшін мынадай қатынас операциясы
қолданылады:
= тең
тең емес
үлкен
= үлкен немесе тең
кіші
= кіші немесе тең
Бұл операторлар операндалар арасына жазылады. Операндалар арифметикалық
өрнек болуы тиіс. Салыстыру предикаттары көрсетілген өрнекті есептейді,
олардың мәні қатынастарға сәйкес болса онда нәтиже сәтті аяқталады.
Есепті шешу мысалдары
Тапсырма және жұмыстың орындалу тәртібі. Қарапайым арифметикалық есептеуді
жүзеге асыратын программаны жазыңыз:
predicates
sred (integer, integer, real)
kvadr (integer, integer)
cub (integer, integer)
dmod (integer, integer, integer)
ddiv (integer, integer, real)
st (integer, integer, integer)
clauses
sred (A, B, D) :- D=(A+B)2. *орташа шамасын табу*
kvadr (B, D) :- D=B*B. * саннын квадратын есептеу*
cub (B, D) :- D=B*B*B. * кубты есептеу*
dmod (A, B, D) :- D=A mod B.* бүтін санды бөлуден қалған қалдықты
есептеу*
ddiv (A, B, D) :- D=A div B. * бүтінсандық бөлу*
st (N, 0, 1) :- !. *санды дәрежеге
келтіру*
st (N, P, R) :-
M=P-1,
st (N, M, Q),
R=N*Q.
Программалауға тапсырма
1. Пролог тілінде Компьютерді жөндеу жайында есептеуді жүзеге асыратын
программаны жазыңыз.
2. Пролог тілінде Автомобильді жөндеу жайында есептеуді жүзеге асыратын
программаны жазыңыз.
3. Пролог тілінде Пәтерді жөндеу (бөлмен), бөлмелер санын, өлшемдерін ойдан
алып, тұсқағаз жапсыруға кететін шығындарды есептеуді жүзеге асыратын
программаны жазыңыз.
4. Пролог тілінде квадраттық теңдеу түбірін есептеуді жүзеге асыратын
программаны жазыңыз.
5. Пролог тілінде Ұшбұрыштың ауданын табатын программаны жазыңыз. Оның үш
қабырғасы да белгілі деп есептейік (үш қабырғаның өлшемдерін ойдан
енгізіңіз). Герон формуласын қолданған жөн.
Негізгі әдебиеттер – 3 [104-117], 4[686-690],
Қосымша әдебиеттер - 3[78-94], 5[20-30]
Бақылау сұрақтары
1. Арифметикалық өрнектерді есептеуге арналған қандай тіркелген
предикатарды білесіз бе?
2. Салыстыру үшін қолданылатын предикаттарды атаңыз.
3. Турбо Прологта арифметикалық амалдарды орындауда қолданылатын негізгі
домен типтерін көрсетіңіз.
4. Тіркелген математикалық функциялар мен предикаттар түрлері.
5. Операторлардың префиксті жазылу формасы.
6. Операторлардың постфиксті жазылу формасы.
7. Операторлардың инфиксті жазылу формасы.
4 Зертханалық жұмыс Рекурсия
Жұмыстың мақсаты. Өзін өзі шақыруды қолданып ереже құруды үйрену.
Жұмысты атқарудағы әдістемелік ұсыныстар.
Программада бір тапсырманы бірнеше рет орындау қажет болған жағдайда
қайталау және рекурсия ережесі орындалады. Өзін өзі компонент ретінде
қарастыратын ережені рекурсия ережесі деп атайды. Қайталау ережесі шегінуді
қолданса, рекурсия ережесі өзін өзі шақыруды пайдаланады.
Рекурсияны басқарау үшін рекурсияның аяқталу шартын беру қажет. Олар
дерекқорда сұрақтарды қалыптастыру үшін тиімді , сонымен қатар тізім сияқты
домендік құрылымдарды өңдеу де ыңғайлы болмақ.
Есепті шешу мысалдары
Рекурсияны қамтитын екі программа берілген. Программаның қай жерінде
рекурсия қолданылғанын, одан шығу ережесін түсіндіріңіз. Бірінші программа:
predicates
play_it
play (integer)
test (integer, integer)
generate (integer)
goal
play_it.
clauses
play_it :-
generate (X),
play (X).
generate (X) :-
random (R),
X=1+R*100,
nl, write (“Мен сан жасырдым”).
play (X) :-
nl, write (“Өзіңіздің санынызды енгізіңіз”),
nl, readint (G),
test (X, G),
play (X).
test (X, G) :-
X=G,
nl, write (“Дұрыс!”),
nl, readchar (_),
exit.
test (X, G) :-
XG,
nl, write (“КІШІ”).
test (X, G) :-
XG,
nl, write (“ҮЛКЕН”).
Екінші программа:
predicates
fact (integer, integer)
clauses
fact (1, 1) :- !.
fact (N, F) :-
M=N-1,
fact (M, P),
F=P*N.
Программалауға тапсырма
1. Егер L тізімінің элементтері V тізіміндегі P предикатын (тізім
іріктеуі) қанағаттандыратын элементтерден тұратын элементтер болса, сол
жағдайда шын мәнін қабылдайтын filter(+V, +P, -L) – предикатын жазыңыз.
2. Жинақтау параметрі әдісін қолданып, Фибоначчи сандарын есептеуге
арналған предикатын жазыңыз
3. Егер S саны N натуралды сандарының қоындысы болса сол жағдайда шын мәнін
қабылдайтын summa_digits(+N, -S) – предикатын жазыңыз.
4. Берілген натурал сан қарапайым ба соны анықтайтын предикатты жазыңыз
5. Тізімді қарапайым таңдаумен іріктейтін (өсуі бойынша) программа жазыңыз.
6. Егер L тізімінің әртүрлі элементтерінің жалпы саны N болса, сол жағдайда
шын мәнін қабылдайтын p(+L,-N) – предикатын жазыңыз.
7. В тізіміндегі кейбір элементтерді сызу арқылы А тізіміндегі элементтерді
тану мүмкіндігін беретін p(+А, +В) предикатын программалаңыз.
8. Егер Sum саны TreeOfInteger ағашының төбесі болатын бүтін сандар
қосындысы болса, сол жағдайдағы sum_tree(+TreeOfInteger, -Sum) қатынас
түрін табыңыз.
9. Сандарды қосуға, алуға, көбейтінділерге бөлуге мүмкіндік беретін
plus(?X,?Y,?Z) программа вариантын жазыңыз.
10. Егер L тізімі саны N болатын нөлдер, бірліктерден, екіліктерден
тұратын тізбектер болса және ондағы цифрлардың ешқайсысы екі рет
қайталанбаса (ХХ түріндегі бөліктер жоқ) сол жағдайда шын мәнін
қабылдайтын p(+L,-N) – предикатын жазыңыз.
11. Егер Term деп аталатын термға кіретін ішкі Sub термдерінің саны N
санына тең болса, сол жағдайда шын мәнін қабылдайтын occurances(+Sub,
+Term, -N) – предикатын жазыңыз. Term термінде ешқандай айнымалы
болмайды.
Негізгі әдебиеттер – 1 [47-76], 2[30-38], 5 [16-17]
Қосымша әдебиеттер - 3[78-94], 5[20-30]
Бақылау сұрақтары
1. Рекурсия дегеніміз не?
2. Рекурсиядан шығу жолы.
3. Шегіну дегенді қалай түсінесіз?
4. Программада рекурсиядан шығу шарты қай жерде көрсетілген?
5 Зертханалық жұмыс – Лисп тілінің базалық функциялары
Жұмыстың мақсаты: Лисп тілінің базалық функцияларын оқып үйрену,
оның таңбалары мен қасиеттерін және санмен жұмыс істейтін құралдарын
білу. Функциялар жазудағы дағдыны қалыптастыру. Енгізу-шығару
функцияларын оқып үйрену.
Жұмысты атқарудағы әдістемелік ұсыныстар.
Лисп тілі сандық емес есептерді өңдеуге бағытталған. Ол тізімдік
құрылымдар алгебрасына, лямбда-есептеулер мен рекурсия теориясына
негізделген. Лисп тілі функционалды бағыттағы тіл, яғни жақшаға алынған
редактордан тыс енгізілген кез келген сөйлем функция болып есептеледі де,
бірден ENTER батырмасын басқан соң орындалады. Өрнек мәнін есептеуді
болдырмау үшін, өрнек алдынан апостроф ’ белгісін қою керек. Өрнек
алдындағы апостроф - Лисп тіліндегі қысқартылған QUOTE функциясы. Лисп
тілінде программаны бейнелеу формалары мен ол өңдейтін деректер түрі
бірдей. Екеуі де біркелкі формасы бар тізімдік құрылыммен беріледі.
Деректер типі деректер объектілері аттарымен байланыспаған, олар
объектілердің өзін бастап отырады. Айнымалылар әртүрлі уақыт кезеңінде
әртүрлі объектілерді бейнелейді. Лисп тілі деректерінің негізгі типі –
атомдар және тізімдер. Атомдар - бұл таңбалар мен сандар.
Функциялар анықтамалары файлдарда сақталады және LOAD функциясын
пайдалана отырып жүктеледі: (load файл аты)
Бұл функция өрнектер файлын жүктейді және оны орындайды..Файл аты -
бұл файл атын кеңейтусіз (".lsp" кеңейтуі) беретін жолдық константа. Егер
операция сәтті аяқталса, онда LOAD файлда анықталған соңғы функция атын
қайтарады. Егер операция сәтсіз аяқталса, онда LOAD жолдық өрнек түріндегі
функция атын қайтарады. LOAD функциясы Лисп тілінің басқа функциясынан
шақырылмайды. Ол Лисп тілінің басқа функциясы орындалмаса, бұл функция
бірден пернетақтадан шақырылады. Интерпретатор Лисп тіліндегі бастапқы
мәтіндері бар программаларды Лисп тілінің кеңейтуі бар файлдар деп
есептейді.
Xlisp тілінің жүйесі мына команда арқылы іске қосылады: Xlisp-PLUS
Жүктелу өткен бірнеше секундттан соң дисплей экранына мына хабар шығады:
XLISP-PLUS Version 2.1h
Portions Copyright (C ) 1988, by David Betz.
Modified by Thomas Almy and others.
Жүйенің жұмысқа дайын екенін білдіретін белгі шығады. Жүйелі редактор
өз жұмысын бастайды да, экранға менюлер шығады: File, Edit и Run.
Талдау функциясы. CAR функциясы тізімнің бірінші элементін қайтарады.
(CAR тізім) ( S - өрнегі (атом немесе тізім).
CONS құру функциясы. CONS функциясы оған аргумент есебінде берілген
тізім басы мен құйрығынан жаңа тізім құрады. (CONS бас құйрық). CONS
функциясы ның бірінші элементін екінші элементтің мәні ретінде қою үшін
екінші аргумент тізім болуы керек. CONS функциясының мәні үнемі тізім
болады.
SET, SETQ, SETF мән беру функциялары. SET функциясы - таңбаға мән
береді немесе онымен белгілі бір мәнді байланыстырады. Және де ол өзінің
екі аргументінің де мәнін есептейді. Анықталған байланыс түрі жұмыс
аяқталғанша сол мәнде болады.
Есепті шешу мысалдары
Функциялар мысалдары. CAR функциясы мән есебінде тізімнің бірінші
элементін қайтарады.
(CAR список) ( S - өрнегі (атом немесе тізім).
_(CAR ‘(a b c d)) ( a
_(CAR ‘((a b) c d)) ( (a b)
_(CAR ‘(a)) ( a
_(CAR NIL) ( NIL Бос тізімнің басы – бос тізім.
Апострофсыз (a b c d) аргументі бар CAR функциясын шақыру b c d
аргументі бар a функциясын шақырумен бірдей болады да, бірден қате
туралы хабар шығады.
CAR функциясы аргументтері тізім болатын функциялар үшін орындалады.
(CAR ‘a) ( Error
CDR функциясы - мән есебінде тізімнің құйрығын қайтарады, яғни
бастапқы тізімнен оның бас элементін алып тастағаннан кейінгі тізімді
қайтарады:
(CDR список) ( список
CDR функциясы тек тізімдер үшін анықталған.
_(CDR ‘(a b c d)) ( (b c d)
_(CDR ‘((a b) c d)) ( (c d)
_(CDR ‘(a (b c d))) ( ((b c d))
_(CDR ‘(a)) ( NIL
_(CDR NIL) ( NIL
_(CDR ‘a) ( Error
CONS құру функциясы.
CONS функциясы оған аргумент есебінде берілген тізім басы мен
құйрығынан жаңа тізім құрады. (CONS бас құйрық).
CONS функциясының бірінші элементін екінші элементтің мәні ретінде
қою үшін екінші аргумент тізім болуы керек. CONS функциясының мәні үнемі
тізім болады. (CONS s-өрнегі тізім) ( тізім
_(CONS ‘a ‘(b c)) ( (a ... жалғасы
Ұқсас жұмыстар
Пәндер
- Іс жүргізу
- Автоматтандыру, Техника
- Алғашқы әскери дайындық
- Астрономия
- Ауыл шаруашылығы
- Банк ісі
- Бизнесті бағалау
- Биология
- Бухгалтерлік іс
- Валеология
- Ветеринария
- География
- Геология, Геофизика, Геодезия
- Дін
- Ет, сүт, шарап өнімдері
- Жалпы тарих
- Жер кадастрі, Жылжымайтын мүлік
- Журналистика
- Информатика
- Кеден ісі
- Маркетинг
- Математика, Геометрия
- Медицина
- Мемлекеттік басқару
- Менеджмент
- Мұнай, Газ
- Мұрағат ісі
- Мәдениеттану
- ОБЖ (Основы безопасности жизнедеятельности)
- Педагогика
- Полиграфия
- Психология
- Салық
- Саясаттану
- Сақтандыру
- Сертификаттау, стандарттау
- Социология, Демография
- Спорт
- Статистика
- Тілтану, Филология
- Тарихи тұлғалар
- Тау-кен ісі
- Транспорт
- Туризм
- Физика
- Философия
- Халықаралық қатынастар
- Химия
- Экология, Қоршаған ортаны қорғау
- Экономика
- Экономикалық география
- Электротехника
- Қазақстан тарихы
- Қаржы
- Құрылыс
- Құқық, Криминалистика
- Әдебиет
- Өнер, музыка
- Өнеркәсіп, Өндіріс
Қазақ тілінде жазылған рефераттар, курстық жұмыстар, дипломдық жұмыстар бойынша біздің қор #1 болып табылады.
Ақпарат
Қосымша
Email: info@stud.kz