- •Қазақстан республикасы білім және ғылым министрлігі м.Х.Дулати атындағы тараз мемлекеттік университеті
- •Әдістемелік нұсқау Тараз 20___
- •Функционалды бағдарламалау ( haskell тілі) hugs 98 де жұмыс істеу негіздері
- •«Haskell тілінің негіздері»
- •Логикалық бағдарламалау
- •Бақылау мысалы
- •Жұмысқа тапсырма
- •Негізгі түсініктер
- •Жұмысқа тапсырма
- •Тапсырма варианттары
- •Бақылау мысалдары
- •Бақылау мысалы
- •Жұмысқа тапсырма
- •Тапсырма варианттары
- •7.№1 Сөж тапсырмалары. Жоғарғы ретті функциялар
- •Қосымша
Бақылау мысалы
Программа бөлігі, оның тереңдігінен өтіп, барлық элементтерін баспаға шығарады.
show_tree(nil).
show_tree(tree(X,Left,Right)):-write(X),show_tree(Left), show_tree(Right).
Жұмысқа тапсырма
1. Сәйкес варианттың есептерін шешетін программа құру керек.
2.Программадағы бұтақтарды автоматты енгізу/шығару мүмкіндіктерінқарастыру керек.
3. Программаның жұмысын тексеретін, тест деректерін таңдау керек.
4. Есепті шешу кезінде жіберілген қателердің тізімі мен талдауы, жасалған жұмыстың есебін дайындау.
Тапсырма варианттары
Жолдың ең үлкен ұзындығын есептеп, оның трассивровкасын шығару керек.
Барлық төбелердің таңбаларын олардың еселіктерімен қоса шығару керек.
Графтың бұтақтәріздес бүркемелерін құру керек.
Ең көп кіру санына тең, бұтақ төбесінің таңбасын ерекшелеу керек.
Көрсетілген бұтақ қабатына белгіленген таңбасы бар төбені қосу керек.
Бинарлық сұрыпталған бұтақ негізінде, сызықты сандық тізімнің сұрыпталуын жүзеге асыратын программаны құру керек.
Бұтақты изоморфизмге тексеру керек.
Байланыс графы үшін көрсетілген төбеден бастап, бұтақ бүркемесін құру керек.
Бұтақтағы барлық көрсетілген таңбасы бар ішкі бұтақтарды ерекшелеу керек.
Бұтақтың таңбаны беру арқылы ені бойынша айналып шығуын жүзеге асыру керек.
Көрсетілген таңба жоқ болған жағдайда, жою мүмкіндігі жоқ деген хабарлама шығару керек,ал гер бар болса, оны жою керек.
Бұтақтың таңбаны беру арқылы тереңнен айналып шығуын жүзеге асыру керек .
Бұтақтан көрсетілген ішкі бұтақты іздеуді жүзеге асыру керек.
Көрсетілген таңбаның бұтаққа ену санын есептеу керек.
Бұтақтағы ішкі бұтақтардың ең үлкен ерекшелеу керек.
Бұтақтың төбелерін санау керек. Бұтақтың ең үлкен жолын шығару керек.
Бұтақтың сәйкес төбелерінің санын есептеу керек. Подсчитать в дереве количество совпадающих вершин.
Бинарлық бұтақтың, ондағы ең үлкен ену санына ие элементін шығару керек.
Екі бұтақты изоморфизм қасиеті бойынша салыстыру керек.
Алгебралық өрнек бойынша бұтақ құру керек.
7.№1 Сөж тапсырмалары. Жоғарғы ретті функциялар
Келесі тапсырманы Haskell: тілінде орындайтын программаны орындаңыз: Функция параметрлері пернетақтадан енгізіледі.
1) Функция max3, үш бүтін сан бойынша үлкенін қайтарады.
2) Функция min3, үш бүтін сан бойынша кішісін қайтарады.
3) Функция sort2, екі бүтін сан бойынша, кішісі – бірінші орында тұрған, ал үлкені – екінші орында тұрған сандар жұбын қайтарады.
4) Функция bothTrue :: Bool -> Bool -> Bool, тек оның екі аргументі True мәнін қабылдаған кезде, сонда ғана True мәнін қайтаратын функция. Функцияны анықтау кезінде стандартты логикалық операцияларды (&&, || и т.п.) қолдануға болмайды.
5) Функция solve2::Double->Double->(Bool,Double), ax + b = 0 сызықтық теңдеуінің коэффициенттері болып табылатын екі сан бойынша, егер шешімі бар болса, бірінші элементі True мәнін қабылдайтын, ал жоқ болса, False мәнін қабылдайтын, сандар жұбын қайтарады; осындағы екінші элемент түбірдің мәніне тең немесе 0.0 мәніне тең.
6) Функция isParallel, егер ұштары функция аргументімен берілетін екі кесінді параллель (немес бір түзудің бойында жатса) болса, True мәнін қайтарады. Мысалы, isParallel (1,1) (2,2) (2,0) (4,2) өрнегінің мәні True мәніне ие болады, себебі (1, 1) − (2, 2) и (2, 0) − (4, 2) кесінділері өзара параллель.
7) Функция isIncluded, аргументтері жазықтықтағы екі шеңбердің параметрлері болатын функция (центрлерінің координаттары мен радиустары) True мәнін қайтарады, егер екінші шеңбер түгелдей бірінші шеңбердің ішінде жатса.
8) Функция isRectangular, параметрлері ретінде жазықтықтағы үш нүктенің координаттарын қабылдайтын, және осы нүктелер арқылы құрылған үшбұрыш – тікбұрышты болғанда, True мәнін қайтаратын функция.
9) Функция isTriangle, x, y және z ұзындықтарымен берілген кесінділерден үшбұрыш құруға болатынын анықтайтын функция.
10) Функция isSorted, кірісінде үш санды қабылдайтын және егер олар өсуі не кемуі бойынша реттелген болса, True мәнін қайтаратын функция.
№1 СӨЖ тапсырмалары. Кері қайту арқылы іздеу (Prolog)
Вариант 1
Георафиялық анықтамалық құруға арналған программа жазу керек. Анықтамалықта келесі ақпараттар бар: елдердің атаулары мен елдердің аудандарының көлемі. Атауы бойынша анықтамалықтағы барлық ақпараттың шығуын қамтамасыз ету керек. Ауданы бойынша іздеуді жүзеге асыру кезінде, қандай да бір шартты мәнді енгізу мүмкіндігі болу керек. (Мысалы, ауданы 3 млн. км2 –тан кем болмайтын, барлық елдердің атауларын шығару керек). Жұмысқа ыңғайлы болу үшін, сәйкес бөлімдері бар мәзір құру керек.
Вариант 2
Төрт арифметикалық амалды орындайтын калькулятордың программасын жазу керек (жақшасыз).
Вариант 3
Сөздік құруға арналған программа жазу керек. Сөздікте келесі ақпараттар болуы керек: сөз және оның бірнеше аудармасы. Орысшадан ағылшын тіліне, ағылшын тілінен орысшаға аударатын барлық сөздікті шығаруды жүзеге асыру керек. Жұмысқа ыңғайлы болу үшін, сәйкес бөлімдері бар мәзір құру керек.
Вариант 4
Авиаанықтамалықты құруға арналған программа жазу керек. Анықтамалықта әр рейске қатысты келесі ақпараттар болуы керек: рейс нөмірі, баратын жері, билет бағасы. Анықтамалықтан, рейс нөмірі бойынша баратын жерді іздеудің барлық ақпараттарын шығаруды жүзеге асыру керек. Баратын жер бойынша, мүмкін болатын ең қымбат билет бағасы арқылы іздеуді жүзеге асыру керек (билет бағасы көрсетілген мәннен төмен болатын барлық рейстер шығарылуы керек). Жұмысқа ыңғайлы болу үшін, сәйкес бөлімдері бар мәзір құру керек.
Вариант 5
Театр билеттерін сатудың программасын жазу керек. Келесі ақпараттар ұсынылуы керек: спектакль, бос орындар, билет бағасы. Қатар бойынша билетті іздеуді, билет туралы барлық ақпараттарды шығаруды жүзеге асыру керек. Көрсетілген мүмкің болатын ең қымбат билет бағасы бойынша іздеуді жүзеге асыру керек (бағасы көрсетілген мәннен төмен болатын барлық билеттер шығарылуы керек). Жұмысқа ыңғайлы болу үшін, сәйкес бөлімдері бар мәзір құру керек.
Вариант 6
Автомагазиннің программасын жазу керек. Әр автомобиль туралы келесі ақпараттар ұсынылуы керек: моделі, қозғалтқыш қуаты, түсі, бағасы. Автомобильдер бойынша түсі арқылы іздеуді жүргізетін барлық ақпаратты шығаруды жүзеге асыру керек. Қуаты бойынша ең аз қуатты көрсету арқылы іздеуді жүзеге асыру керек (қуаты көрсетілген мәннен жоғары болатын барлық модельдер туралы ақпарат шығарылуы керек). Жұмысқа ыңғайлы болу үшін, сәйкес бөлімдері бар мәзір құру керек.
Вариант 7
Кітап дүкенін жүзеге асыратын программа жазу керек. Келесі ақпараттар ұсынылуы керек: кітаптың аты, нұсқалар саны, бағасы. Аты бойынша ізделген барлық кітаптар туралы ақпаратты шығаруды жүзеге асыру керек. Мүмкін болатын бағалар аралығын көрсетіп, бағасы бойынша іздеуді жүзеге асыру керек (бағалары көрсетілген аралықта жататын барлық кітаптар туралы ақпараттар шығарылуы керек). Жұмысқа ыңғайлы болу үшін, сәйкес бөлімдері бар мәзір құру керек.
Вариант 8
Туристік турларды сатуға арналған программаны жазу керек. Келесі ақпараттар ұсынылуы керек: тур атау, ел, ұзақтығы, бағасы. Елі бойынша ізделген турлар жайында барлық ақпаратты шығару керек. Көрсетілген мүмкін болатын ұзақтық аралығындағы барлық турлар туралы ақпартты шығаруды жүзеге асыру керек (ұзақтығы көрсетілген аралққа дәл келетін, турлар туралы барлық ақпараттар шығарылуы керек). Жұмысқа ыңғайлы болу үшін, сәйкес бөлімдері бар мәзір құру керек.
Вариант 9
Қонақ үйдегі орынға тапсырыс берудің программасын жазу керек. Келесі ақпараттар ұсынылуы керек: қонақ үйдің аты, қонақ үй класы, бос орындар, нөмір бағасы. Класы бойынша ізделген қонақ үйдегі барлық бос орында туралы ақпаратты шығаруды жүзеге асыру керек. Мүмкін болатын бағаны көрсетіп, соған сәйкес баға бойынша іздеуді жүзеге асыру керек (бағасы көрсетілген мәннен төмен болатын нөмірлер туралы барлық ақпараттар шығарылуы керек). Жұмысқа ыңғайлы болу үшін, сәйкес бөлімдері бар мәзір құру керек.
Вариант 10
Телефон анықтамасын құруға арналған программаны жазу керек. Анықтамалықта әрбір абонент туралы келесі ақпараттар ұсынылуы керек.: аты мен телефоны. Аты бойынша телефонын іздейтін, телефоны бойынша аты-жөнін іздейтін анықтамалықтағы барлық ақпаратты шығаруды жүзеге асыру керек. Жұмысқа ыңғайлы болу үшін, сәйкес бөлімдері бар мәзір құру керек.
Әдістемелік нұсқаулар:
Кері қайту арқылы іздеу
Prolog тілінің маңызды артықшылықтарының бірі, барлық шешімдерді іздеу мүмкіндігі болып табылады. Барлық шешімдерді іздеу, кері қайту арқылы іздеу механизмімен жүзеге асырылады.
Кері қайту арқылы іздеудің төрт негізгі ережесін құрастыруға болады:
Ереже 1: ішкі мақсаттар, солдан оңға қарай реті бойынша сәйкестендірілуі керек;
Ереже 2: Сөйлемдер, программа мәтінінде пайда болған реті бойынша тексеріледі;
Ереже 3: ішкі мақсат ереже тақырыбымен сәйкес келсе, онда бұл ереженің денесі дәлелденуі керек (ереже денесі, өз кезегінде дәлелдеуді қажет ететін ішкі мақсаттардан тұрады);
Ереже 4: мақсаттар бұтағының әр төбесі үшін сәйкес фактілер табылған кезде, мақсаттық ұйғарымдар байланысқан деп есептеледі.
Мысал:
DOMAINS
name, thing=symbol
PREDICATES
hobby (name, thing)
reads (name)
is_inquisitive (name)
CLAUSES
hobby (“Ян”, “теннис”).
hobby (“Лена”, “лыжи”).
hobby (X, “книги”):- reads (X), is_inquisitive (X).
hobby (“Лена”, “книги”).
reads (“Ян”).
is_inquisitive (“Ян”).
Goal: hobby (Y, “теннис”), hobby (Y, “книги”).
Y=“Ян”
Шешімді іздеуді басқаруға арналған екі стандартты предикат бар:
fail предикаты, кері қайту бойынша іздеуді қолдау үшін қолданылады;
предикат ! (қиып өту), кері қайту арқылы іздеуді тоқтатуда қолданылады.
fail предикаты дәлелдеуде сәтсіздікке ұшырайды, сондықтан кері қайту арқылы іздеуді қолдайды.
Мысал.
DOMAINS
name=symbol
PREDICATES
father (name, name)
everybody
CLAUSES
father (“Павел”, “Петр”).
father (“Петр”, “Михаил”).
father (“Петр”, “Иван”).
everybody:- father (X, Y), write (X, “это отец ”, Y, “а”), nl, fail.
GOAL
everybody.
Жұмыс нәтижесі келесі хабарламаны шығару болады, және программаның жұмысы сәтсіз аяқталады:
Павел это отец Петра
Петр это отец Михаила
Петр это отец Ивана
Предикат ! (қиып өту) кері қайтатын барлық нүктелерді жояды, яғни қиып өту арқылы кері қайту арқылы іздеуді орындау мүмкін емес.
Мысал.
r(1):- !, a, b, c.
r(2):- !, d.
r(3):- !, e.
r(_):- write (“Это предложение-ловушка”).
