Пример 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. Чем меньше точность, тем меньше будут отличаться суммы.

|