§ 12. Пошук элементаў з зададзенымі ўласцівасцямі
12.2. Пошук аднаго элемента, які задавальняе ўмову пошуку
Прыклад 12.1. Аднамерны масіў a складаецца з n выпадковых натуральных лікаў (усе лікі меншыя за 100). Вызначыць, ці ёсць у ім хоць бы адзін элемент, роўны x (значэнне x уводзіцца). Этапы выканання задання I. Зыходныя даныя: масіў a, колькасць лікаў n, шуканы лік x. II. Вынік: вывад паведамлення «элемент знойдзены» або «элемент не знойдзены». III. Алгарытм рашэння задачы. 1. Увод колькасці элементаў і генерацыя элементаў масіву выпадковым чынам. 4.1. Элемент знойдзены (p = true), г. зн. у масіве ёсць такі элемент a[i], што a[i] = x. 5. Вывад выніку. IV. Апісанне пераменных: n, x – int, p – bool, a – vector <int>. Часта патрабуецца не толькі вызначыць, ці ёсць у масіве шуканы элемент, але і высветліць, на якім месцы ён знаходзіцца. Будзем захоўваць індэкс знойдзенага элемента ў пераменнай k, якой да пачатку прагляду прысвоілі значэнне –1 (прыклад 12.2). Пасля выканання дадзенага алгарытму па значэнні пераменнай k можна вызначыць, ці ёсць у масіве шуканы элемент, і, калі ёсць, то дзе ён стаіць. Калі ў масіве некалькі такіх элементаў, то ў пераменнай k будзе захоўвацца нумар апошняга з іх. Калі такога элемента няма, то значэнне пераменнай k не зменіцца (k застанецца роўным –1). На практыцы аперацыю пошуку даводзіцца выконваць дастаткова часта, і хуткасць работы праграмы знаходзіцца ў прамой залежнасці ад выкарыстоўваемага алгарытму пошуку. У разгледжаных вышэй алгарытмах патрабуецца прагледзець увесь масіў нават у тым выпадку, калі шуканы элемент знаходзіцца на першым месцы. Для скарачэння часу пошуку можна спыняцца адразу пасля таго, як элемент знойдзены. У гэтым выпадку ўвесь масіў прыйдзецца прагледзець толькі тады, калі шуканы элемент апошні ці яго няма. Калі выкарыстоўваецца цыкл for з умовай прагляду ўсіх элементаў, то пры знаходжанні элемента трэба спыніць выкананне цыкла (прыклад 12.3). Можна выкарыстаць цыкл while. Цыкл заканчвае работу, калі будзе знойдзены шуканы элемент або калі k == n , г. зн. элемента, які супадае з x, няма ў масіве (прыклад 12.4). Пры такой рэалізацыі на кожнай ітэрацыі цыкла патрабуецца павялічваць індэкс k і вылічаць лагічны выраз. Паскорыць пошук можна, спрасціўшы лагічны выраз. Змесцім у канец масіву дадатковы элемент са значэннем х (вектар павінен быць апісаны з n + 1 элемента). Тады супадзенне з х абавязкова адбудзецца, і можна не правяраць умову a[k] != x. Такі дапаможны элемент часта называюць бар’ерам або вартавым, паколькі ён перашкаджае выхаду за межы масіву. |
Прыклад 12.1. V. Праграма:
VI. Тэсціраванне. Прыклад 12.2. Фрагмент праграмы:
Тэсціраванне. Прыклад 12.3. Фрагмент праграмы:
Прыклад 12.4. Фрагмент праграмы:
Прыклад 12.5. Праграма:
|