§ 6. Выкарыстанне асноўных алгарытмічных канструкцый для рашэння задач
6.2. Выкарыстанне лікавых паслядоўнасцей
Лікавыя паслядоўнасці дазваляюць апісваць шмат якія працэсы, што адбываюцца ў прыродзе і грамадстве. Для задання элементаў лікавай паслядоўнасці звычайна выкарыстоўваюць адзін з двух спосабаў: 1. Запісваецца залежнасць значэння элемента паслядоўнасці ад значэння нумара (прыклад 6.9). Ёсць паслядоўнасці, якія можна задаваць як першым спосабам, так і другім (прыклад 6.11). Паслядоўнасці могуць будавацца з выпадковых лікаў. Прыклад 6.12. Вывесці на экран першыя k элементаў паслядоўнасці, зададзенай формулой . Этапы выканання задання I. Зыходныя даныя: k (колькасць лікаў). II. Вынік: k лікаў паслядоўнасці. III. Алгарытм рашэння задачы. 1. Увод ліку k. IV. Апісанне пераменных: k – int, n – double. Прыклад 6.13. Знайсці першы элемент паслядоўнасці, зададзенай рэкурэнтна ; меншы за 10−3. Таксама вывесці нумар знойдзенага элемента. Значэнне b уводзіцца. Этапы выканання задання I.Зыходныя даныя: лік b. II. Вынік: элемент паслядоўнасці, меншы за 0.001, і яго нумар. III. Алгарытм рашэння задачы. 1.Увод ліку b. |
Пацверджаннем важнасці лікавых паслядоўнасцей з’яўляецца той факт, што створана цэлая энцыклапедыя лікавых паслядоўнасцей OEIS [1]. Прыклад 6.9. Формула задае наступную паслядоўнасць: 0.5, 0.4, 0.3, 0.235, 0.192, … . Прыклад 6.10. Адной з найбольш вядомых паслядоўнасцей, якую можна апісаць рэкурэнтна, з’яўляецца паслядоўнасць Фібаначы: 1, 1, 2, 3, 5, 8, 13… . Нескладана заўважыць, што кожны яе элемент, пачынаючы з трэцяга, роўны суме двух папярэдніх. Гэта можна запісаць так: an = an − 1 + an − 2, a1 = 1, a2 =1. Прыклад 6.11. У паслядоўнасці 2, 4, 8, 16,… кожны лік з’яўляецца ступенню 2, таму яе можна задаць формулай an = 2n. З іншага боку, кожны элемент паслядоўнасці, пачынаючы з другога, у два разы большы за папярэдні. Атрымаем формулу an = 2an − 1 (для n > 1, a1 = 2). Прыклад 6.12. V. Праграма:
VI. Тэсціраванне. Пры вылічэнні значэння a важна памятаць, што вынікам дзялення двух цэлых лікаў (у дадзеным выпадку гэта лікі n і n2 + 1) будзе цэлы лік, таму неабходна пераўтварэнне тыпу ў рэчыўны да выканання аперацыі дзялення. Радок, у якім вылічваецца значэнне a, можна запісаць і так: double a = static_cast<double> n) / (n * n + 1); Прыклад 6.13. V. Праграма:
VI. Тэсціраванне. |