Тілдер мен автоматтар теориясы



бет2/3
Дата16.06.2016
өлшемі1.65 Mb.
#138803
1   2   3

4 Тапсырма

Барлы› -элементтері жиындар мен жиын асты болып саналсын .

Шешім. нйлдер мен n ±зынды› бірліктерініЈ Щр жиынты“ын реттілікпен ±сынамыз (±сынудыЈ бас›а да тЇрін кешірек ›арастырамыз).

Осындай реттіліктерді лексикографиялы› тЇрде белгілейміз. (жо“арыда ›ар.) есепті шешудіЈ тиімді тЇрі – барлы› ауыстырылымдарды б±рын“ыдай іріктеу болып келеді, ал сосын олардыЈ арасынан бірлігін таЈдаймыз, ал ›ал“анын тиімді емес деп санаймыз ( бірліктерініЈ ауыстырылымдар саны бас›а да ауыстырылымдар санынан тймен болуы мЇмкін). Біз кезекті ауыстырылым алу Їшін ›ызметіндегі тЩртібін талап ететін алгоритм іздестіру керек. љандай жа“дайда - ауыстырылым мЇшесін арттыру керек, ал“аш›ыны ауыстырма“анда? Егерде ден ауысса, онда жалпы бірліктер санын са›тау Їшін оЈ жа“ынан -ді -ге ауыстыру керек. Сол Їшін бірліктер оЈ жа“ынан болу керек. Егер де біз келесі ретке кйшсек, онда нйл оЈ жа›тан бірінші болу керек, одан кейін бірліктер т±ру керек. бірінші т±р“аныЈ біз кйріп т±рмыз ( бірінші емес екенін).

Сонымен –дан кйпті іздестіру ›ажет.

–тен кейін бірнеше бірліктер т±руы мЇмкін, ал одан кейін бірнеше нйлдер. –ті 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 Тапсырма

Толы› оЈ сандар факториалын есептептеудіЈ рекурсивті тЩртібін жазыЈыз (я“ни белгіленетін сандарын шы“ару).

Шешім. ТеЈсіздікті ›олданамыз .
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 Тапсырма

"Ханой м±Јаралары" ойыны келесі кезеннен т±рады. ®ш йзек бар. Оларды біріншісіне са›инасынан т±ратын пирамида киілген.(Їлкен са›иналары астынан, кішілері Їстінен). Са›иналарды бас›а йзекке ауыстыру керек. Са›иналарды йзектен йзекке ауыстырып отыру“а болады, біра› кіші са›инаныЈ Їстіне Їлкендерін ›ою“а болмайды. Шрекетті ›ажет ететін ба“дарламаны ›±растырыЈыз.

Тйменгі тйбе тЇбір деп аталады.Шр тйбеден екі сызы› таралуы мЇмкін: сол“а жо“ары жЩне оЈ“а жо“ары. Тйбелер сызы›тарынын баратын жерін тйбелердіЈ бастап›ы сол жЩне оЈ жа› ±лдары деп атайды. ТйбеніЈ екі ±лы болуы мЇмкін, кей кезде бір ±лы болады (сол жЩне оЈ жа›). ОныЈ ±лдары болмауы да мЇмкін, б±л жа“дайда оны пара› деп атайды.

- екілік б±та›тын тйбесі болсын. Ол йзі ±лдары, немерелері жЩне шйберелерімен тЇбірінде б±та“ы бар - " б±та›тар ±рпа›тарын" ›±райды.

Келесі есептерде б±та› тйбелері толы› оЈ сандармен нймірленген.

Барлы› тйбелер нймірлері Щр тЇрлі болып келеді. БіздіЈ ойымызша тЇбір нймірі root ауысымында са›тал“ан. Екі жиым бар:


of integer.

ТйбеніЈ сол жЩне оЈ жа› ±лдарыныЈ нймірімен и нйміріне сЩйкес болып келеді. Егер тйбе нймірініЈ сол жЩне оЈ жа› ±лдары болмаса, онда (сЩйкесінше ) 0 теЈ. (ДЩстЇр бойынша ба“дарламаларды жаз“анда нйлдіЈ орнына нйлге теЈ nil т±ра›тылы“ы ›олданылады).

Б±л жерде – жеткілікті тЇрде натурал сан болып келеді (тйбелердіЈ барлы› сандары аспайды). Белгілейік, 1 ден дейінгі барлы› сандар тйбелер нймірі болу міндетті емес жЩне тйбелер нймірініЈ орналасуымен байланысты болмайды. (я“ни l жЩне r жиынты“ында“ы мЩліметтер бйлігі- б±л ›о›ыс).
10 Тапсырма

N=7, root=3, l жЩне r жиымдары мынадай:

i | 1 2 3 4 5 6 7

l[i] | 0 0 1 0 6 0 7

r[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
| | n:= n(l[x]) + n(r[x]) + 1;
| end;
end;
Б±та› асты тйбелер саны x тйбесінен оныЈ ±лдары мен йзін ›ос›анда“ы тйбелер саныныЈ сомасына теЈ. Рекурсия тереЈдігі соЈ“ы, себебі Щр ›адам сайын тиісті б±та› асты биіктік тймендейді.
Ба›ылау с±ра›тар


  1. Сйздік жЩне алфавит деп нені атаймыз?

  2. формальды грамматиканыЈ аны›тамасы нені білдіреді?

  3. Терминалды символ Щріптері ›андай?


5-6 зертханалы› ж±мыс. Жіктеу а“ашы. ГрамматикалардыЈ эквиваленттілігі жЩне бір мЩнділігі.
Ма›саты: студенттерді с±рыптау алгоритмын шешу Їшін Щр -тЇрлі тЩсілді таба білуге Їйрету
4.1 љыс›аша теориялы› мЩліметтер

Жалпы ал“анда аудару немесе таратуды алфавит сйзіндегі жЩне сйздері арасында“ы сЩйкестік деп білеміз. Егер тізбекшелері, тізбекшелері, олар шы“у жЩне кіру тізбекшелері деп аталады. Егер кіру алфавиті мен шы“у алфавиті, онда   тілінен аудар“анда, жиыныныЈ тізбекшелерінен т±ратын, , тілінде тізбекшелерден т±рады жиыны, жиыныныЈ ›ос тізбекшелері деп аталады , олар и . 

                                    

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

Їлгісінде берілсе, жЩне кіру мен шы“у тілдері тізбекшелер ±зынды“ын ›амтиды, олардыЈ арасында“ы сЩйкестік аудару тЇрінде сипатталады.

    Элементтер саны кйп емес соЈ“ы аударуларды аударылымдар тЇрінде беруге болады.Біра›та, Їлкен соЈ“ы жЩне ая“ы жо› аударулар тапсыру Їшін формальды тілдерге сия›ты тапсырмалар керек. Бір жа“дайды ›арастырайы›, жиынныЈ кіру тізбекшелері  (аударудыЈ кіру тілін) грамматикасы ар›ылы жЩне шы“у тізбекшелері ар›ылы беруге болады ( аударымныЈ шы“у тілі).

Осындай тапсырманыЈ аударымы болып, оныЈ "айна сипатын шы“у тізбекшелері Їшін аны›тайды. Егер де шы“у жЩне кіру алфавиті екі символдан т±рса - , онда осындай аудару ережесініЈ мынадай тЇрі бар:
Кіру тізбекшелері                     шы“у тізбекшелері           ╝0,                                 ╝0
         ╝1,                                 ╝1
        ╝,                                       ╝

 

СЩйкес ережені ›олдан“анда, мынаны аламыз:



Осындай ›±рылымды ›±р“анда кіру жЩне шы“у тізбекшелерініЈ ›±рылым ережесі арасында“ы сЩйкестікке ерекше кйЈіл бйлу керек

Б±л тарауда бір есептін бірнеше н±с›аулары ›арастырылады. ›алалары болсын, ден сандар реттелген. Шр ›алалар Їшін нймірлерімен, кестесінде ›аласынан ›аласына жетудіЈ авиабилет ба“асы толы› сан са›тал“ан. Шр ›алалар арасында“ы рейстер бар деп саналады. барлы› -дан айрылады. ден маршруттар Їшін билеттер сомасы минималды болып саналады. (оныЈ ішінде ауыстырып отыр“ызу), ден баратын (ол аспайды, жЩне де кем болмау керек).

Тйменде берілген тапсырмаларда алгоритмніЈ ж±мыс уа›ытына жЩне бас›а да жиым шектеуіне кейбір ›алалар Їшін еЈ тймен жол тйлем ба“асын табу керек.
Мысалы

Шамалап ал“анда, бекітілген маршрут болмайды, олар Їшін ба“а сомасы теріс болып келеді. Б±л жа“дайда еЈ тймен ба“асы бар маршрут бар екенін дЩлелдеу керек.

Шешімі. –нан кйп маршрутта цикл болады, сонды›тан миниумды ±зынды“ынан кем емес маршруттар арасынан іздеу керек.

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


Тапсырма 1

уа›ытында ›аладан екінші ›ала“а барудыЈ жол тйлемініЈ еЈ тймен ба“асын табыЈыз ( деЈгейде).


Тапсырма 2

Ба“дарлама д±рыс екенін дЩлелде, егерде жиымыныЈ бол“ызбаса, ал тек ›ана сол жиымда йзгерістерін шы“арса (ба“дарламада“ы у Щріптерін х Щріпіне йзгертіп, ал сосын ›ал“ан керек емес жолдарды жою керек).


Тапсырма 3

ЕЈ тймен жол тйлемін табыЈыз барлы“ы Їшін уа›ыт ішінде ( –ді деЈгейде).


Тапсырма 4

Барлы› ба“алар теріс емес екені бізге мЩлім. ЕЈ тймен жол тйлемін табыЈыз барлы› Їшін уа›ыт ішінде ( -ді деЈгейде).


Тапсырма 5

Б±л матрицаны шы“ару Їшін матрица жай формула бойынша есептеледі, тек ›ана сома орнына минимум, ал ›осу орнына сома.


Тапсырма 6

Сонымен матрицалардыЈ белгілі тЇрде шы“уы ассоциативті тЇрде болады.


Тапсырма 7

Эквивалент жолыныЈ ›ыс›алы“ы туралы есепте "а›ырсыз деЈгей" матрица ба“асы , тізбектілігінде барлы› элементтер, кейбіреуінен баста“анда,›ыс›а жол ба“асыныЈ ізделетін матрица“а теЈ. (егер теріс циклдар болмаса).




Тапсырма 8

љай элементтен бастап теЈсіздік кепілдігін беруге болады, Алдын“ы есепте?

Шдетте (модифицирлан“ан емес) матрицаларды кйбейту пайдалы бола алады, біра›та матрицалар бас›а болу керек. Барлы› рейстер болмасын (б±рын“ыша), ал кейбіреуі, теЈ ,егер рейс болса жЩне , егер рейс болмаса. матрицасын жасайы› (жай кЇйде) деЈгейіне жЩне оныЈ - шы элементіне ›арайы›.

Тапсырма 9

Дейкстр алгоритмы рейстері мен ›алаларын модифицирлеу Їшін операциялары керек екенін дЩлелдеу керек.

Н±с›аулы›. Шр ›адамда не істеу керек? Минималды ба“ада“ы белгіленбеген ›аланы аны›тау керек жЩне барлы› ›алалар Їшін маршруттары бар ба“аларды тЇзету керек. Егер де бізге ›ай ›ала“а ба“а минималды екеніЈ айтып отырса, онда ›ызметі жеткілікті болатын еді.
Тапсырма 10

С±рыптау алгоритмін ±сынайы›. Іс-Щрекет саны тЩртібінде болсын, аспау керек. Кейбір Їшін жЩне барлы› Їшін.

Біз бір шешімін кйрсетеміз.

Шешім. (›осылу ар›ылы с±рыптау).

саны- толы› оЈ сан. Разобьем массив массивін алайы›, ±зынды“ыныЈ кесіндісіне. ( бірінші, ал сосын жЩне т.б.) СоЈ“ы кесінді толы› болмайды, егер де – -“а бйлінбесе. массивін –реттелген деп атайы, егер де Щр кесінді жеке ал“анда реттелген болса. Шр массив 1- реттелген. Егер де массиві- реттелген болса жЩне , онда ол реттелген.

Біз - реттелген масссивті - реттелген массивке ›алай тЇрлендіруге болатыныЈ кйрсетейік (сол элементтерден сия›ты). Б±л тЇрлендіру нЩтижесінде алгоритм былай жазылады:


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 тілін жа›сы кйретіндер ›ыс›артуын ба“алайды немесе .)

Бірінші Щрекет (элементті бірінші кесіндіден алу) бір уа›ытта екі Щрекетті орында“анда шы“уы мЇмкін:


  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 <| | (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 зертханалы› ж±мыс. Контекстік-еркін грамматикалы› жЩне магазиндік автоматтар. Б±та›ты айналу. љайтарылымдармен толы“у
Ма›саты: Студенттерді ба“дарламаны кезеЈмен ›±ру“а Їйрету
2.1 љыс›аша теориялы› мЩліметтер

Формалды› грамматика теориясында 4 тіл тЇрі сЩйкес келетін грамматиканыЈ 4 тЇрі ерекшеленеді. Б±л грамматикалар грамматика ережелеріне шектеу ›ою жолымен аны›талады.

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

МЩнмЩтінді – ба“ыныЈ›ылы грамматика деп аталатын 1 тЇріндегі грамматикалар кез келген ережені ›олдану“а жол бермейді.

Б±ндай грамматикаларда шы“ару ережесі келесі тЇрде болуы керек:

б±нда - жиынынан мЇмкін бос шынжырлар, символ жЩне шынжыр. жЩне шынжырлары ережені ›олдан“анда йзгермейді, сонды›тан оларды мЩнмЩтін (я“ни сЩйкесінше оЈ жа› жЩне сол жа›), ал грамматиканы – мЩнмЩтінді ба“ыныЈ›ылы деп атайды.

1 тЇріндегі грамматика 0 тЇріндегі грамматика“а ›ара“анда кйбірек ›олданылады, себебі ереженіЈ оЈ жа“ында кейбір синтаксистік тЇсініктермен байланысты болатын терминалды емес бір “ана символ йзгертіледі, ал 0 тЇріндегі грамматикада бірден бірнеше символ, соныЈ ішінде терминалды да йзгертуге болады.

Мысалы,
грамматикасы мЩтіндік-ба“ыныЈ›ылы болып табылады, себебі екінші жЩне алтыншы ережелер бос емес оЈ жа›ты мЩнмЩтінді, ал Їшінші жЩне бесінші ереже екі мЩнмЩтінді де ±стайды. Б±ндай грамматикада шы“ару тймендегідей болуы мЇмкін:

2 тЇріндегі грамматиканы мЩнмЩтінді – бос жЩне мЩнмЩтінсіз грамматика ( -грамматика немесе грамматика) деп атайды. б±ндай грамматикаларды шы“ару ережесі келесідей болады:


жЩне
Я“ни б±л ережелер шарты бойынша 1 тЇріндегі грамматика ережесінен пайда болады. МЩнмЩтіндік шарттар болма“анды›тан, 1 тЇріндегі грамматика ережесіне ›ара“анда МБ – грамматика ережесі жеЈілдірек алынады. Я“ни, на›ты осындай грамматикалар ба“дарлама тілдерін мазм±ндау Їшін ›олданылады. – грамматика“а мысал ретінде тймендегі грамматиканы келтіруге болады:

Б±л грамматика шынжыры немесе шынжырыныЈ айналы кйрінісініЈ Щрбіреуі екі бйлігінен т±ратын шынжырдан т±ратын тілді тудырады.

б±нда - б±л бос шынжырсыз жиыны. Б±л грамматика кймегімен мысал“а келесі шынжыр ›±ру“а болады:

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


немесе немесе
б±нда жЩне жЩне грамматика тек ›ана - оЈ жа› ереже немесе – сол жа›ты ереже тЇріндегі ережесі болуы мЇмкін.

Б±л грамматикалар бір тілді тудырады.  

Тіл классификациясы тілді тудыратын грамматика тЇрлеріне сЩйкес ›±рылуы мЇмкін. Бір тіл екі тЇрлі грамматика болатын тЇрлі грамматикалармен берілуі мЇмкін. Сонды›тан тіл тЇрін тЇріндегі грамматика беруі мЇмкін грамматика тЇрімен аны›талады.
Тапсырма 1

Ферзи, бір - бірін со›пайды: б±та› орнын тексеру.

Бірінші бйлімде біз бір Їлгідегі бірнеше есептер ›арастыр“анбыз: "Кей жиымныЈ барлы› элементтерін атап шы“ыныз". Шешім сызбасы мынадай: жиымында белгілі тЩртіп енгізілді жЩне бастап›ы элементтін келесі жиымынан кейінгі т±р“ан элементі( сол тЩртіпте) кйрсетіледі. Осындай сызбаны Щр›ашан тікелей іске асыру“а мЇмкін емес. Б±л тарауда біз кей жиымныЈ барлы› элементтерін аны›тау“а мЇмкіндік аламыз. ОныЈ аты "›айтарылымдарды іздестіру", "тарма›тар мен шекаралар Щдісі ", "backtracking". БіздіЈ ойымызша б±л ЩдістіЈ на›ты аны›тамасы – б±та›ты айналып шы“у.

Тапсырма 2

ферзидерді шахматты› та›тасында ді - “а ›ой“анда“ы барлы› Щдістерін аны›таныз (олар бір –бірін со›па“ан жа“дайда)

Шешімі. Шр горизонтальнда бір ферзидан т±ру керек. –ны позиция дейміз - ( , Їшін ) ферзилердіЈ тйменгі горизонтында (ферзилар бір-бірін со“уы мЇмкін). Салайы› "б±та› орыны": оныЈ тЇбірі 0-орыны болады, Щр -орынан жо“ары ›арай кйтерілейік - орынына. Б±л орындары ферзилардыЈ -ші горизонталында орналасумен ерекшелінеді.

ОлардыЈ суретте орналасуы б±л ферзидіЈ ›осымша“а сЩйкес екеніЈ кйрсетеді: ферзи сол жа›та орналасса сол жа› орыны деп аталады.

Б±л б±та›тыЈ орындары арасынан біз -орынына кйЈіл бйлуіміз керек жЩне ферзилар бір-бірін со›пау керек. Ба“дарлама оларды "б±та›ты айнала жЇреді" жЩне оларды іздестіреді. Арты› ж±мыс істемеу Їшін, мына нЩрсені ескерейік: егер де -орыныныЈ ферзилері бір-бірін со›са, онда ›ал“ан ферзилерді ›оюдыЈ ма“ынасы жо›.

Сонды›тан, осы жа“дайды кйргенде біз б±л ба“ытта“ы б±та›тыЈ ›±рылымын то›татамыз.

На›тыра›, -орыныЈ жетімді дейміз, егер жо“ары ферзиді жойса, ›ал“андары бір-бірін со“ады. БіздіЈ ба“дарлама р±›сат етілген орындарды “ана ›арастырады.

Есепті екі бйлікке бйлейік: (1) б±та›ты ерікті айналамыз жЩне (2) б±та›тарды р±›сат етілген орыннан іске асыру.

Ерікті а“ашты айналудыЈ есебін ›±растырайы›. Бізде робот бар деп есептейік, ол Щр ау›ыт сайын б±та›тын тйбесінде орналасуы мЇмкін.

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


жо“ары сол“а (жо“ары ба“даршадан шы“атын сол жа› бойынша)

оЈ“а (кйрші оЈ жа›та“ы тйбеге кйшу)

тймен (бір деЈгейге тймен тЇсу)

жо“ары сол“а

оЈ“а

тймен
Шр команданы сЩйкесінше орындау Їшін "жо“ары бар", "сол жа›та бар", "тймен бар" (соЈ“ы тексеру барлы› жерде тиімді, тЇбірден бас›асы). КйЈіл бйліЈіз, "оЈ“а" командасы тек ›ана "ту“ан а“асына" “ана кйшуге мЇмкіндік береді.



Роботта "йЈдеу" деген командасы бар оныЈ міндеті – барлы› пара›тарды (биіктік, оларды ішінде жо“ары ба“даршасы жо›, "жо“ары бар ").

БіздіЈ шахматты› есебін шы“ару Їшін команда ферзи орынында“ы басылым мен тексерісі сЩйкесінше йЈделеді.

Ба“дарламаны ары ›арай д±рыс ›олданудыЈ мынадай аны›тамасы беріледі. РоботтыЈ бір б±та›тын тйбесінде жа“дайын бекітсін.Сол жа“дайда б±та›тын барлы› пара›тары Їш категория“а бйлінеді: Робот Їстінде, Роботтан сол“а ›арай жЩне роботтан оЈ“а ›арай. (ТЇбірден пара››а Роботпен тйбе ар›ылы йтеді, сол“а ›арай б±рылу, о“ан жетпей оЈ“а ›арай б±рылу.) (ОЛ) ар›ылы жа“дайды белгілеймі"Роботтан сол“а ›арай барлы› пара›тар йЈделген ", а (ОЛН) ар›ылы - жа“дайы "барлы› пара›тар сол“а ›арай жЩне Робот Їстінде йЈделген".

Бізге мынадай процедура ›ажет:


procedure тірелгенге дейін жо“ары жЩне йЈдеу

| {берілген: (ОЛ), керек: (ОЛН)}

begin

| {инвариант: ОЛ}



| while жо“арыда бар do begin

| | жо“ары сол“а;

| end

| {ОЛ, Робот пара›та}



| йЈдеу;

| {ОЛН}


end;
Негізгі алгоритм:

берілген: Робот тЇбірде,пара›тары йЈделмеген

керек: Робот тЇбірде, пара›тары йЈделген
{ОЛ}

тірелгенге дейін жо“ары жЩне йЈдеу;

{инвариант: ОЛН}

while тймен бар do begin

| if оЈ жа›та бар then begin {ОЛН, оЈ жа›та бар }

| | оЈ“а;

| | {ОЛ}

| тірелгенге дейін жо“ары жЩне йЈдеу;

| end else begin

| | {ОЛН, оЈ жа›та емес тймен жа›та}

| | тймен;

| end;


end;

{ОЛН, Робот тЇбірде=> барлы› пара›тар йЈделген}


РоботтыЈ келесі ›асиеттерін пайдалану “ана ›алды. (жо“ары ›арай шарттары кйрсетілген, онда тймен-оны орындау нЩтижесі туралы аны›тама командасы орындалады):

(1) {ОЛ, жо“ары емес} (2) {ОЛ}

жо“ары сол“а йЈдеу

{ОЛН} {ОЛ}

(3) {оЈ жа›та бар, ОЛН} (4) {оЈ жа›та емес ОЛН}

оЈ“а ›арай тймен

{ОЛ} {ОЛН}
Тапсырма 3

Кйрсетілген ба“дарлама ж±мысты ая›тайтыныЈ дЩлелдеу керек (соЈ“ы б±та›тын ›айсысында болсын).


Тапсырма 4

Б±та›ты айналуда“ы есепті шы“ар, егер де біз барлы› тйбелер йЈделетініЈ ›аласа› (пара›тар “ана емес).

Шешімі. – кейбір тйбелер. Сол жа“дайда y тйбесі тйрт категорияныЈ біріне жатады. ТЇбірден у баратын жолды ›арастырайы›. Болуы мЇмкін:


  1. (а) –тен тЇбірге баратын жол ( тен тймен);

  2. (б) -ке баратын жолдан сол“а б±рылу ( -те сол“а ›арай);

  3. (в) ар›ылы йту( над -тен -“а);

  4. (г) жолдан оЈ“а -ке б±рылу ( -тен –“а ›арай);

тйбенін йзі категориясына жатады (в).
Шарттар енді осындай болады:

(ОНЛ) барлы› тйбелер тймен жЩне сол“а орналас›ан;

(ОНЛН) барлы› тйбелер тймен, сол“а жЩне Їстінде орналас›ан.
Ба“дарлама осындай болады:
procedure тірелгенге дейін жЩне жо“ары;

| {берілген: (ОНЛ), керек: (ОНЛН)}

begin

| {инвариант: ОНЛ}



| while жо“арыда бар do begin

| |йЈдеу;

| | жо“ары сол“а;

| end


| {ОНЛ, Робот пара›та}

| йЈдеу;


{ОНЛН}

end;
Негізгі алгоритм:

берілді: Робот тЇбірде , ештене йЈделген жо›

керек: Робот тЇбірде, барлы› тйбелер йЈделген

{ОНЛ}

тірелгенге дейін жо“ары жЩне йЈдеу;



{инвариант: ОНЛН}

while тйменде барdo begin

| if оЈ жа›та барthen begin {ОНЛН, оЈ жа›та бар}

| |оЈ“а;


| | {ОНЛ}

| | тірелгенге дейін жо“ары жЩне йЈдеу;;

| end else begin

| | {ОЛН,оЈ жа›та емес, тйменнен}

| | тймен;

| end;


end;

{ОНЛН, Робот тЇбірде => барлы› тйбелер йЈделген }




Достарыңызбен бөлісу:
1   2   3




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

    Басты бет