D2580. Сходимость ряда

Задача. Пользуясь признаками сравнения, Даламбера или Коши, исследовать сходимость ряда: [latex]\frac{1!}{1}+\frac{2!}{2^2}+\frac{3!}{3^3}+\ldots+\frac{n!}{n^n}+\ldots[/latex]

Входные данные

[latex]n[/latex] — количество взятых членов ряда.

Выходные данные

[latex]sum[/latex] — сумма.

Тесты

Входные данные Выходные данные
1 Сумма: 1
Числитель: 1
Знаменатель: 1
3 Сумма: 1.72222
Числитель: 6
Знаменатель: 9
20 Сумма: 1.87985
Числитель: 2.4329e+18
Знаменатель: 5.24288e+24

Код на C++

Код на Java

Решение

Используем цикл [latex]for[/latex]: высчитываем [latex]i[/latex]-тый слагаемый, и добавляем его в сумму. В цикле высчитываем числитель, добавляем в сумму [latex]i[/latex]-тый слагаемый и домножаем числитель [latex]i[/latex]-того слагаемого на значение счётчика.
Воспользуемся веб-приложением и посчитаем сумму ряда.

Ссылки

Условие задачи (стр.251)
Решение задачи на сайте Ideone.com (C++)
Решение задачи на сайте Ideone.com (Java)
Сходимости ряда

Related Images:

8 thoughts on “D2580. Сходимость ряда

  1. — Пожалуйста, перечитайте внимательно свой текст после слова «Решение». Проанализируйте. Я пытался это сделать некоторое время и не нашёл в нём никакого смысла. Скорее всего с ним что-то не так.
    — Вас не смущает текст, который выдает компилятор: prog.cpp:9:12: error: expected ‘;’ before ‘!’ token q=n!/n^n;
    Он как бы намекает на отсутствие в С++ встроенных операторов для вычисления факториала. Нужно вспомнить (или найти в конспекте), как мы решали подобные задачи. Помните, как мы искали частное двух соседних членов ряда, «ругали» функцию pow() и т.п.?
    — Вас не смущает, что программа никогда не закончит работу?
    — Где тесты?

  2. Хорошо, что Вы занялись доказательством сходимости ряда. Но я этого не требовал. Давайте я скопирую сюда условие задач этого типа, чтобы Вы не искали на сайте?

    Задачи этого раздела требуют вычисления частных сумм некоторых сходящихся рядов. Сами ряды берутся из задачника Б.П.Демидовича… Вполне достаточно будет суммировать члены ряда, пока не будет достигнута заданная точность [latex]\varepsilon.[/latex] Интересно понаблюдать сколько членов ряда придётся просуммировать для достижения той или иной точности.
    Для вычисления точного значения суммы ряда рекомендую воспользоваться ресурсом WolframAlpha.

  3. Давайте, я Вам немного помогу?

    1. Вот, что у Вас должно выйти в пределе.
    2. Опишу, что делает Ваша программа:
      Вводит некоторое число:
      cin >> n;
      Вычисляет числитель для n-го слагаемого
      for (int i=1; i<=n; i++) {        fact=fact*i;     }
      Вычисляет знаменатель n-го слагаемого
      for (int j=1; j<=m; j++) {         s=s*m;    }
      Зачем-то много раз вычисляет одно и тоже n-е слагаемое
      for (int k=1; k<=n; k++) {         q = fact/s;     }
      Печатает n-е слагаемое
      cout << q << endl;
    3. Нет желания посмотреть, как другие студенты пытаются решать такие задачи? Или найти в ideone.com, как мы это делали в классе?
    4. Чуть забегу вперед и обращу Ваше внимание на полезный факт. Вы вычислили отношение предыдущего члена ряда к последующему. Оказалось, что факториал сократился. Значит можно при вычислении числителя очередного члена ряда просто домножать числитель предыдущего на [latex]n.[/latex]
    • Спасибо за Ваше время. Буду следовать Вашему совету.

    • Пожалуйста, проверьте, учла все Ваши замечания.

    • Тестовую печать вставляют в середину вычислений, а не в конце. Сейчас Вы распечатали накопленную сумму, знаменатель последнего слагаемого и числитель следующего.

  4. Я зачту работу, но приведу код, который я надеялся увидеть. он тоже не идеален, но я сделал минимум переделок в Вашем:

Добавить комментарий