§ 5. Аператар цыкла
5.2. Аператар цыкла з постумовай
Цыкл, у якім умова для завяршэння работы правяраецца пасля выканання цела цыкла, у С++ запісваецца наступным чынам: do { цела цыкла; } while (<умовы>); Цыкл працуе, пакуль умова праўдзівая, і спыняе работу, калі ўмова становіцца непраўдзівай. Гэты цыкл называюць цыклам з постумовай, бо праверка ўмовы ажыццяўляецца пасля выканання цела цыкла. Выкарыстоўваць цыкл do...while лепш у тых выпадках, калі каманды ў целе цыкла павінны выканацца хоць бы адзін раз або калі ўнутры цела цыкла адбываецца ініцыялізацыя пераменных, якія ўдзельнічаюць у праверцы ўмовы заканчэння яго работы. Фігурныя дужкі ў запісе цыкла з постумовай могуць быць апушчаны, калі цела цыкла складаецца з адной каманды. Прыклад 5.2. Напісаць праграму, якая будзе генерыраваць выпадковыя лікі з прамежку [1; x] да таго часу, пакуль не будзе згенерыраваны лік, кратны k. Вывесці гэты лік і колькасць згенерыраваных лікаў. Значэнні k і x уводзяцца (k < x). Этапы выканання задання I. Зыходныя даныя: лікі k і r. II. Вынік: r (шуканы лік) і n (колькасць лікаў). III. Алгарытм рашэння задачы. 1. Увод зыходных значэнняў. 3.1. Генерыруем выпадковы лік r. У С++ для гэтага выкарыстоўваецца функцыя rand(), якая генерыруе выпадковы лік у прамежку [0; 32767). Гэты лік будзе выкарыстоўвацца ва ўмове праверкі заканчэння работы цыкла. 4. Вывад выніку. IV. Апісанне пераменных: n, k, x — int. |
Лікі, згенерыраваныя функцыяй rand(), называюць псеўдавыпадковымі, паколькі пры кожным запуску праграмы будзе згенерыравана адна і тая ж паслядоўнасць лікаў. Кожны новы лік у паслядоўнасці генерыруецца па пэўным алгарытме з папярэдняга. Першы лік у гэтай паслядоўнасці — канстанта, вядомая кампілятару. Такі падыход зручны для адладкі праграмы. Аднак для атрымання вынікаў неабходна пры кожным запуску атрымліваць іншыя лікі. Функцыя srand(n) з бібліятэкі cstdlib дазваляе змяніць першы лік у паслядоўнасці ў залежнасці ад значэння параметра n. Аднак, калі значэнне n з’яўляецца канстантай, то паслядоўнасць лікаў зменіцца ў адносінах да пачатковай, але не будзе змяняцца пры новых запусках праграмы. Калі ў якасці значэння n узяць сістэмны час (функцыя time(NULL)з бібліятэкі ctime), то пры кожным запуску праграмы будзем атрымліваць новую паслядоўнасць выпадковых лікаў. Прыклад 5.2. V. Праграма:
VI. Тэсціраванне. VII. Паколькі лікі генерыруюцца выпадкова, то для адных і тых жа зыходных даных могуць атрымлівацца розныя вынікі (тэсты 2—4). |