50
Ф ФСО ПГУ 7.18.2/05 Қазақстан Республикасы Білім және ғылым министрлігі С. Торайғыров атындағы Павлодар мемлекеттік университеті Физика, математика және ақпараттық технологиялар факультеті Информатика және ақпараттық жүйелер кафедрасы ТІЛДЕР МЕН АВТОМАТТАР ТЕОРИЯСЫ пәні бойынша зертханалық жұмыстарды орындауға арналған әдістемелік нұсқаулар

14 -15 зертханалық жұмыс · Web viewЕгер кіру және шығу алфавиті: и үлгісінде берілсе, және кіру мен шығу тілдері

  • Upload
    others

  • View
    9

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 14 -15 зертханалық жұмыс · Web viewЕгер кіру және шығу алфавиті: и үлгісінде берілсе, және кіру мен шығу тілдері

ФФСО ПГУ 7.18.2/05

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

С. Торайғыров атындағы Павлодар мемлекеттік университеті

Физика, математика және ақпараттық технологиялар факультеті

Информатика және ақпараттық жүйелер кафедрасы

ТІЛДЕР МЕН АВТОМАТТАР ТЕОРИЯСЫ

пәні бойынша зертханалық жұмыстарды орындауға арналған әдістемелік нұсқаулар

Павлодар

Page 2: 14 -15 зертханалық жұмыс · Web viewЕгер кіру және шығу алфавиті: и үлгісінде берілсе, және кіру мен шығу тілдері

ФФСО ПГУ 7.18.2/05

БЕКІТЕМІНФМж/еАТ факультетінің деканы___________ С.К.Тлеукенов 200 __ ж. «___»____________

Құрастырушы: Доцент Джарасова Г.С.

Информатика және ақпараттық жүйелер кафедрасы

050602 «Информатика» мамандығының студенттері үшін

«Тілдер мен автоматтар теориясы» пәні бойынша зертханалық жұмыстарға әдістемелік нұсқаулар

Кафедра мәжілісінде бекітілді, 200__ж. «___»____________ Хаттама №_____.

Кафедра меңгерушісі _________________________ Нұрбекова Ж.Қ.

Факультеттің әдістемелік кеңесінде құпталды,

200__ж. «___»____________ Хаттама №_____.

ӘК төрайымы _________________________ А.Т.Кишубаева

Page 3: 14 -15 зертханалық жұмыс · Web viewЕгер кіру және шығу алфавиті: и үлгісінде берілсе, және кіру мен шығу тілдері

1 -2 зертханалық жұмыс. Толық автоматтардың эквиваленттілігі мен минимизациясы. Дербес автоматтар және олардың минимизациясы.

Мақсаты: Студентерді бағдарламаны кезеңмен құруға үйрету

5.1 Қысқаша теориялық мәліметтерКнут – Моррис – Пратта алгоритмі (КМП)

Оларды оңнан солға, әріппен әріпті қарастырамыз, сонымен қоса натурал сандардың массивін толтырамыз , онда = сөз ұзындығы (l функциясы өткен пункте анықталған).

Сөзбен: сөз басынын ұзындығы , бір уақытта оның соңы болып келеді. Бұл барлығы бағыңынқы сөзді іздестіруге қандай қатысы бар? Басқа сөзбен айтқанда, сөзі сөзінің бағыңқысы болады ма, соны анықтау үшін КМП алгоритмін қолданамыз.

Шешімі. КМП алгоритмін сөзіне қолданайық, - арнайы әріп, немесе кездеспейді. сөзі сөзінің бағыңқысы болып келгенде ғана,сандар арасында

массиві сөзінің ұзындығына тең болады.

Мысалы кестені толтыру алгоритмін жазыңыз.

Шешімі. I бірінші мағынасы табылған деп есептейі. Біз сөздін кезекті әріпін оқимыз (т.е. ) және есептеуміз керек .

--------------------------------------------------------| x | | оқылған бөлігі--------------------------------------------------------\-----------Z-----------/ \------------Z------------/

Басқа сөзбен айтқанда, сөзінің бас жағы бізге керегі , Оны соңы болып табылады – оның ішінен ең ұзының таңдауымыз керек. Бұл басталымдыр қайдан алынған. Әр қайсысы (босты санамағанда ) кейбір сөзінен әріптерін қосқанда. пайда болады. сөзі сөздін басы және аяқ жағы болып келеді. Бірақта сөздің басы мен аяғы болып келетін сөздер келе бермейді, одан кейін әріпі тұру керек.

сөзін табу жолы пайда болады. Алдымен барлық сөздердің басын қарастырайық, сол уақытта ол олардың аяқ жағы болып табылады. Олардың ішінен

әріпінен кейін тұратын сөзді таңдайық. Қажеттінің ішінен ең ұзының таңдайық. Ең соңына жазғанда, ізделетін сөзді аламыз.

Page 4: 14 -15 зертханалық жұмыс · Web viewЕгер кіру және шығу алфавиті: и үлгісінде берілсе, және кіру мен шығу тілдері

Енді айтқандардың бәрін төменде қарастырайық.

i:=1; l[1]:= 0;{кесте l[1]..l[i] дұрыс толтырылған}while i <> n do begin| len := l[i]| {len – сөз басының ұзындығы x[1]..x[i], оның соңы болып келетін| ең ұзын басталымдар қажет болмай қалды | }| while (x[len+1] <> x[i+1]) and (len > 0) do begin| | {бас жағы келмейді, l функциясын қолданайық}| | len := l[len];| end;| {керектіні таптыңыз ба немесе жоқ екеніне көзіңіз жетті ме? }| if x[len+1] = x[i+1] do begin| | {x[1]..x[len] - ең қажетті ұзын бас жағы}| | l[i+1] := len+1;| end else begin| | {қажеттілері жоқ}| | l[i+1] := 0;| end;| i := i+1;end;

Тапсырма 1Жоғарыда келтірілген алгоритмдегі әрекет кейбір тұрақтылар үшін

аспайды.

Тапсырма 2Бұл алгоритмді қолданамыз, сөздің ұзындығы сөз бағыңқысы сөз

ұзындығы тең екенін дәлелдейік. (Соны арнайы бөлгішпен қалай жасауға болады). Әрекеттер саны аспайды, және жадысын қалай пайдалнуға болады (егер де тұрақты үлгі қысқа болса, ал оның іздейтін сөзде ол ұзын болады).

Тапсырма 3Сәйкес алгоритмді жазыңыз ( сөзі сөзінің бағыңқысы

болып келеді).

Тапсырма 4Берілген массивтердің элементтері ішінен әр түрлі сандарын табыңыз.

тәртібіндегі әрекеттер саны. Шешімі. Сандарды сұрыптап, ал сосын әр түрлі сандарды есептеу керек

(тәртіп бойынша массив элементтерін қарап).

Тапсырма 5

Page 5: 14 -15 зертханалық жұмыс · Web viewЕгер кіру және шығу алфавиті: и үлгісінде берілсе, және кіру мен шығу тілдері

кесіндісі берілген тура максималды табыңыз, для которого существует точка прямой, кесіндісімен жабылған, тура нүктесі бар ("қабаттардың максималды саны").

Әрекеттер саны - тәртібінде. Шешімі. Кесінділердің барлық сол жақ және оң жақ аяқ жақтарын белгілейік

(сол түзу нүктесінде орналасқан, сол жақ аяқ жағы оң жағына қарағанда қысқа болып келеді). Ары қарай солдан оңға қарай жылжып, қабаттар саның есептейміз. Кездескен сол жақ соңы қабаттар саның 1-ге арттырады,ал оң жақ азайтады. Белгілейік, бір біріне жақын келген кесінділер дұрыс өңделеді: ең бірінші сол жақ соңы келеді (оң жақ кесіндінің), ал сосын оң жақ (сол жақ кесіндінің).

Тапсырма 6Жазықтықта n нүктелері берілген.

- сынған бекітілмеген өздігінен қиыспаған түйінді белгілеңіз, барлық нүктелерден өтетін. (Көршілес кесінділерге бір түзу сызықта жатуға болады) тәртібіндегі әрекеттер саны.

Тапсырма 7Сол есеп, егерде сынған бекітілген болса.

Тапсырма 8 жазықтығындағы нүктелер берілген. Олардың дөңес қаптамасын құрыңыз-

минималды дөңес фигурасы бар. (Резенке сақина, тақтайға шегеленген шегелерге киілген – олардың дөңес қаптамасы.) Операциялар саны .кем емес

Нұсқаулықтар. Нүктелерді реттейік – алдағы екі есепте қолданған тәртіптер келе береді. Сосын, нүктелерді кезегімен қарастырайық.Қарастырылған нүктелердің дөңес қаптамасын құрамыз (дөңес қаптаманы сақтау үшін деректер түрлері туралы 6 тараудағы қараңыз).

Бақылау сұрақтары

1 -грамматикасында қандай атрибуттар қолданылады?2 Атрибут дегеніміз не?3 Қандай тарату грамматиканы - атрибуттық грамматика немесе -

грамматикасы деп атайды? 3-4 зертханалық жұмыс. Шекті айқындауыштар. Формальды тілдер және

грамматикалар. Орын ауыстырулар. Жиынтықтар. Айырулар

Мақсаты: Студенттерді деңгей бойынша бағдарлама құруын үйрету

1.1Қысқаша теориялық мәліметтерФормалдық тіл мен грамматиканы анықтауға қажет алғашқы және ең жай

түсінік болып алфавит пен алфавиттегі сөздер табылады.

Page 6: 14 -15 зертханалық жұмыс · Web viewЕгер кіру және шығу алфавиті: и үлгісінде берілсе, және кіру мен шығу тілдері

Символдардың бұл қарастыруда бөлінбейтін соңғы жиыны сөздік немесе алфавит деп, ал жиынға жататын символдар - алфавит әріптері деп аталады.

Мысалы, әрбіреуі екі символдан тұратын алфавиті 5 әріпті құрайды, ал алфавиті 4 әріпті құрайды.

Алфавит әріптерінің реті бұл алфавиттегі сөз немесе шынжыр деп аталады. Сөздегі әріптер саны жиынының ұзындығы деп аталады. Бос шынжыр – бұл бірді-бір әріпі жоқ шынжыр. Оң жақтан немесе сол жақтан шынжырына кез келген бос шынжырдың қосылуы шынжырын өзгертпейді

алфавитінің символдарынан құрылған барлық мүмкін шынжыр жиындарын анықтау үшін белгісі қолданылады.

формалды грамматика деп келесі төрт объектінің жиынтығы аталады: мұнда - терминалдық алфавит (сөздік); бұл алфавиттің әріптерін

терминалдық символ дейді; олардан грамматиканы тудыратын шынжыр құрылады; терминалдық сөздік немесе терминалдық символ әріптерін белгілеуді әрі қарай латын алфавитінің әріптерімен белгілейтінімізді атап кетейік;

– терминалдық емес, көмекші алфавит (сөздік); бұл алфавиттің әріптері шынжыр құруда қолданыла алады; олар аралық шынжырға кіре алады, бірақ құру нәтижесіне кіргізілмейді; терминалдық емес символдарды белгілеу үшін латын алфавитінің жазба әріптерінен тұратын және бұрыштық жақшаларға алынған идентификаторларды қолданатынымызды атап кетейік; - грамматикасының бастапқы символы немесе аксиомасы- .

–шығару ережелерінің жиыны немесе түрінің ережелерін тудыру жиыны, бұнда және , алфавитінің әріптерінен құрылған шынжырлар6 олар грамматикасының толық алфавиті (сөздік) деп аталады.

Грамматика ережелерінің жиынына сондай-ақ түрінің оң жағы бос ережелер де кіреді. Ереженің оң жағы бос болғандықтан, қателік тудырмау үшін бос шынжыр символын түрінде белгілейміз. Грамматиканы шығару ережесі шынжыр құру үшін қолданылады.

- грамматикасының ережесі және – символдар шынжыры, оған қоса . Онда шынжыры (яғни -де шынжырын ауыстыру) ережесінің көмегімен шынжырдан алынуы мүмкін. Бұл жағдайда шынжырынан тікелей шығарылған және білдіреді.

Егер шынжырының жиынтығы берілгенде келесі шығадыонда мұндай реттік қатарды грамматикасында –

дан шығару деп атап, белгілейді. грамматикасының терминалдық алфавитінің соңғы шынжыр жиынын

алғашқы символынан шығарамыз, ол грамматикасынан түған тіл деп аталып, былайша белгіленеді.

Page 7: 14 -15 зертханалық жұмыс · Web viewЕгер кіру және шығу алфавиті: и үлгісінде берілсе, және кіру мен шығу тілдері

1мысал грамматикасы берілген, грамматикасы тудыратын тілді анықтау

қажет.  Грамматика схемасында бір 5 ғана ереже бар, сондықтан бір

сөзінен ғана тұратын тілді тудырады.  

2 мысалграмматикасы берілген, және осы граммата тудыратын тілді анықтау

қажет.

 Берілген грамматикадағы барлық түйіндерді құрайық. Оны екі әдіспен істеуге

болады. Алдымен 1, 2, 4 ережелерін қолданамыз, ал содан соң 1 және 3 ережелерін қолданып екінші түйінді құрамыз.

Нәтижесінде

аламыз.Яғни бұл грамматика тудыратын тіл екі шынжырынан тұрады.

3 мысал   грамматикасы берілген, және осы граммата тудыратын тілді анықтау қажет.

Келтірілген грамматика схемасының үш ережесі бар. Ереженің оң және сол жақ бөлігінде екінші ереженің терминалды емес символы бар.Сондай ережелерді рекурсивті деп атайды. Терминалды емес нүктесін белгілі бір тізбеде қолдану, жаңа үлгідегі нүктені алуға мүмкіндік береді. Сонымен ереженің оң жақ бөлігінің терминалды емес нүктесінің орнын бірнеше рет ауыстыруға болады,ол әр түрлі ұзын тізбектерді жасауға мүмкіндік береді. Рекурсивті ережені қолданудағы нәтиже шексіз болмау үшін, грамматика тізбесінде оң жағында символы бар бір ереже болу керек. Осындай ереже рекурсияны аяқтап, өткізілген тізбектен нүктесін алып тастайды. Қарастырылған грамматикада нәтижені аяқтау үшін ережесі қолданылады. грамматикалық ережелер көмегімен нәтижелерді құрастырып көрейік. Бірінші және үшінші ережелерді қолданғанда, мынаны аламыз:

.

Page 8: 14 -15 зертханалық жұмыс · Web viewЕгер кіру және шығу алфавиті: и үлгісінде берілсе, және кіру мен шығу тілдері

Бірінші, екінші және содан кейін үшінші ережені қолданғанда, шығатын нәтиже:

Екінші ережесін бір рет қолданғанда, нәтижесінде нөлдер және бірліктері бар тізбекшелер аламыз. грамматикасын тудыратын тілде мүмкіндігінше тізбекшелері бар болады, онда нөлдер саны бірліктер санына тең.  

1ТапсырмаЕкі толық ауыспалыны аламыз.Бағдарлама кесіндісін құрастырыңыз, оны

орындағанннан кейін ауыспалымның мағынасы орындарымен өзгеріске түсу үшін (жаңа мағына ескі мағынасына тең, керісінше ). Шешілім. Қосымша толық ауыспалымды енгіземіз

Қосымшаның ауыстырылымсыз болу мүмкіндігі, жазамыз

мақсатқа жеткізбейді ( ауыстырылымның бастапқы мағынасы айтарылымсыз жойылады)

Алдынғы есепті шеш, қосымша ауыстырылымдарды қолданбай (толық ауыстырылымдар мағынасы деп еркін толық сандарды атаймыз.)

2 ТапсырмаТолық саны берілді (толық қайшы емес) саны.

азайту. Бағдарлама құрастыру керек, оны орындағанда және ауыстырылымдар мағынасы ауыспайды, ал басқа да ауыстырылымдар мағынасы (мысалы ) тең болады. (Сонымен басқа да ауыстырылымдарды қолдануға болады).  Шешім.  толық ауыстырылымын енгіземіз, ол 0 ден –ға артады, қасиеті:

:=0; :=1;{b=aвдеңгейіk}while k <> n do begin|k:=k+1;|b:=b*a;end;

Алдағы есепті шеш, егер де орындалған операторлар қабылдауының қызметтік санын тәртібінде шешу керек, сондықтан ол аспау керек, кейбір константтары үшін; -бұл деңгейге 2-ні енгізу керек, алу үшін .

 3 Тапсырма

Page 9: 14 -15 зертханалық жұмыс · Web viewЕгер кіру және шығу алфавиті: и үлгісінде берілсе, және кіру мен шығу тілдері

саннын барлық орын ауыстырымдарын басыңыз ( ұзындылығының реттілігін, оған 1 санының әр қайсысы бір рет кіреді).

Шешім. Өзгертулерді массиве массивінде сақтаймыз және лексикографикалық тәртіпте тереміз. ( ауыстырылымы бірінші, ал соңғы болады). Келесі ауыстырылымға көшуде алгоритмі құрастыруда сұрақ туындайды: қай жағдайда алдағыларды өзгертпегенде ауыстырылымын арттыруға болады ма? Жауабы: егер де келесі мүшелерден аз болса ( нөмірлері бар мүшелер көп). Біз көбірек –ны анықтауымыз керек. Ол , . Одан кейін ең төменгі мүмкіндікпен арттыру керек. арасынан, ..., –ден көп ең төменгі санды табу керек. - пен ауыстырғанда, сандарды нөмірлермен орналастырамыз, ..., ауыстырылым ең төмен болу керек, яғни өсу тәртібінде.

Келесі ауысымға көшу алгоритмы.

{ <><n...2,1> }k:=n-1;{ x[k+1] >...> x[n]}төмендегі,k оң жақтағы реттілік while x[k] > x[k+1] do begin| k:=k-1;end;{x[k] < x[k+1] > ... > x[n]}t:=k+1;{t <=n, кесіндінің барлық мүшелері x[k+1] > ... > x[t] көп x[k]}while (t < n) and (x[t+1] > x[k]) do begin| t:=t+1;end;{x[k+1] > ... > x[t] > x[k] > x[t+1] > ... > x[n]}... x[k] и x[t] ауыстыру{x[k+1] > ... > x[n]}... x[k+1] ... x[n] кері тәртіпте орналастыру

Ескерту. Бағдарламада бізге таныс дефект бар: егер , онда анықталмаған.

Келесі ауыстырылымға модифицирланған алгоритмды көшіруде, ол өзі аталған ауыстырылым ақырғы емес екенін тексеріп отыру керек.

4 ТапсырмаБарлық -элементтері жиындар мен жиын асты болып саналсын . Шешім. нөлдер мен n ұзындық бірліктерінің әр жиынтығын

реттілікпен ұсынамыз (ұсынудың басқа да түрін кешірек қарастырамыз).Осындай реттіліктерді лексикографиялық түрде белгілейміз. (жоғарыда қар.)

есепті шешудің тиімді түрі – барлық ауыстырылымдарды бұрынғыдай іріктеу болып келеді, ал сосын олардың арасынан бірлігін таңдаймыз, ал қалғанын тиімді емес деп санаймыз ( бірліктерінің ауыстырылымдар саны басқа да ауыстырылымдар санынан төмен болуы мүмкін). Біз кезекті ауыстырылым алу үшін қызметіндегі

Page 10: 14 -15 зертханалық жұмыс · Web viewЕгер кіру және шығу алфавиті: и үлгісінде берілсе, және кіру мен шығу тілдері

тәртібін талап ететін алгоритм іздестіру керек. Қандай жағдайда - ауыстырылым мүшесін арттыру керек, алғашқыны ауыстырмағанда? Егерде ден ауысса, онда жалпы бірліктер санын сақтау үшін оң жағынан -ді -ге ауыстыру керек. Сол үшін бірліктер оң жағынан болу керек. Егер де біз келесі ретке көшсек, онда

нөл оң жақтан бірінші болу керек, одан кейін бірліктер тұру керек. бірінші тұрғаның біз көріп тұрмыз ( бірінші емес екенін).

Сонымен –дан көпті іздестіру қажет. –тен кейін бірнеше бірліктер тұруы мүмкін, ал одан кейін бірнеше нөлдер.

–ті 1-ге ауыстырғанда, одан кейін келе жатқан бірліктерді сақтау керек және де ол біздің тәртіп ретінен ең төмен реттілікте болу керек. Ең бірінші нөлдер ал сосын бірліктер тұру керек. Не шығатының көрейік:

бірінші реттілік 0...01...1 (n-k нөлдер, k бірліктер)соңғы реттілік 1...10...0 (k бірліктер, n-k нөлдер)х[1]...x[n] келесі реттілігінен алгоритмге көшу: s := n - 1;while not ((x[s]=0) and (x[s+1]=1)) do begin| s := s - 1;end;{s - мүше, 1-ден 0 –ге өзгертіуі мүмкін }num:=0;for k := s to n do begin| num := num + x[k];end;{num – бірліктер саны x[s]...x[n], нөлдер санытең (ұзындық – бірліктер саны), яғни (n-s+1) - num}x[s]:=1;for k := s+1 to n-num+1 do begin| x[k] := 0;end;{ num-1 бірлігін сонында орналыстыру керек}for k := n-num+2 to n do begin| x[k]:=1;end;

Жиынтықты көрсетудің басқа да түрі – олардың элементтерін есептеу. Әр жиынтық бір ғана мағынасы болу керек, элементтерді өсу тәртібінде есептейік. Мынадай есепке келеміз. Лексикографиялық тәртіпте санынан ұзындығының барлық өсу реттілігін атап шығу керек. (Мысалы: болғанда аламыз 12 13 14 15 23 24 25 34 35 45.)

5 ТапсырмаТолық оң сандар факториалын есептептеудің рекурсивті тәртібін жазыңыз

(яғни белгіленетін сандарын шығару). Шешім. Теңсіздікті қолданамыз .

Page 11: 14 -15 зертханалық жұмыс · Web viewЕгер кіру және шығу алфавиті: и үлгісінде берілсе, және кіру мен шығу тілдері

procedure factorial (n: integer; var fact: integer);| { n факториал санына тең fact қойыңыз}begin| if n=1 then begin| | fact:=1;| end else begin {n>1}| | factorial (n-1, fact);| | {fact = (n-1)!}| | fact:= fact*n;| end;end;

Процедура-функцияларды падаланып төмендегідей жазамыз:

function factorial (n: integer): integer;begin| if n=1 then begin| | factorial:=1; | end else begin {n>1}| | factorial:= factorial (n-1)*n;| end;end;

Функцияның ішкі сипатында factorial атынын екі жақтылықта пайдалануына ерекше көңіл бөліңіз ол айнымалы және шақырылатын рекурсивті функцияларды белгілейді.Біздің жағдайда олар атынан кейін жақшамен айрылып тұр, ал егер функция параметірсіз болса, қиын болатын еді. (Стандарттық, бірақ қиын табылатын қателер болып тұрады, егер бағдарлама авторы айнымалы мағынасын пайдаланатын болса, онда компиляторды бұл жерде рекурсивті шақырылым ретінде көреді).

6 ТапсырмаӘдетте факториалды екі нөлді анықтау үшін қолданылады, деп есептейді.

Бағдарламаны сәйкесінше ауыстырыңыз.

7 ТапсырмаБағдарламаның рекурсивті көтерілуін толық кері деңгейде жазыңыз.

8 ТапсырмаҚажет болған жағдайда рекурсия терендігі аспаған жағдайда, онда –

деңгей көрсеткіші.

9 Тапсырма

Page 12: 14 -15 зертханалық жұмыс · Web viewЕгер кіру және шығу алфавиті: и үлгісінде берілсе, және кіру мен шығу тілдері

"Ханой мұңаралары" ойыны келесі кезеннен тұрады. Үш өзек бар. Оларды біріншісіне сақинасынан тұратын пирамида киілген.(үлкен сақиналары астынан, кішілері үстінен). Сақиналарды басқа өзекке ауыстыру керек. Сақиналарды өзектен өзекке ауыстырып отыруға болады, бірақ кіші сақинаның үстіне үлкендерін қоюға болмайды. Әрекетті қажет ететін бағдарламаны құрастырыңыз.

Төменгі төбе түбір деп аталады.Әр төбеден екі сызық таралуы мүмкін: солға жоғары және оңға жоғары. Төбелер сызықтарынын баратын жерін төбелердің бастапқы сол және оң жақ ұлдары деп атайды. Төбенің екі ұлы болуы мүмкін, кей кезде бір ұлы болады (сол және оң жақ). Оның ұлдары болмауы да мүмкін, бұл жағдайда оны парақ деп атайды.

- екілік бұтақтын төбесі болсын. Ол өзі ұлдары, немерелері және шөберелерімен түбірінде бұтағы бар - " бұтақтар ұрпақтарын" құрайды.

Келесі есептерде бұтақ төбелері толық оң сандармен нөмірленген. Барлық төбелер нөмірлері әр түрлі болып келеді. Біздің ойымызша түбір

нөмірі root ауысымында сақталған. Екі жиым бар: of integer.

Төбенің сол және оң жақ ұлдарының нөмірімен и нөміріне сәйкес болып келеді. Егер төбе нөмірінің сол және оң жақ ұлдары болмаса, онда (сәйкесінше ) 0 тең. (Дәстүр бойынша бағдарламаларды жазғанда нөлдің орнына нөлге тең nil тұрақтылығы қолданылады).

Бұл жерде – жеткілікті түрде натурал сан болып келеді (төбелердің барлық сандары аспайды). Белгілейік, 1 ден дейінгі барлық сандар төбелер нөмірі болу міндетті емес және төбелер нөмірінің орналасуымен байланысты болмайды. (яғни l және r жиынтығындағы мәліметтер бөлігі- бұл қоқыс).

10 ТапсырмаN=7, root=3, l және r жиымдары мынадай: i | 1 2 3 4 5 6 7l[i] | 0 0 1 0 6 0 7r[i] | 0 0 5 3 2 0 7

Сәйкес бұтақты жазыңыз.

11 ТапсырмаБұтақтағы төбелер санының бағдарламалар есебін жазыңыз. Шешім. функциясын қарастырайық, x нөмір төбесіндегі түбірмен бұтақ

асты төбелер санына тең. (сәйкес бұтақтын бос), және де мазмұнына көңіл бөлмейміз төбелер нөмірлеріне жатпайтын s сандары жатады. s үшін рекурсивтік бағдарлама мынадай:

function n (x:integer):integer;begin| if x = nil then begin| | n:= 0;| end else begin

Page 13: 14 -15 зертханалық жұмыс · Web viewЕгер кіру және шығу алфавиті: и үлгісінде берілсе, және кіру мен шығу тілдері

| | n:= n(l[x]) + n(r[x]) + 1;| end;end;

Бұтақ асты төбелер саны x төбесінен оның ұлдары мен өзін қосқандағы төбелер санының сомасына тең. Рекурсия тереңдігі соңғы, себебі әр қадам сайын тиісті бұтақ асты биіктік төмендейді.

Бақылау сұрақтар

1 Сөздік және алфавит деп нені атаймыз?2 формальды грамматиканың анықтамасы нені білдіреді?3 Терминалды символ әріптері қандай?

5-6 зертханалық жұмыс. Жіктеу ағашы. Грамматикалардың эквиваленттілігі және бір мәнділігі.

Мақсаты: студенттерді сұрыптау алгоритмын шешу үшін әр -түрлі тәсілді таба білуге үйрету

4.1 Қысқаша теориялық мәліметтерЖалпы алғанда аудару немесе таратуды алфавит сөзіндегі және сөздері

арасындағы сәйкестік деп білеміз. Егер тізбекшелері, тізбекшелері, олар шығу және кіру тізбекшелері деп аталады. Егер кіру алфавиті мен шығу алфавиті, онда   тілінен аударғанда, жиынының тізбекшелерінен тұратын,

, тілінде тізбекшелерден тұрады жиыны, жиынының қос тізбекшелері деп аталады , олар и .                                      

     Егер кіру және шығу алфавиті: и

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

    Элементтер саны көп емес соңғы аударуларды аударылымдар түрінде беруге болады.Бірақта, үлкен соңғы және аяғы жоқ аударулар тапсыру үшін формальды тілдерге сияқты тапсырмалар керек. Бір жағдайды қарастырайық, жиынның кіру тізбекшелері  (аударудың кіру тілін) грамматикасы арқылы және шығу тізбекшелері арқылы беруге болады ( аударымның шығу тілі).

Осындай тапсырманың аударымы болып, оның "айна сипатын шығу тізбекшелері үшін анықтайды. Егер де шығу және кіру алфавиті екі символдан тұрса - , онда осындай аудару ережесінің мынадай түрі бар:

Page 14: 14 -15 зертханалық жұмыс · Web viewЕгер кіру және шығу алфавиті: и үлгісінде берілсе, және кіру мен шығу тілдері

Кіру тізбекшелері                     шығу тізбекшелері           <I> ╝0<I>,                                 <I> ╝<I>0

         <I> ╝1<I>,                                 <I> ╝<I>1         <I> ╝,                                       <I> ╝

 Сәйкес ережені қолданғанда, мынаны аламыз:

Осындай құрылымды құрғанда кіру және шығу тізбекшелерінің құрылым ережесі арасындағы сәйкестікке ерекше көңіл бөлу керек

Бұл тарауда бір есептін бірнеше нұсқаулары қарастырылады. қалалары болсын, ден сандар реттелген. Әр қалалар үшін нөмірлерімен, кестесінде қаласынан қаласына жетудің авиабилет бағасы толық сан сақталған. Әр қалалар арасындағы рейстер бар деп саналады.

барлық -дан айрылады. ден маршруттар үшін билеттер сомасы минималды болып саналады. (оның ішінде ауыстырып отырғызу), ден баратын (ол аспайды, және де кем болмау керек).

Төменде берілген тапсырмаларда алгоритмнің жұмыс уақытына және басқа да жиым шектеуіне кейбір қалалар үшін ең төмен жол төлем бағасын табу керек.

Мысалы Шамалап алғанда, бекітілген маршрут болмайды, олар үшін баға сомасы теріс

болып келеді. Бұл жағдайда ең төмен бағасы бар маршрут бар екенін дәлелдеу керек.

Шешімі. –нан көп маршрутта цикл болады, сондықтан миниумды ұзындығынан кем емес маршруттар арасынан іздеу керек.

Барлық басқа есепте, бұл жағдай орындалған деп есептеледі (теріс сомамен циклдар жоқ).

Тапсырма 1 уақытында қаладан екінші қалаға барудың жол төлемінің ең төмен

бағасын табыңыз ( деңгейде).

Тапсырма 2 Бағдарлама дұрыс екенін дәлелде, егерде жиымының

болғызбаса, ал тек қана сол жиымда өзгерістерін шығарса (бағдарламадағы у әріптерін х әріпіне өзгертіп, ал сосын қалған керек емес жолдарды жою керек).

Тапсырма 3 Ең төмен жол төлемін табыңыз барлығы үшін уақыт ішінде ( –ді

деңгейде).

Тапсырма 4

Page 15: 14 -15 зертханалық жұмыс · Web viewЕгер кіру және шығу алфавиті: и үлгісінде берілсе, және кіру мен шығу тілдері

Барлық бағалар теріс емес екені бізге мәлім. Ең төмен жол төлемін табыңыз барлық үшін уақыт ішінде ( -ді деңгейде).

Тапсырма 5 Бұл матрицаны шығару үшін матрица жай формула бойынша есептеледі, тек

қана сома орнына минимум, ал қосу орнына сома.

Тапсырма 6Сонымен матрицалардың белгілі түрде шығуы ассоциативті түрде болады.

Тапсырма 7Эквивалент жолының қысқалығы туралы есепте "ақырсыз деңгей" матрица

бағасы , тізбектілігінде барлық элементтер, кейбіреуінен бастағанда,қысқа жол бағасының ізделетін матрицаға тең. (егер теріс циклдар болмаса).

Тапсырма 8 Қай элементтен бастап теңсіздік кепілдігін беруге болады, Алдынғы есепте? Әдетте (модифицирланған емес) матрицаларды көбейту пайдалы бола алады,

бірақта матрицалар басқа болу керек. Барлық рейстер болмасын (бұрынғыша), ал кейбіреуі, тең ,егер рейс болса және , егер рейс болмаса. матрицасын жасайық (жай күйде) деңгейіне және оның - шы элементіне қарайық.

Тапсырма 9Дейкстр алгоритмы рейстері мен қалаларын модифицирлеу үшін

операциялары керек екенін дәлелдеу керек. Нұсқаулық. Әр қадамда не істеу керек? Минималды бағадағы белгіленбеген

қаланы анықтау керек және барлық қалалар үшін маршруттары бар бағаларды түзету керек. Егер де бізге қай қалаға баға минималды екенің айтып отырса, онда

қызметі жеткілікті болатын еді.

Тапсырма 10Сұрыптау алгоритмін ұсынайық. Іс-әрекет саны тәртібінде болсын,

аспау керек. Кейбір үшін және барлық үшін. Біз бір шешімін көрсетеміз. Шешім. (қосылу арқылы сұрыптау).

саны- толық оң сан. Разобьем массив массивін алайық, ұзындығының кесіндісіне. ( бірінші, ал сосын және т.б.) Соңғы кесінді толық болмайды, егер де – -ға бөлінбесе. массивін –реттелген деп атайы, егер де әр кесінді жеке алғанда реттелген болса. Әр массив 1- реттелген. Егер де массиві- реттелген болса және , онда ол реттелген.

Page 16: 14 -15 зертханалық жұмыс · Web viewЕгер кіру және шығу алфавиті: и үлгісінде берілсе, және кіру мен шығу тілдері

Біз - реттелген масссивті - реттелген массивке қалай түрлендіруге болатының көрсетейік (сол элементтерден сияқты). Бұл түрлендіру нәтижесінде алгоритм былай жазылады:

k:=1;{x массиві k- реттелген болып келеді}while k < n do begin| .. k- реттелген массивті 2k-реттелген массивке түрлендіру керек;| k := 2 * k;end;

Талап ететін түрлендіру, біз бірнеше рет екі реттелген кесінді ұзындығын көп рет бір реттелген кесіндіге "тұтастырамыз".

Біріктіру процедурасы при кесінділерді біріктірейік и реттелген кесіндіге ( массивтін басқа

бөліктеріне тиіспей).Ендеше - реттелген массивті -реттелген массивке түрлендіру

төмендегідей жүзеге асады:t:=0;

{t қысқаша 2k немесе t = n, x[1]..x[t] болып келеді2k-реттелген; x массивтін қалдығы өзгермейді}while t + k < n do begin| p := t;| q := t+k;| ...r := min (t+2*k, n); {min(a,b) - a немесе b минимумы}| бірігу (p,q,r);| t := r;end;

Бірігу – бірігу нәтижесін жазу үшін көмекші массивті қажет етеді, оларды деп белгілейік. немесе арқылы соңғы элементтер жерінің

нөмірлерін (бірігуге қауіпі бар), – соңғы массивке жазылған элементі. Бірігуде әр қадам сайын екі әрекеттін орнына біреу ғана жасалады істін:

b[s0+1]:=x[p0+1];p0:=p0+1;s0:=s0+1; немесеb[s0+1]:=x[q0+1];q0:=q0+1;s0:=s0+1;

(C тілін жақсы көретіндер қысқартуын бағалайды немесе .)

Page 17: 14 -15 зертханалық жұмыс · Web viewЕгер кіру және шығу алфавиті: и үлгісінде берілсе, және кіру мен шығу тілдері

Бірінші әрекет (элементті бірінші кесіндіден алу) бір уақытта екі әрекетті орындағанда шығуы мүмкін:

1 бірінші кесінді аяқталған жоқ ( ); 2 екінші кесінді аяқталды () немесе аяқталған жоқ, бірақта оның ішінде

элемент аз болады (екінші кесіндіге қарағанда) и

Екінші әрекет үшін ұқсас. Сонымен мынаны аламыз

p0 := p; q0 := q; s0 := p;while (p0 <> q) or (q0 <> r) do begin| if (p0 < q) and ((q0 = r) or ((q0 < r) and| | (x[p0+1] <= x[q0+1]))) then begin| | b [s0+1] := x [p0+1];| | p0 := p0+1;| | s0 := s0+1;| end else begin| | {(q0 <<q) and| | (x[p0+1] > r) and ((p0 = q) or ((p0= x[q0+1])))}| | b [s0+1] := x [q0+1];| | q0 := q0 + 1;| | s0 := s0 + 1;| end;end;

(Егерде екі кесінді аяқталмаған болса онда таңдалмаған бірінші элементтері тең болып келеді, бұл жағдайда екі әрекетті де қабылдаймыз; бағдарламада біріншісі таңдалған.)

Бірігу нәтижесін қайтадан – ке жазу керек. (алдын ала ескерту). Егерде кері көбейту бірігу процедурасынан тыс жасалса, онда соңғы кесіндіні жазуға ұмытпаңыз.)

Бағдарлама біріншілік кемшілігі бар: бульдік өрнекті есептеу элементтін жоқ массивтеріне ұсыңылады.

Екінші шешімді өздігінен тап.

Бақылау сұрақтары

1 Алгоритм дегеніміз не?2 Сұрыптау алгоритмі дегеніміз не?

7 зертханалық жұмыс. Контекстік-еркін грамматикалық және магазиндік автоматтар. Бұтақты айналу. Қайтарылымдармен толығу

Мақсаты: Студенттерді бағдарламаны кезеңмен құруға үйрету

Page 18: 14 -15 зертханалық жұмыс · Web viewЕгер кіру және шығу алфавиті: и үлгісінде берілсе, және кіру мен шығу тілдері

2.1 Қысқаша теориялық мәліметтерФормалдық грамматика теориясында 4 тіл түрі сәйкес келетін грамматиканың

4 түрі ерекшеленеді. Бұл грамматикалар грамматика ережелеріне шектеу қою жолымен анықталады.

Жалпы түр грамматикасы деп айтылатын 0 түріндегі грамматикалар тудыру ережелеріне ешқандай шектеу қоймайды. Кез келген ережесі

еркін шынжырындық көмегімен құрылуы мүмкін.Мәнмәтінді – бағыныңқылы грамматика деп аталатын 1 түріндегі

грамматикалар кез келген ережені қолдануға жол бермейді. Бұндай грамматикаларда шығару ережесі келесі түрде болуы керек:

бұнда - жиынынан мүмкін бос шынжырлар, символ және шынжыр. және шынжырлары ережені қолданғанда

өзгермейді, сондықтан оларды мәнмәтін (яғни сәйкесінше оң жақ және сол жақ), ал грамматиканы – мәнмәтінді бағыныңқылы деп атайды.

1 түріндегі грамматика 0 түріндегі грамматикаға қарағанда көбірек қолданылады, себебі ереженің оң жағында кейбір синтаксистік түсініктермен байланысты болатын терминалды емес бір ғана символ өзгертіледі, ал 0 түріндегі грамматикада бірден бірнеше символ, соның ішінде терминалды да өзгертуге болады.

Мысалы,

грамматикасы мәтіндік-бағыныңқылы болып табылады, себебі екінші және алтыншы ережелер бос емес оң жақты мәнмәтінді, ал үшінші және бесінші ереже екі мәнмәтінді де ұстайды. Бұндай грамматикада шығару төмендегідей болуы мүмкін:

2 түріндегі грамматиканы мәнмәтінді – бос және мәнмәтінсіз грамматика ( -грамматика немесе грамматика) деп атайды. бұндай грамматикаларды шығару ережесі келесідей болады:

Page 19: 14 -15 зертханалық жұмыс · Web viewЕгер кіру және шығу алфавиті: и үлгісінде берілсе, және кіру мен шығу тілдері

және

Яғни бұл ережелер шарты бойынша 1 түріндегі грамматика ережесінен пайда болады. Мәнмәтіндік шарттар болмағандықтан, 1 түріндегі грамматика ережесіне қарағанда МБ – грамматика ережесі жеңілдірек алынады. Яғни, нақты осындай грамматикалар бағдарлама тілдерін мазмұндау үшін қолданылады. – грамматикаға мысал ретінде төмендегі грамматиканы келтіруге болады:

Бұл грамматика шынжыры немесе шынжырының айналы көрінісінің әрбіреуі екі бөлігінен тұратын шынжырдан тұратын тілді тудырады.

бұнда - бұл бос шынжырсыз жиыны. Бұл грамматика көмегімен мысалға келесі шынжыр құруға болады:

3 түріндегі грамматика автоматты грамматика ( -грамматика) деп аталады. Бұндай грамматикаларда шығару ережелері келесі түрде болады:

немесе немесе

бұнда және және грамматика тек қана - оң жақ ереже немесе – сол жақты ереже түріндегі ережесі болуы мүмкін.

Бұл грамматикалар бір тілді тудырады.  Тіл классификациясы тілді тудыратын грамматика түрлеріне сәйкес құрылуы мүмкін. Бір тіл екі түрлі грамматика болатын түрлі грамматикалармен берілуі мүмкін. Сондықтан тіл түрін түріндегі грамматика беруі мүмкін грамматика түрімен анықталады.

Тапсырма 1Ферзи, бір - бірін соқпайды: бұтақ орнын тексеру. Бірінші бөлімде біз бір үлгідегі бірнеше есептер қарастырғанбыз: "Кей

жиымның барлық элементтерін атап шығыныз". Шешім сызбасы мынадай: жиымында белгілі тәртіп енгізілді және бастапқы элементтін келесі жиымынан кейінгі тұрған элементі( сол тәртіпте) көрсетіледі. Осындай сызбаны әрқашан тікелей іске асыруға мүмкін емес. Бұл тарауда біз кей жиымның барлық элементтерін анықтауға мүмкіндік аламыз. Оның аты "қайтарылымдарды іздестіру",

Page 20: 14 -15 зертханалық жұмыс · Web viewЕгер кіру және шығу алфавиті: и үлгісінде берілсе, және кіру мен шығу тілдері

"тармақтар мен шекаралар әдісі ", "backtracking". Біздің ойымызша бұл әдістің нақты анықтамасы – бұтақты айналып шығу.

Тапсырма 2 ферзидерді шахматтық тақтасында ді - ға қойғандағы барлық әдістерін

анықтаныз (олар бір –бірін соқпаған жағдайда) Шешімі. Әр горизонтальнда бір ферзидан тұру керек. –ны позиция дейміз

- ( , үшін ) ферзилердің төменгі горизонтында (ферзилар бір-бірін соғуы мүмкін). Салайық "бұтақ орыны": оның түбірі 0-орыны болады, әр -орынан жоғары қарай көтерілейік - орынына. Бұл орындары ферзилардың -ші горизонталында орналасумен ерекшелінеді.

Олардың суретте орналасуы бұл ферзидің қосымшаға сәйкес екенің көрсетеді: ферзи сол жақта орналасса сол жақ орыны деп аталады.

Бұл бұтақтың орындары арасынан біз -орынына көңіл бөлуіміз керек және ферзилар бір-бірін соқпау керек. Бағдарлама оларды "бұтақты айнала жүреді" және оларды іздестіреді. Артық жұмыс істемеу үшін, мына нәрсені ескерейік: егер де -орынының ферзилері бір-бірін соқса, онда қалған ферзилерді қоюдың мағынасы жоқ.

Сондықтан, осы жағдайды көргенде біз бұл бағыттағы бұтақтың құрылымын тоқтатамыз.

Нақтырақ, -орының жетімді дейміз, егер жоғары ферзиді жойса, қалғандары бір-бірін соғады. Біздің бағдарлама рұқсат етілген орындарды ғана қарастырады.

Есепті екі бөлікке бөлейік: (1) бұтақты ерікті айналамыз және (2) бұтақтарды рұқсат етілген орыннан іске асыру.

Ерікті ағашты айналудың есебін құрастырайық. Бізде робот бар деп есептейік, ол әр ауқыт сайын бұтақтын төбесінде орналасуы мүмкін.

Ол берілген тапсырмаларды орындай біледі:

жоғары солға (жоғары бағдаршадан шығатын сол жақ бойынша)оңға (көрші оң жақтағы төбеге көшу)төмен (бір деңгейге төмен түсу)жоғары солға оңға төмен

Әр команданы сәйкесінше орындау үшін "жоғары бар", "сол жақта бар", "төмен бар" (соңғы тексеру барлық жерде тиімді, түбірден басқасы). Көңіл бөліңіз, "оңға" командасы тек қана "туған ағасына" ғана көшуге мүмкіндік береді.

Роботта "өңдеу" деген командасы бар оның міндеті – барлық парақтарды (биіктік, оларды ішінде жоғары бағдаршасы жоқ, "жоғары бар ").

Біздің шахматтық есебін шығару үшін команда ферзи орынындағы басылым мен тексерісі сәйкесінше өңделеді.

Бағдарламаны ары қарай дұрыс қолданудың мынадай анықтамасы беріледі. Роботтың бір бұтақтын төбесінде жағдайын бекітсін.Сол жағдайда бұтақтын барлық

Page 21: 14 -15 зертханалық жұмыс · Web viewЕгер кіру және шығу алфавиті: и үлгісінде берілсе, және кіру мен шығу тілдері

парақтары үш категорияға бөлінеді: Робот үстінде, Роботтан солға қарай және роботтан оңға қарай. (Түбірден параққа Роботпен төбе арқылы өтеді, солға қарай бұрылу, оған жетпей оңға қарай бұрылу.) (ОЛ) арқылы жағдайды белгілеймі"Роботтан солға қарай барлық парақтар өңделген ", а (ОЛН) арқылы - жағдайы "барлық парақтар солға қарай және Робот үстінде өңделген". Бізге мынадай процедура қажет:

procedure тірелгенге дейін жоғары және өңдеу| {берілген: (ОЛ), керек: (ОЛН)}begin| {инвариант: ОЛ}| while жоғарыда бар do begin| | жоғары солға;| end| {ОЛ, Робот парақта}| өңдеу;| {ОЛН}end;

Негізгі алгоритм: берілген: Робот түбірде,парақтары өңделмеген керек: Робот түбірде, парақтары өңделген

{ОЛ}тірелгенге дейін жоғары және өңдеу;{инвариант: ОЛН}while төмен бар do begin| if оң жақта бар then begin {ОЛН, оң жақта бар }| | оңға;| | {ОЛ}| тірелгенге дейін жоғары және өңдеу;| end else begin| | {ОЛН, оң жақта емес төмен жақта}| | төмен;| end;end;{ОЛН, Робот түбірде=> барлық парақтар өңделген}

Роботтың келесі қасиеттерін пайдалану ғана қалды. (жоғары қарай шарттары көрсетілген, онда төмен-оны орындау нәтижесі туралы анықтама командасы орындалады): (1) {ОЛ, жоғары емес} (2) {ОЛ}жоғары солға өңдеу{ОЛН} {ОЛ}(3) {оң жақта бар, ОЛН} (4) {оң жақта емес ОЛН}

Page 22: 14 -15 зертханалық жұмыс · Web viewЕгер кіру және шығу алфавиті: и үлгісінде берілсе, және кіру мен шығу тілдері

оңға қарай төмен{ОЛ} {ОЛН}

Тапсырма 3 Көрсетілген бағдарлама жұмысты аяқтайтының дәлелдеу керек (соңғы

бұтақтын қайсысында болсын).

Тапсырма 4Бұтақты айналудағы есепті шығар, егер де біз барлық төбелер өңделетінің

қаласақ (парақтар ғана емес). Шешімі. – кейбір төбелер. Сол жағдайда y төбесі төрт категорияның біріне

жатады. Түбірден у баратын жолды қарастырайық. Болуы мүмкін:

1 (а) –тен түбірге баратын жол ( тен төмен); 2 (б) -ке баратын жолдан солға бұрылу ( -те солға қарай); 3 (в) арқылы өту( над -тен -ға); 4 (г) жолдан оңға -ке бұрылу ( -тен –ға қарай); төбенін өзі категориясына жатады (в).

Шарттар енді осындай болады: (ОНЛ) барлық төбелер төмен және солға орналасқан; (ОНЛН) барлық төбелер төмен, солға және үстінде орналасқан.

Бағдарлама осындай болады:

procedure тірелгенге дейін және жоғары;| {берілген: (ОНЛ), керек: (ОНЛН)}begin| {инвариант: ОНЛ}| while жоғарыда бар do begin| |өңдеу;| | жоғары солға;| end| {ОНЛ, Робот парақта}| өңдеу; {ОНЛН}end;

Негізгі алгоритм: берілді: Робот түбірде , ештене өңделген жоқ керек: Робот түбірде, барлық төбелер өңделген{ОНЛ}тірелгенге дейін жоғары және өңдеу;{инвариант: ОНЛН}while төменде барdo begin

Page 23: 14 -15 зертханалық жұмыс · Web viewЕгер кіру және шығу алфавиті: и үлгісінде берілсе, және кіру мен шығу тілдері

| if оң жақта барthen begin {ОНЛН, оң жақта бар}| |оңға;| | {ОНЛ}| | тірелгенге дейін жоғары және өңдеу;;| end else begin| | {ОЛН,оң жақта емес, төменнен}| | төмен;| end;end;{ОНЛН, Робот түбірде => барлық төбелер өңделген }

Тапсырма 5 Көрсетілген бағдарлама, төбені тек қана оның ұрпақтары өңделгеннен кейін ғана өңдейді.Бағдарламаны қалай өзгерту керек,әр төбе, парақ болмайтын жағдайда екі рет өңделу үшін: өз ұрпақтарынан кейін ал сосын оған дейін. (Парақтар бұрынғыша бір рет өңделеді.)

Тапсырма 6 Бұл бағдарламадағы операциялар саны бұтақ төбесінің санына тең. (Басқа бағдарламаларда сияқты, олар командаларды жіберу мен және кей командаларды "өңдеу"шектелмейді.)

Нұсқаулық. Бұл бағдарламаны орындағанда әр ретте екінші әрекет –төбелерді өңдеу,ал әр төбе кем дегенде екі рет өңделеді.

Тапсырма 7 Бұтақты айналу әдісі келесі тапсырмаларды қолдану үшін пайдалынады:

жиым берілген . –нан толық оң сандардан тұрады және санынан; білуіміз керек, саны жиым санының сомасы ретінде көрсетілуі керек пе? (Әр санды тек қана бір рет пайдалануға болады.)

Шешімі. бульдік мағыналардан -орынына тізбелікке жол береміз, бұл мағыналар сома санына кіре ме немесе жоқ па? Бұл ұстаным дұрыс егерде сома -тен аспаса.

Ескерту. Барлық жиынтықты толық алып салыстырғанда ( деңгейінде ) кей жерде біз ұтамыз. жиымын азаю тәртібінде алдын ала сараптауға болады., және де пен барлық мүшелердің айырым сомасы алып тасталған мүшелер сомасынан көп

болып келеді. Соңғы қабылдауды "тармақ және шекара әдісі"деп атайды. Бірақта толық қамтумен салыстырғанда жақсы нәтиже жоқ. Бұл есептін дәстүрлі аты- " рюкзаке туралы есеп" (жалпы жүк көтеруші рюкзагін түйінге байлау керек, салмақты нақты білгенде ). Және 7 тарауда қараңыз ( динамикалық бағдарлама туралы бөлім ) оның шешілім алгоритмы, полиномиалды бойынша.

Тапсырма 8

Page 24: 14 -15 зертханалық жұмыс · Web viewЕгер кіру және шығу алфавиті: и үлгісінде берілсе, және кіру мен шығу тілдері

нөлінен, бірліктен және екіліктен шығатын тізбектілікті анықтаныз, және де оның ішінде цифрлар тобы екі рет қайталанбау керек ( XX бөлігінің түрі жоқ).

Бақылау сұрақтары

1 Қандай символ өңдірмейтін деп аталады?2 Қандай символ қол жетпейтін деп аталады?3 –ді –ға шахматтық тақтада n ферзиді қою тәртібін анықтаныз және олар

бір-бірін соқпау керек.

8 зертханалық жұмыс. Төмен түсетін және өрлеме айырылымдары. Сұрыптау. Квадраттық алгоритмдер

Мақсаты: Студентерді бағдарламаны кезеңмен құруға үйрету

3.1 Қысқаша теориялық мәліметтерТерминалданбаған дүкендік танушылар жұмысының модельденуі реттіліктің

бастауыш жай-күйден соңғы жай-күйге ауысуын іздеумен байланысты. Іздеу жеке-жеке қадамдардан тұрады.

Және олардың әрбіреуі сәтсіздікке және бастапқы жай-күйге әкелуі мүмкін. Бұндай іздеу уақытты көпалатындықтан тәжірибеде қайтымсыз жұмыс істейтін детерминалданған танушыларды қолданады. Бұл танушылар -тілдердің шектеулі кластарын ғана қолданысқа жібереді, бірақ олар бағдарламалау тілдерінің барлық синтаксистік жақтарын көрсетеді.

Танушыларды азаймалы және өрмелі деп екі категорияға бөлуге болады.Азаймалы танушылар ережелерді жоғарыдан төмен өңдейді, яғни жоғары

ережелерді төменгілерден бұрын. Ал бұл уақытта кіріс анализаторлары төмендегі ережелерді жоғарыдағылардан бұрын қолданады. Детерминалданған автоматтардың мүмкіндіктері мен олардың тұрғызылу тәсілдерін көрсету үшін бұл бөлімде түріндегі грамматикалар тудыратын азаймалы танушылар қарастырылады.     атауы Left сөзінен шыққан, себебі анализатор кіріс шынжырын солдан – оңға қарай көреді. Тәжірибеде көбінесе грамматика класы қолданылады. Олар үшін ағымды позицияда орналасқан детерминалданған бір кіріс символды танушылар жұмыс істейді. Оқудың бірінші қадамы ретінде азаймалы танушылардың грамматика кластары ішіндегі бір реттілікті қараймыз.

Бөлінген ауыспалылар.Құрамында жою ережелері жоқ мәнмәтінді-бос грамматика төмендегі келесі

екі шартты орындаса ғана бөлінген немесе жай деп аталады:  1 Әр ереженің оң жағы терминалмен басталса.2 Егер екі ереженің сол жағы бірдей болса, онда бұл ережелердің оң жағы

түрлі терминалдық символдармен басталуы керек.

Page 25: 14 -15 зертханалық жұмыс · Web viewЕгер кіру және шығу алфавиті: и үлгісінде берілсе, және кіру мен шығу тілдері

Бөлінген грамматиканың негізгі қасиеттерінің бірі – олардың әрқасысына өрлемейтін детерминалданған танушы құруға болады.

Мысалы, келесі грамматика,  сызбамен берілген:    

бөлек грамматика болып келеді, (1) и (2) жағдайы орындалуда. Басқа жақтан алғанда, грамматика

бөлек грамматика болмайды , себебі (2) ережеде шарт бұзылады (1), ал ережесінде (3) және (4) - шарт (2).

Бөлек грамматиканың негізгі қасиеті болып, олардың әрқайсысынан детерминалды төмен түсетін айырылымдарын құруға болады. 

Мысалы Ханой мұнараларындағы есепте сақиналардың қозғалу бірізділігін табу үшін

рекурсивті емес бағдарламаны жазвңвз. Шешімі. Рекурсивті бағдарламаны еске түсірейік, -ді ауыстырып қоятын

жоғарғы сақиналары с нен :

procedure move(i,m,n: integer);| var s: integer;begin| if i = 1 then begin| | writeln ('қадам жасау ', m, '->', n);| end else begin| | s:=6-m-n; {s – үшінші өзек: нөмірлер сомасы 6 тең}| | move (i-1, m, s);| | writeln ('қадам жасау ', m, '->', n);| | move (i-1, s, n);| end;end;

Біз көретіндей, " -ші өзекке m-нің жоғарғы дискін –ге ауыстыру" есебі сол үлгідегі үш есепке әкеледі: екі есепке -1 дисктермен бір есепке жалғыз дискпен.Бұл есептермен айналысқанда, тағы не істеу керек екенін ұпытпау керек.

Бұл үшін қалтарылған стек есептерін жасайық.Олардың элементтері үштіліктер болып келеді.Әр үштілік тапсырыс ретінде интерпретациаланады "жоғарғы дисктерін -ші өзектен -ге ауыстырылсын" . Тапсырыстар олардың орындалу талаптарына сәйкес жасалған: ең жедел – стек биіктігі.Мынадай бағдарлама аламыз:

procedure move(i,m,n: integer);

Page 26: 14 -15 зертханалық жұмыс · Web viewЕгер кіру және шығу алфавиті: и үлгісінде берілсе, және кіру мен шығу тілдері

begin| стек тапсырыстарын бос істеу| стекқа үштілікті қою | {инвариант: стектағы тапсырыстарды орындау қалды}| while стек непуст do begin| | жоғарғы элементті жою,оны | | if j = 1 then begin ауыстыру| | | writeln ('қадам жасау', p, '-><j-1,s,q>', q);| | end else begin| | | s:=6-p-q;| | | {s – үшінші өзек: номерлер сомасы 6 тең}| | | стекқа үштерді қою , <1,p,q><j-1,p,s>, | | end;| end;end;

(ең бірінші стекке үш қойылады, оны соңғы кезде орындау керек). Стек үштіліктері жеке стектері ретінде іске асады. (Сонымен қоса, паскальдің

арнайы түрі бар, оны "жазылу" деп атайды). Тапсырма 1 (А.К.Звонкин Анджея Лисовскиге хабарлады). Ханой мұнаралары туралы

есептерде рекурсивті емес алгоритмдер бар. Олардың бірі: қондыру өзектері ( ауыстырулардан емес) барлық өзектер кезек

бойынша болу керек . Келесі ереже: кезекпен ең аз сақиналарды және ең аз емес сақиналарды ауыстыру,сонымен ең азын шеңбер бойнша.

Тапсырма 2 Рекурсия орнына стекті қолдану. Толық санның ондық басылымның

рекурсивті бағдарламасында тапсырмалар кейінге қалдырылған.

Тапсырма 3Екілік бұтақ төбелерінің барлығын жазатын рекурсивті емес бағдарламаны

жазыңыз.

Тапсырма 4Не өзгереді, егерде бұтақтын екілік төбелерін жазбасақ, бірақта оның саның

есептесек? Тапсырма 5 6 мүмкіндігі бар тәртіптер үшін кей жеңілдіктер болуы мүмкін, екі түрдегі

стек элементтерінде керек емес сақталымдарды жасайды. Кейбіреулерін көрсетейік. Ескерту. Бұтақтын барлық төбелерін жазудағы басқа бағдарламасын бұтақты

айналу бағдарламасы негізінде құруға болады (тиісті тарауда қарастырылған) Онда "төмен" командасы орындалады. Енді барлық төбелер тізімін түбірден

Page 27: 14 -15 зертханалық жұмыс · Web viewЕгер кіру және шығу алфавиті: и үлгісінде берілсе, және кіру мен шығу тілдері

ағымдағы төбеге бару жолын сақтау керек Сонымен қоса графтағы алгоритмдар туралы тараудан қараңыз.

Тапсырма 61 – толық сандар болсын. жиымын құрастыру керек, ..., , ол

үшін сондай сандар болу керек. Ескерту. сандар арасында тең болуы мүмкін. Әр толық сан

қанша рет кірсе, да кіру керек. Шешімі. Санауға онай, мен сандары жиымының

бастапқы және соңғы мағынасын білдіреді. Талаптар " және бір сандарды талап етеді" көре тұра орындалады, егерде элементтерінің орынын ауыстыру процесімен шектелсек.

k := 0;{ x жиымының k аз элементтері өз орындарында орналасқан}while k <> n do begin| s := k + 1; t := k + 1;| {x[s] - арасында ең азы... x[k+1] x[t] }| while t<>n do begin| | t := t + 1;| | if x[t] < x[s] then begin| | | s := t;| | end;| end;| {x[s] – ең аз x[k+1]..x[n] }| ... ауыстыру x[s] и x[k+1];| k := k + 1;end;

2 Инвариантты қолданатын, сұрыптау есебіне басқа шешім беру керек. {первые элементтін біріншісі реттелген: }

Бақылау сұрақтары

1 Рекурсивті емес бағдарламаны қалай құру керек?2 Не өзгереді, егер де екілік бұтақтын төбесін баспаса, ал тек қана оның саның санаса? 9-10 зертханалық жұмыс. Шекті айқындауыштардың эквиваленттілігі

және бірмәнділігі. Контексті-тәуелсіз грамматикаларды келтіру.

Мақсаты: Студентерді бағдарламаны кезеңмен құруға үйрету

6.1 Қысқаша теориялық мәліметтер

Page 28: 14 -15 зертханалық жұмыс · Web viewЕгер кіру және шығу алфавиті: и үлгісінде берілсе, және кіру мен шығу тілдері

Бойер-Мура алгоритмы. Бұл алгоритм жасауға мүмкін емес нәрселерді істейді: ұқсас жағдайда ол

сөздердің бір бөлік әріптерін ғана оқиды. Бұл қалай болуы мүмкін? Өте жеңіл. Мысалы біз " " үлгісін іздестірейік.

Сөздің төртінші әріпіне қарайық: егерде ол " әріпі болса", бірінші үш әріпті оқу қажеттілігі жоқ. (Негізінде " " әрпі үлгісінде жоқ, сондықтан ол бесінші әріптен кейін ғана басталады).

Біз осы алгоритмнің ең оңай вариантын көрсетейік, бірақта ол барлық жағдайда жұмыстың шапшандығына кепілдік бере алмайды болсын - үлгі, оны іздеу керек. символдың әрқайсысы үшін, оның сөзінде дұрыс көтерілуін табайық яғни , тең болған жағдайда. Бұл мәліметтер массивінде сақталады, егерде символы кездеспесе, онда бізге қоюға ыңғайлы болады (неге екенің төменде көреміз).

Мысалы массивін қалай толтыру керек?

Шешімібарлық pos[s]қойыңыз б тең 0 болғандай for i:=1 to n do beginpos[x[i]]:=i;end;

Іздеу үдерісінде біз ауысымын сөздегі әріпті сақтаймыз, үлгінің соңғы әрпі тұрғанға қарсы. басында (үлгі ұзындығы), ал сосын біртіндеп өседі. last:=n;{Қалған барлық үлгі жағдайлары тексерілген}while last <= m do begin {сөз аяқталған жоқ}| if x[m] <> y[last] then begin {соңғы әріптері әр түрлі}| | last := last + (n - pos[y[last]]);| | {n - pos[y[last]] – бұл үлгінің минималды түрде жылжығаны,| | керісінше y[last] сол қалыпында қалады| | үлгідегі әріп. Егер сондай әріп болмаса,| | онда үлгінің барлық ұзындығын жылжытамыз}| end else begin| | егерде кейінгі жағдайы келіп тұрса,| | x[1]..x[n] = y[last-n+1]..y[last],| | онда сәйкестікті хабарланыз;| | last := last+1;| end;end;

Білгіштер сәйкестікті оңнан солға қарай өткізуді ұсынып отыр. Яғни үлгінің соңғы әрпінен бастау керек (онда сәйкестіктер болу керек).

Бұл алгоритмнің әр түрлі модификациясы болуы мүмкін.

Page 29: 14 -15 зертханалық жұмыс · Web viewЕгер кіру және шығу алфавиті: и үлгісінде берілсе, және кіру мен шығу тілдері

Мысалы, жолын жолына ауыстыруға болады, онда – координаттары екінші оң жағындағы шығу әріптері.

Осыны бағдарламада қалай ескеруге болады? Шешімі. кестесін құрғандаfor i:=1 to n-1 do... жазыңыз (ары қарай бұрыңғыша), ал негізгі бағдарламада

орнына жазыңыз;Келтірілген Бойер - Мура алгоритмнің жеңіл түрі кей жағдайда n әрекетін

көбірек талап етеді. ( сандар әрекетінің тәртібі), Кнута - Моррис – Пратта алгоритмінен кішкене ғана жеңіліп қалдық.

Тапсырма 1Жағдай мысалын келтіріңіз, оның ішіндегі үлгі сөзге кірмейді, бірақта оны

белгілеу үшін, алгоритм әрекетіндегі тәртіпті талап етеді. Нақты (жеңілдетілмеген) Бойера - Мура алгоритмі кепілденеді, әрекеттер

саны аспайды. Ол Кнут-Моррис-Пратта алгоритмінің идеяларына жақын, идеялар пайдаланады. Оңнан солға жүргенде біз кірген сөзбен үлгіні салыстырайық. Кейбір бөлігі (үлгінің соңы болып келген) тең келді, ал сосын айырмашылығын таптық: үлгіде алдында кіру сөзіндегідей емес болып келеді.Бұл кезде кіру сөзі туралы не айтуға болады? Оның ішінде тең үзінді табылды, ал оның алдында үлгідегі емес әріп тұр. Бұл ақпарат үлгіні бірнеше рет оңға қарай жылжытуға мүмкіндік береді және деоның кіруіне еш кедергі болады. Бұл жылжытуларды үлгінің әр соңы үшін алдан ала есептеп алған жөн. Ғалымдардың айтуынша, бұнын барлығы (жылжудың кестесін және оның қолдануын есептеу)

әрекетіне қоюға болады.

Тапсырма 2Деңгейге шығару мәтінінде қатар орналасқан екі жұлдызша мен белгіленген.

Бұл белгіні '^' ауыстыруға шешім қабылданды (сонымен ' ' ауысады ' '). Осыны қалай жай түрде жасауға болады?

Бастапқы мәтін символдан кейін символды оқиды, алынған мәтінді символдан кейін символды қосып басу керек.

Шешімі. Әр уақыт сайын бағдарлама екі жағдайдың бірінде болып келеді "негізгі" және "жұлдызшадан кейін"

Кезекті жаңа әрекеттін жағдайы. кіру символының жағдайы негізгі * жоқтан кейіннегізгі x <> '*' негізгі x басусосын * негізгіні басу '^' x кейін<> '*негізгіні * x басу

Page 30: 14 -15 зертханалық жұмыс · Web viewЕгер кіру және шығу алфавиті: и үлгісінде берілсе, және кіру мен шығу тілдері

Егер мәтіннің соңында бағдарлама «кейін» жағдайында болса, онда жұлдызшаны басу және жұмысты аяқтау керек.

Ескерту. Біздің бағдарлама заменяет '***' '^*' ауыстырады (бірақта '*^' емес). Есептеу жағдайында біз кей детальдарды талқылаған жоқпыз - бағдарлама "дұрыс әрекет істеу керек". Аталған уақытта,бағдарламаның қалай жұмыс жасайтының түсіндірудің ең тиімді жолы бұл оның жағдайы мен әрекетін бейнелеп беру.

Тапсырма 3Мәтіннен барлық сөдердің ' ' түрін жоятын бағдарламаны жазыңыз.

Тапсырма 4 Паскальда түсініктемелер бейнелі жақшалармен келтірілген: begin { цикл басы} ; { ді 1арттырамыз}

Бағдарламаны жазыңыз, ол түсініктемелерді жойып, ал жойылғанның орнына аралықты қойсын ('1{бір}2' ауыссын, '12' емес, ал '1 2').

Шешімі. Бағдарламаның екі жағдайы бар: "негізгі" және "ішкі түсініктеме". Жағдайы. Кезекті жаңа іс-әрекет

жағдайдың ішкі символынегізі { ішкі жағында жоқнегізі x <> '{' негізі x басуішінде } негізі аралықты басуішінде x <> '}' ішінде жоқ

Ескерту. Бұл бағдарлама салынған түсініктемелерді қабылдамайды: жол {{түсініктемелер ішінде} түсініктемелер} ауысады түсініктемелер} (басында екі аралық тұрады). Соңғы автоматпен түсініктемені өңдеу мүмкін емес (жақшалар саның білу керек – ал натуралды сан соңғы жадыға сыймайды).

Тапсырма 5Паскаль бағдарламасында тырнақшаға алынған жолдар бар. Егер де кескінді тырнақша жол ішінде кездессе, онда ол түсініктеменің басы

немесе аяқ жағы деген мағынаны білдіреді. Қалай бағдарламаны өзгертеміз, осыны ескеру үшін?

Нұсқаулық. Жағдай үш түрлі болады: негізгі, түсініктеме іші, жол іші.

Тапсырма 6Паскальді жүзеге асыру үшін тағыда бір мүмкіндік бар – бұл түрлердің

түсініктемесі ; (here i is increased by 1).Сонымен қоса жабылған жақша, ашылған жақшаға сәйкес келе керек ({ ... *)

рұқсат етілмейді). Осындай түсініктемені қалай жоямыз?

Бақылау сұрақтары

Page 31: 14 -15 зертханалық жұмыс · Web viewЕгер кіру және шығу алфавиті: и үлгісінде берілсе, және кіру мен шығу тілдері

1. Құрылымдық синтездің мақсаты неде?2. Құрылымдық синтездің негізгі кезеңдерін атап шық?3. Жадының қандай элементтер түрін білесіндер?

Page 32: 14 -15 зертханалық жұмыс · Web viewЕгер кіру және шығу алфавиті: и үлгісінде берілсе, және кіру мен шығу тілдері

14 -15 зертханалық жұмыс. LL(1)-грамматикасы үшін рекурсивті түсі әдісімен синтаксистік талдау.

Мақсаты: Студентерді бағдарламаны кезеңмен құруға үйрету

3.1 Қысқаша теориялық мәліметтерТерминалданбаған дүкендік танушылар жұмысының модельденуі реттіліктің

бастауыш жай-күйден соңғы жай-күйге ауысуын іздеумен байланысты. Іздеу жеке-жеке қадамдардан тұрады.

Және олардың әрбіреуі сәтсіздікке және бастапқы жай-күйге әкелуі мүмкін. Бұндай іздеу уақытты көпалатындықтан тәжірибеде қайтымсыз жұмыс істейтін детерминалданған танушыларды қолданады. Бұл танушылар -тілдердің шектеулі кластарын ғана қолданысқа жібереді, бірақ олар бағдарламалау тілдерінің барлық синтаксистік жақтарын көрсетеді.

Танушыларды азаймалы және өрмелі деп екі категорияға бөлуге болады.Азаймалы танушылар ережелерді жоғарыдан төмен өңдейді, яғни жоғары

ережелерді төменгілерден бұрын. Ал бұл уақытта кіріс анализаторлары төмендегі ережелерді жоғарыдағылардан бұрын қолданады. Детерминалданған автоматтардың мүмкіндіктері мен олардың тұрғызылу тәсілдерін көрсету үшін бұл бөлімде түріндегі грамматикалар тудыратын азаймалы танушылар қарастырылады.     атауы Left сөзінен шыққан, себебі анализатор кіріс шынжырын солдан – оңға қарай көреді. Тәжірибеде көбінесе грамматика класы қолданылады. Олар үшін ағымды позицияда орналасқан детерминалданған бір кіріс символды танушылар жұмыс істейді. Оқудың бірінші қадамы ретінде азаймалы танушылардың грамматика кластары ішіндегі бір реттілікті қараймыз.

Бөлінген ауыспалылар.Құрамында жою ережелері жоқ мәнмәтінді-бос грамматика төмендегі келесі

екі шартты орындаса ғана бөлінген немесе жай деп аталады:  3 Әр ереженің оң жағы терминалмен басталса.1 Егер екі ереженің сол жағы бірдей болса, онда бұл ережелердің оң жағы

түрлі терминалдық символдармен басталуы керек. Бөлінген грамматиканың негізгі қасиеттерінің бірі – олардың әрқасысына

өрлемейтін детерминалданған танушы құруға болады.

Мысалы, келесі грамматика,  сызбамен берілген:    

бөлек грамматика болып келеді, (1) и (2) жағдайы орындалуда. Басқа жақтан алғанда, грамматика

Page 33: 14 -15 зертханалық жұмыс · Web viewЕгер кіру және шығу алфавиті: и үлгісінде берілсе, және кіру мен шығу тілдері

бөлек грамматика болмайды , себебі (2) ережеде шарт бұзылады (1), ал ережесінде (3) және (4) - шарт (2).

Бөлек грамматиканың негізгі қасиеті болып, олардың әрқайсысынан детерминалды төмен түсетін айырылымдарын құруға болады. 

Мысалы Ханой мұнараларындағы есепте сақиналардың қозғалу бірізділігін табу үшін

рекурсивті емес бағдарламаны жазвңвз. Шешімі. Рекурсивті бағдарламаны еске түсірейік, -ді ауыстырып қоятын

жоғарғы сақиналары с нен :

procedure move(i,m,n: integer);| var s: integer;begin| if i = 1 then begin| | writeln ('қадам жасау ', m, '->', n);| end else begin| | s:=6-m-n; {s – үшінші өзек: нөмірлер сомасы 6 тең}| | move (i-1, m, s);| | writeln ('қадам жасау ', m, '->', n);| | move (i-1, s, n);| end;end;

Біз көретіндей, " -ші өзекке m-нің жоғарғы дискін –ге ауыстыру" есебі сол үлгідегі үш есепке әкеледі: екі есепке -1 дисктермен бір есепке жалғыз дискпен.Бұл есептермен айналысқанда, тағы не істеу керек екенін ұпытпау керек.

Бұл үшін қалтарылған стек есептерін жасайық.Олардың элементтері үштіліктер болып келеді.Әр үштілік тапсырыс ретінде интерпретациаланады "жоғарғы дисктерін -ші өзектен -ге ауыстырылсын" . Тапсырыстар олардың орындалу талаптарына сәйкес жасалған: ең жедел – стек биіктігі.Мынадай бағдарлама аламыз:

procedure move(i,m,n: integer);begin| стек тапсырыстарын бос істеу| стекқа үштілікті қою | {инвариант: стектағы тапсырыстарды орындау қалды}| while стек непуст do begin| | жоғарғы элементті жою,оны | | if j = 1 then begin ауыстыру| | | writeln ('қадам жасау', p, '-><j-1,s,q>', q);| | end else begin| | | s:=6-p-q;| | | {s – үшінші өзек: номерлер сомасы 6 тең}

Page 34: 14 -15 зертханалық жұмыс · Web viewЕгер кіру және шығу алфавиті: и үлгісінде берілсе, және кіру мен шығу тілдері

| | | стекқа үштерді қою , <1,p,q><j-1,p,s>, | | end;| end;end;

(ең бірінші стекке үш қойылады, оны соңғы кезде орындау керек). Стек үштіліктері жеке стектері ретінде іске асады. (Сонымен қоса, паскальдің

арнайы түрі бар, оны "жазылу" деп атайды). Тапсырма 1 (А.К.Звонкин Анджея Лисовскиге хабарлады). Ханой мұнаралары туралы

есептерде рекурсивті емес алгоритмдер бар. Олардың бірі: қондыру өзектері ( ауыстырулардан емес) барлық өзектер кезек

бойынша болу керек . Келесі ереже: кезекпен ең аз сақиналарды және ең аз емес сақиналарды ауыстыру,сонымен ең азын шеңбер бойнша.

Тапсырма 2 Рекурсия орнына стекті қолдану. Толық санның ондық басылымның

рекурсивті бағдарламасында тапсырмалар кейінге қалдырылған.

Тапсырма 3Екілік бұтақ төбелерінің барлығын жазатын рекурсивті емес бағдарламаны

жазыңыз.

Тапсырма 4Не өзгереді, егерде бұтақтын екілік төбелерін жазбасақ, бірақта оның саның

есептесек? Тапсырма 5 6 мүмкіндігі бар тәртіптер үшін кей жеңілдіктер болуы мүмкін, екі түрдегі

стек элементтерінде керек емес сақталымдарды жасайды. Кейбіреулерін көрсетейік. Ескерту. Бұтақтын барлық төбелерін жазудағы басқа бағдарламасын бұтақты

айналу бағдарламасы негізінде құруға болады (тиісті тарауда қарастырылған) Онда "төмен" командасы орындалады. Енді барлық төбелер тізімін түбірден ағымдағы төбеге бару жолын сақтау керек Сонымен қоса графтағы алгоритмдар туралы тараудан қараңыз.

Тапсырма 61 – толық сандар болсын. жиымын құрастыру керек, ..., , ол

үшін сондай сандар болу керек. Ескерту. сандар арасында тең болуы мүмкін. Әр толық сан

қанша рет кірсе, да кіру керек. Шешімі. Санауға онай, мен сандары жиымының

бастапқы және соңғы мағынасын білдіреді. Талаптар " және бір сандарды талап

Page 35: 14 -15 зертханалық жұмыс · Web viewЕгер кіру және шығу алфавиті: и үлгісінде берілсе, және кіру мен шығу тілдері

етеді" көре тұра орындалады, егерде элементтерінің орынын ауыстыру процесімен шектелсек.

k := 0;{ x жиымының k аз элементтері өз орындарында орналасқан}while k <> n do begin| s := k + 1; t := k + 1;| {x[s] - арасында ең азы... x[k+1] x[t] }| while t<>n do begin| | t := t + 1;| | if x[t] < x[s] then begin| | | s := t;| | end;| end;| {x[s] – ең аз x[k+1]..x[n] }| ... ауыстыру x[s] и x[k+1];| k := k + 1;end;

2 Инвариантты қолданатын, сұрыптау есебіне басқа шешім беру керек. {первые элементтін біріншісі реттелген: }

Бақылау сұрақтары

1 Рекурсивті емес бағдарламаны қалай құру керек?2 Не өзгереді, егер де екілік бұтақтын төбесін баспаса, ал тек қана оның саның санаса?

Page 36: 14 -15 зертханалық жұмыс · Web viewЕгер кіру және шығу алфавиті: и үлгісінде берілсе, және кіру мен шығу тілдері

Әдебиеттер тізіміНегізгі әдебиеттер

1. Ахо А., Ульман Д. Теория синтаксического анализа, перевода и компиляции. М.: Мир, 1990

2. Грис Д. Наука программирования. М.:Мир. 19843. Дейкстра Э. Дисциплина программирования. М.: Мир, 19784. Касьянов В.Н. Лекции по теории формальных языков, автоматов и сложности

вычислений. – Новосибирск: НГУ, 1995.5. Лавров С. Программирование. Математические основы, средства, теории.

Санкт-Петербург. БХВ-Петербург, 2001.6. Лисков Б., Дж.Гатэг. Использование абстракций и спецификаций при

разработке программ.7. Льюс Ф. Д.Розенкранц. Р.Стирнз. Теоретические основы проектирования

компиляторов. М.: Мир, 19848. Мальцев А.И. Алгоритмы и рекурсивные функции. – М.: Наука, 19869. Языки и автоматы. Сб.переводов. М.:Мир, 1979.

Қосымша әдебиеттер10.Агафонов В.Н. Синтаксический анализ языков программирования.

Уч.пособие, Новосибирск, НГУ, 1981. 91с.11.Ахо А., Дж.Хопкрофт, Дж.Ульман. Построение и анализ вычислительных

алгоритмов – М: Мир, 1979.12.Братчиков И.Л. Синтаксис языков программирования. М.: Наука, 1975. 232с.13.Гинзбург С. Математическая теория контексно-свободных языков. М.: Мир,,

1970. 326с.14.Гладкий А.В. Формальные грамматики и языки. М.: Наука, 1973. 368с.15.Грис Д. Конструирование компиляторов для цифровых вычислительных

машин. М.: Мир, 1975. 544с.16.Кнут Д. Искусство программирования для ЭВМ. В 3 томах. –м.: Мир, 197617.Кормен Т., Лейзерсон Ч., Ривест Р. Алгоритмы. Построение и анализ –

М:МЦНМО, 1999.