§ 11. Выкарыстанне ўмоў


Warning: shuffle() expects parameter 1 to be array, null given in /home/informat/public_html/wp-content/plugins/exercises/exercises.php on line 121

Warning: Invalid argument supplied for foreach() in /home/informat/public_html/wp-content/plugins/exercises/exercises.php on line 126

11.1. Паняцце ўмовы

Прыняцце рашэнняў часта залежыць ад розных умоў. Калі на вуліцы дождж, то трэба ўзяць парасон; калі добра падрыхтаваўся да ўрока, то атрымаеш высокую адзнаку, інакш нізкую і інш.

Чалавек здольны разумець умовы, сфармуляваныя ў адвольнай форме. Але для таго каб Робат або іншы выканаўца мог прымаць рашэнні, трэба «навучыць» яго «разумець» умовы.

Умовай для выканаўцы з’яўляецца зразумелае яму выказванне, якое можа быць праўдзівым (выконвацца) або непраўдзівым (не выконвацца).

Выканаўца можа праверыць праўдзівасць умоў, што ўваходзяць у яго сістэму ўмоў.

Разгледзім сістэму ўмоў для выканаўцы Робат.

 

WallFromLeft

Праўдзіва, калі злева ад Робата сцяна

WallFromRight

Праўдзіва, калі справа ад Робата сцяна

WallFromUp

Праўдзіва, калі зверху ад Робата сцяна

WallFromDown

Праўдзіва, калі знізу ад Робата сцяна

FreeFromLeft

Праўдзіва, калі злева ад Робата свабодна

FreeFromRight

Праўдзіва, калі справа ад Робата свабодна

FreeFromUp

Праўдзіва, калі зверху ад Робата свабодна

FreeFromDown

Праўдзіва, калі знізу ад Робата свабодна

CellIsPainted

Праўдзіва, калі ячэйка, у якой знаходзіцца Робат, зафарбавана

CellIsFree

Праўдзіва, калі ячэйка, у якой знаходзіцца Робат, не зафарбавана

Узоры праўдзівых і непраўдзівых умоў для выканаўцы Робат паказаны ў прыкладзе11.1.

11.2. Цыкл з перадумовай

Цыкл з параметрам выкарыстоўваецца пры складанні алгарытму ў тым выпадку, калі загадзя вядомая колькасць паўтарэнняў. Аднак часта да выканання цыкла колькасць паўтарэнняў невядомая.

Прыклад 11.2. Вы з бацькамі пайшлі ў лес у грыбы. Вашы дзеянні можна апісаць камандамі: знайсці грыб, зрэзаць грыб, пакласці грыб у кошык. Гэтыя дзеянні будуць выконвацца ў цыкле, але вы загадзя не ведаеце, колькі грыбоў увойдзе ў кошык. Таму варта гаварыць не пра колькасць паўтарэнняў (колькасць грыбоў), а пра ўмову, пры якой вы будзеце працягваць збор грыбоў: пакуль кошык не запоўнены.

Алгарытмічная канструкцыя цыкл з перадумовай (цыкл «пакуль») — спосаб арганізацыі цыкла, пры якім колькасць выкананняў каманд цела цыкла залежыць ад праўдзівасці або непраўдзівасці ўмовы цыкла.

Цыкл з перадумовай выкарыстоўваецца, калі колькасць паўтарэнняў цела цыкла загадзя невядомая, але вядомая ўмова працягвання працы.

Умова цыкла вызначае, як доўга будзе выконвацца цыкл. Пакуль умова праўдзівая, выконваюцца каманды, што складаюць цела цыкла. Цыкл перастае выконвацца тады, калі ўмова становіцца непраўдзівай. Цыкл з перадумовай мае такую назву, паколькі праверка ўмовы папярэднічае выкананню каманд цела цыкла.

Алгарытмічная канструкцыя цыкла з перадумовай адлюстроўваецца на блок-схеме так:

У дадзенай канструкцыі ў прамавугольніку(-ах) запісваюцца каманды алгарытму (цела цыкла), якія паўтараюцца і здзяйсняюцца, пакуль правільная ўмова (Так). Пры гэтым пасля кожнага выканання каманд цела цыкла адбываецца праверка, ці праўдзівая ўмова. Як толькі ўмова стане непраўдзівай (Не), цыкл завяршаецца. Калі ўмова адразу непраўдзівая, то цыкл не выканаецца ні разу.

Калі ўмова ў цыкле будзе заўсёды праўдзівай (заўсёды Так), то такі цыкл не зможа завяршыцца. Такую сітуацыю называюць зацыкліваннем.

Для запісу цыкла з перадумовай выкарыстоўваецца каманда while. Фармат запісу каманды:

while <умова> do

begin

цела цыкла;

end;

Радок while <умова> do з’яўляецца загалоўкам цыкла. Гэты радок можна прачытаць наступным чынам: «Пакуль правільная ўмова, рабі». Каманды begin и end; у дадзеным выпадку адыгрываюць ролю аператарных дужак.

Прыклад 11.3. Напішам праграму для рашэння задачы w2 з убудаванага задачніка.

Робат павінен зафарбаваць калідор пераменнай даўжыні.

У дадзенай задачы нам дакладна невядомая даўжыня калідора, але вядома, што Робат можа рухацца, пакуль справа пуста, і зафарбоўваць клеткі:

Пакуль справа пуста, паўтараць

зафарбаваць;

управа.

Пасля праходу ўсяго калідора Робат павінен зафарбаваць апошнюю клетку. Гэта адбываецца пасля выканання цыкла, бо для апошняй клеткі ўмова «справа пуста» ўжо не выконваецца.

Прыклад 11.4. Напішам праграму для рашэння наступнай задачы. Робат знаходзіцца ў верхнім левым вугле поля. Знізу ад яго ўздоўж усяго поля размешчана сцяна з праходам у адну клетку. Скласці алгарытм, выканаўшы які Робат зможа прайсці праз праход і зафарбаваць клетку. Размяшчэн-
не праходу загадзя невядомае.

Праход не абмежаваны сцяной знізу. Робат можа рухацца ўправа, пакуль знізу ёсць сцяна:

Пакуль знiзу сцяна, паўтараць

управа.

Робат спыніцца ў той клетцы, у якой знізу няма сцяны. Пасля гэтага Робат павінен зрушыцца ўніз і зафарбаваць клетку.

Умовы выкарыстоўваюцца ў правілах дарожнага руху. Так, калі гарыць зялёнае святло, то можна пераходзіць вуліцу.

Умовы таксама сустракаюцца ў фальклоры, напрыклад пры выбары шляху казачнымі героямі.

В. Васняцоў. «Віцязь на раздарожжы» (фрагмент). 1882 г.

Выкарыстоўваюцца ўмовы ў матэматыцы, напрыклад:
трохвугольнік існуе, калі для большай стараны a выконваецца няроўнасць a < b + c.

Прыклад 11.1. Разгледзім пачатковае становішча поля выканаўцы Робат:

У дадзеным выпадку для Робата будуць праўдзівымі наступныя ўмовы:

WallFromLeft
WallFromUp
FreeFromRight
FreeFromDown
CellIsPainted

Непраўдзівымі пры такім пачатковым становішчы будуць умовы:

WallFromRight
WallFromDown
FreeFromLeft
FreeFromUp
CellIsFree

Прыклад 11.2. Збор грыбоў.

Выкарыстанне цыкла з параметрам пры складанні алгарытму рашэння гэтай задачы можа прывесці да розных вынікаў.

Кошык можа быць або напаўпустым, або не ўсе знойдзеныя грыбы ў яго змесцяцца.

Калі выкарыстоўваць цыкл з перадумовай, то ў выніку дамоў можна прынесці поўны кошык грыбоў.

Расійскі акадэмік Андрэй Андрэевіч Маркаў (малодшы) (1903—1979) у сваіх даследаваннях у галіне тэорыі алгарытмаў паказаў, што ў агульным выпадку алгарытмы павінны змяшчаць прадпісанні двух відаў:
1)  функцыянальныя аператары, накіраваныя непасрэдна на пераўтварэнне інфармацыі;
2)  лагічныя аператары, якія вызначаюць далейшы напрамак дзеянняў.
Аператар — элемент мовы, што задае поўнае апісанне дзеяння, якое неабходна выканаць.
У англійскай мове дадзенае паняцце абазначаецца словам statement, што азначае таксама ‘выказванне’.
Калі ўжыць вышэйсказанае да камп’ютарных выканаўцаў, то прадпісанні першага віду складаюць сістэму каманд выканаўцы, а прадпісанні другога віду — сістэму ўмоў выканаўцы.

Прыклад 11.3. Адно з магчымых пачатковых становішчаў:

 

Другое магчымае пачатковае становішча:

 

Запішам праграму для вучэбнага камп’ютарнага выканаўцы Робат:

Вынік работы запісанай вышэй праграмы для першага пачатковага становішча будзе мець наступны выгляд:

 

Вынік работы праграмы для другога пачатковага становішча:

 

Прыклад 11.4. Адно з магчымых пачатковых становішчаў:

 

Праграма для выканаўцы Робат:

Вынік работы праграмы будзе наступным:

_________________

 

1 Модуль RobTasks, што змяшчае дадзенае становішча і задачу, можна спампаваць па адрасе: http://e-vedy.adu.by/mod/resource/view.php?id=25684



1 Што разумеюць пад умовай для выканаўцы?



2 Выберыце са спіса ўмовы праверкі наяўнасці сцяны для камп’ютарнага выканаўцы Робат.



3 Выберыце са спіса ўмовы праверкі адсутнасці сцяны для камп’ютарнага выканаўцы Робат.



4 Калі выкарыстоўваецца цыкл з перадумовай?



5 У якім выпадку ўзнікае сітуацыя зацыклівання?



    1. 1 Для выканаўцы Робат быў напісаны наступны алгарытм:

    Нарысуйце ў сшытку вынік работы дадзенага алгарытму. Якімі павінны быць памеры поля, каб Робат не ўрэзаўся ў сцяну? Вызначыце пачатковае становішча Робата.

    1. 2 Напішыце праграму для рашэння задач w3 і w8 з убудаванага задачніка. Звяртайце ўвагу на пачатковае і канцавое становішча Робата.
         
    2. 3 Складзіце алгарытм, выканаўшы які Робат нарысуе «ўзор» з задання 2 уздоўж левага краю поля выканаўцы. Якім павінен быць вертыкальны памер поля выканаўцы? (Задача myrob5 з модуля RobTasks.)
    3. 4 Робат знаходзіцца на квадратным полі невядомага памеру. Пачатковае становішча Робата — верхні левы вугал. Складзіце і выканайце алгарытм, па якім Робат перамесціцца з пачатковага становішча ў ніжні правы вугал і зафарбуе ўсе клеткі свайго шляху. На якім (на якіх) з рысункаў адлюстравана рашэнне гэтай задачы? Чаму?
    a) б) в)
    1. 5 На полі Робата размешчаны «плот» — гарызантальная сцяна. Плот трэба «пафарбаваць» — зафарбаваць усе клеткі зверху сцяны. У «плоце» могуць быць адны «вароты» — клетка без ліній. Даўжыня «плота» і размяшчэнне «варот» невядомыя. (Задача myrob7 з модуля RobTasks.)
    2. 6 Па блок-схеме запішыце праграму для выканаўцы Робат. Якім будзе вынік для кожнага з прапанаваных пачатковых становішчаў? (Задача myrob8 з модуля RobTasks.)

    7* Рашыце задачу w10 з убудаванага задачніка. Напішыце дапаможны алгарытм для абходу адной сцяны.