§ 6. Использование основных алгоритмических конструкций для решения задач

6.4. Нахождение суммы элементов числовой последовательности

Пример 6.15. В секретной лаборатории выводят полезные бактерии. Экспериментально было установлено, что количество бактерий (в млн) завит от номера дня, в который проводится эксперимент, следующим образом: «math style=¨font-family:Arial¨ xmlns=¨http://www.w3.org/1998/Math/MathML¨»«mstyle mathsize=¨16px¨»«mrow»«msub»«mi»a«/mi»«mi»n«/mi»«/msub»«mo»§#160;«/mo»«mo»=«/mo»«mfrac»«msup»«mi»n«/mi»«mn»3«/mn»«/msup»«msqrt»«msup»«mi»n«/mi»«mn»3«/mn»«/msup»«mo»§#160;«/mo»«mo»-«/mo»«mo»§#160;«/mo»«mi»n«/mi»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«mn»1«/mn»«/msqrt»«/mfrac»«/mrow»«/mstyle»«/math». Определите, сколько бактерий вывели за 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. Написать программу для вычисления суммы, имеющей своими слагаемыми элементы последовательности «math style=¨font-family:Arial¨ xmlns=¨http://www.w3.org/1998/Math/MathML¨»«mstyle mathsize=¨16px¨»«mrow»«msub»«mi»a«/mi»«mi»n«/mi»«/msub»«mo»§#160;«/mo»«mo»=«/mo»«mo»§#160;«/mo»«mfrac»«mrow»«mi»n«/mi»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«msup»«mn»2«/mn»«mi»n«/mi»«/msup»«/mrow»«mrow»«mi»n«/mi»«mo»!«/mo»«/mrow»«/mfrac»«/mrow»«/mstyle»«/math». Вычисления производить до тех пор, пока не найдется слагаемое, для которого верно неравенство «math style=¨font-family:Arial¨ xmlns=¨http://www.w3.org/1998/Math/MathML¨»«mstyle mathsize=¨16px¨»«mrow»«mfenced open=¨|¨ close=¨|¨»«msub»«mi»a«/mi»«mi»n«/mi»«/msub»«/mfenced»«mo»§#160;«/mo»«mo»§#60;«/mo»«mo»§#160;«/mo»«mi»e«/mi»«mi»p«/mi»«mi»s«/mi»«/mrow»«/mstyle»«/math». Значение eps вводится («math style=¨font-family:Arial¨ xmlns=¨http://www.w3.org/1998/Math/MathML¨»«mstyle mathsize=¨16px¨»«mrow»«mn»0«/mn»«mo»§#160;«/mo»«mo»§#60;«/mo»«mo»§#160;«/mo»«mi»e«/mi»«mi»p«/mi»«mi»s«/mi»«mo»§#160;«/mo»«mo»§#60;«/mo»«mo»§#160;«/mo»«mn»1«/mn»«/mrow»«/mstyle»«/math»).

Этапы выполнения задания

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. Анализ результата. Для проверки правильности результата можно посчитать значение суммы на калькуляторе:

«math style=¨font-family:Arial¨ xmlns=¨http://www.w3.org/1998/Math/MathML¨»«mstyle mathsize=¨14px¨»«mrow»«msub»«mi»a«/mi»«mn mathvariant=¨italic¨»1«/mn»«/msub»«mo»§#160;«/mo»«mo»=«/mo»«mo»§#160;«/mo»«mn»1«/mn»«mo»;«/mo»«/mrow»«/mstyle»«/math»

«math style=¨font-family:Arial¨ xmlns=¨http://www.w3.org/1998/Math/MathML¨»«mstyle mathsize=¨14px¨»«msub»«mi»a«/mi»«mn»2«/mn»«/msub»«mo»§#160;«/mo»«mo»=«/mo»«mo»§#160;«/mo»«mfrac»«msup»«mn»2«/mn»«mn»3«/mn»«/msup»«mrow»«msqrt»«mn»8«/mn»«/msqrt»«mo»§#160;«/mo»«mo»-«/mo»«mo»§#160;«/mo»«mn»2«/mn»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«mn»1«/mn»«/mrow»«/mfrac»«mo»§#8776;«/mo»«mn»4«/mn»«mo».«/mo»«mn»38«/mn»«mo»;«/mo»«/mstyle»«/math»

«math style=¨font-family:Arial¨ xmlns=¨http://www.w3.org/1998/Math/MathML¨»«mstyle mathsize=¨14px¨»«msub»«mi»a«/mi»«mn»3«/mn»«/msub»«mo»§#160;«/mo»«mo»=«/mo»«mo»§#160;«/mo»«mfrac»«msup»«mn»3«/mn»«mn»3«/mn»«/msup»«mrow»«msqrt»«mn»27«/mn»«/msqrt»«mo»§#160;«/mo»«mo»-«/mo»«mo»§#160;«/mo»«mn»3«/mn»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«mn»1«/mn»«/mrow»«/mfrac»«mo»§#8776;«/mo»«mo»§#160;«/mo»«mn»8«/mn»«mo».«/mo»«mn»44«/mn»«mo»,«/mo»«/mstyle»«/math»

«math style=¨font-family:Arial¨ xmlns=¨http://www.w3.org/1998/Math/MathML¨»«mstyle mathsize=¨14px¨»«mi»S«/mi»«mo»§#160;«/mo»«mo»§#8776;«/mo»«mo»§#160;«/mo»«mn»13«/mn»«mo».«/mo»«mn»82«/mn»«mo».«/mo»«/mstyle»«/math»

Пример 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 =(+ d) / f;

    s += a;

  }

  while (abs(a) >= eps);

  cout << "summa= " << s << endl;

  return 0;

}

VI. Тестирование

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

«math style=¨font-family:Arial¨ xmlns=¨http://www.w3.org/1998/Math/MathML¨»«mstyle mathsize=¨14px¨»«msub»«mi»a«/mi»«mn»1«/mn»«/msub»«mo»§#160;«/mo»«mo»=«/mo»«mo»§#160;«/mo»«mfrac»«mrow»«mn»1«/mn»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«mn»2«/mn»«/mrow»«mn»1«/mn»«/mfrac»«mo»§#160;«/mo»«mo»=«/mo»«mo»§#160;«/mo»«mn»3«/mn»«mo»;«/mo»«mo»§#160;«/mo»«mo»§#160;«/mo»«mo»§#160;«/mo»«mo»§#160;«/mo»«mo»§#160;«/mo»«msub»«mi»a«/mi»«mn»2«/mn»«/msub»«mo»§#160;«/mo»«mo»=«/mo»«mo»§#160;«/mo»«mfrac»«mrow»«mn»2«/mn»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«msup»«mn»2«/mn»«mn»3«/mn»«/msup»«/mrow»«mrow»«mn»2«/mn»«mo»!«/mo»«/mrow»«/mfrac»«mo»§#160;«/mo»«mo»=«/mo»«mo»§#160;«/mo»«mn»3«/mn»«mo»;«/mo»«mspace linebreak=¨newline¨/»«msub»«mi»a«/mi»«mn»3«/mn»«/msub»«mo»§#160;«/mo»«mo»=«/mo»«mo»§#160;«/mo»«mfrac»«mrow»«mn»3«/mn»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«msup»«mn»2«/mn»«mn»3«/mn»«/msup»«/mrow»«mrow»«mn»3«/mn»«mo»!«/mo»«/mrow»«/mfrac»«mo»§#160;«/mo»«mo»=«/mo»«mfrac»«mn»11«/mn»«mn»6«/mn»«/mfrac»«mo»§#160;«/mo»«mo»§#8776;«/mo»«mo»§#160;«/mo»«mn»1«/mn»«mo»,«/mo»«mn»83«/mn»«mo»;«/mo»«mspace linebreak=¨newline¨/»«msub»«mi»a«/mi»«mn»4«/mn»«/msub»«mo»§#160;«/mo»«mo»=«/mo»«mo»§#160;«/mo»«mfrac»«mrow»«mn»4«/mn»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«msup»«mn»2«/mn»«mn»4«/mn»«/msup»«/mrow»«mrow»«mn»4«/mn»«mo»!«/mo»«/mrow»«/mfrac»«mo»§#160;«/mo»«mo»=«/mo»«mfrac»«mn»20«/mn»«mn»24«/mn»«/mfrac»«mo»§#160;«/mo»«mo»§#8776;«/mo»«mo»§#160;«/mo»«mn»0«/mn»«mo»,«/mo»«mn»83«/mn»«mo»;«/mo»«mspace linebreak=¨newline¨/»«msub»«mi»a«/mi»«mn»5«/mn»«/msub»«mo»§#160;«/mo»«mo»=«/mo»«mo»§#160;«/mo»«mfrac»«mrow»«mn»5«/mn»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«msup»«mn»2«/mn»«mn»5«/mn»«/msup»«/mrow»«mrow»«mn»5«/mn»«mo»!«/mo»«/mrow»«/mfrac»«mo»§#160;«/mo»«mo»=«/mo»«mfrac»«mn»37«/mn»«mn»120«/mn»«/mfrac»«mo»§#160;«/mo»«mo»§#8776;«/mo»«mo»§#160;«/mo»«mn»0«/mn»«mo»,«/mo»«mn»31«/mn»«mo»;«/mo»«mspace linebreak=¨newline¨/»«msub»«mi»a«/mi»«mn»6«/mn»«/msub»«mo»§#160;«/mo»«mo»=«/mo»«mo»§#160;«/mo»«mfrac»«mrow»«mn»6«/mn»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«msup»«mn»2«/mn»«mn»6«/mn»«/msup»«/mrow»«mrow»«mn»6«/mn»«mo»!«/mo»«/mrow»«/mfrac»«mo»§#160;«/mo»«mo»=«/mo»«mfrac»«mn»70«/mn»«mn»720«/mn»«/mfrac»«mo»§#160;«/mo»«mo»§#8776;«/mo»«mo»§#160;«/mo»«mn»0«/mn»«mo»,«/mo»«mn»097«/mn»«mo».«/mo»«/mstyle»«/math»

Шестой элемент меньше 0.1. Это последнее слагаемое в сумме. Сумма первых шести элементов — ≈9.07.

Если eps = 0.01, то к сумме, полученной для eps = 0.1, будут добавляться слагаемые, которые меньше 0.1, которые незначительно изменят значение суммы.

.

Разница в значениях суммы  ≈0.03. Чем меньше точность, тем меньше будут отличаться суммы.