Прыклад 6.15. У сакрэтнай лабараторыі выводзяць карысныя бактэрыі. Эксперыментальна было вызначана, што колькасць бактэрый (у млн) залежыць ад нумара дня, у які праводзіцца эксперымент, наступным чынамм: . Вызначыце, колькі бактэрый вывелі за m дзён.
Этапы выканання задання.
I. Зыходныя даныяе: m (колькасць дзён).
II. Вынік: s (агульная колькасць бактэрый).
III. Алгарытм рашэння задачы.
1. Увод ліку m. 2. Для вылічэння агульнай колькасці бактэрый неабходна паслядоўна прыбаўляць колькасць бактэрый, выведзеных у бягучы дзень, да ўжо атрыманай колькасці бактэрый. Пачатковае значэнне сумы роўна 0. 3. Паколькі колькасць дзён загадзя вядомая, для вылічэння сумы можна выкарыстаць цыкл for. 4. Колькасць бактэрый у бягучы дзень будзем захоўваць у пераменнай а. Значэнне a залежыць ад значэння n — лічыльніка дзён. Пераменная n змяняецца ад 1 да m. 5. Вывад выніку s.
IV. Апісанне пераменных: m – int, s, a – double.
Прыклад 6.16. Напісаць праграму для вылічэння сумы, якая мае сваімі складаемымі элементы паслядоўнасц . Вылічэнні выконваць да таго часу, пакуль не знойдзецца складаемае, для якога правільная няроўнасць . Значэнне eps уводзіцца ( ).
Этапы выканання задання
I. Зыходныя даныя: eps (дакладнасць вылічэнняў).
II. Вынік: пераменная s (сума).
III. Алгарытм рашэння задачы.
1. Увод ліку eps. 2. Для вылічэння сумы неабходна паслядоўна прыбаўляць чарговае складаемае, якое задавальняе ўмову задачы, да ўжо атрыманай сумы.
2.1. Паколькі колькасць складаемых загадзя не вядомая, то для вылічэння сумы выкарыстаем цыкл do…while. 2.2. Пачатковае значэнне сумы s = 0. 2.3. Бягучае значэнне складаемага будзем захоўваць у пераменнай а. Значэнне a залежыць ад значэння n — лічыльніка складаемых у суме. Пераменная n будзе змяняцца на 1 да таго часу, пакуль выконваецца ўмова задачы. Пачатковае значэнне n = 0. 2.4. Асобна трэба атрымліваць 2n и n! Для гэтага завядзём пераменныя d (для захоўвання значэння 2n) і f (для захоўвання значэння n!). Пачатковыя значэнні пераменных: d = 1, f = 1. Для кожнага наступнага складаемага папярэдняе значэнне пераменнай d павялічваецца ў два разы, значэнне пераменнай f павялічваецца ў n раз.
3. Вывад вынік s.
IV. Апісанне пераменных: n – int, eps, a, s, d, f – double. |
Прыклад 6.15.
V. Праграма:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int m;
cout << "m = ";
cin >> m;
double s = 0;
for (int n = 1; n <= m; n++){
double x = 1. * n * n * n;
double a = x / (sqrt(x)- n + 1);
s += a;
}
cout << "s = " << s << endl;
return 0;
}
|
VI. Тэсціраванне


VII. Аналіз выніку. Для праверкі правільнасці выніку можна палічыць значэнне сумы на калькулятары:




Прыклад 6.16.
V. Праграма:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double eps, a;
cout << "eps = ";
cin >> eps;
int n = 0;
double s = 0;
double d = 1;
double f = 1;
do {
n++;
///вылічэнне фактарыяла
f *= n;
///узвядзенне 2 у ступень
d *= 2;
a =(n + d) / f;
s += a;
}
while (abs(a) >= eps);
cout << "summa= " << s << endl;
return 0;
}
|
VI. Тэсціраванне

VII. Аналіз выніку. Паколькі фактарыял з’яўляецца функцыяй, якая надзвычай хутка расце, то элементы паслядоўнасці спадаюць. Выпішам элементы:

Шосты элемент меншы за 0.1. Гэта апошняе складаемае ў суме. Сума першых шасці элементаў — ≈9.07.
Калі eps = 0.01, да сумы, атрыманай для eps = 0.1, будуць дабаўляцца складаемыя, меншыя за 0.1, якія нязначна зменяць значэнне сумы.
.
Розніца ў значэннях сумы — ≈0.03. Чым меншая дакладнасць, тым менш будуць адрознівацца сумы.

|