Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
СанСаныч1
1 / 1 / 0
Регистрация: 29.03.2010
Сообщений: 60
#1

Найти сумму ряда - C++

23.03.2011, 11:22. Просмотров 1386. Ответов 10
Метки нет (Все метки)

Прошу помощи с написанием программы на Си
s=(2/1!)+(4+6/2!)+(5+8+11/3!)+(6+10+14+18/4!)+...........n


Благодарю всех откликнувшихся на просьбу!!!!
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Байт
Эксперт C
 Аватар для Байт
15042 / 9444 / 1383
Регистрация: 24.12.2010
Сообщений: 17,476
23.03.2011, 12:46     Найти сумму ряда #2
Вот если б понять принцип построения членов ряда...
Можешь написать явную формулу зависимости n-члена от n ?
Или рекурсивную формулу для n-го члена?
Или словами внятно описать?
fasked
Эксперт C++
 Аватар для fasked
4929 / 2509 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
23.03.2011, 13:07     Найти сумму ряда #3
Цитата Сообщение от СанСаныч1 Посмотреть сообщение
4+6/2!
а здесь точно только 6/2! или всю сумму делить, то есть (4+6)/2! ?
СанСаныч1
1 / 1 / 0
Регистрация: 29.03.2010
Сообщений: 60
23.03.2011, 18:11  [ТС]     Найти сумму ряда #4
сори... не так написал...
конечно надо чтоб было так
S= 2/1!+(4+6)/2!+(5+8+11)/3!+(6+10+14+18)/4!+...../n!
я сам вот последовательность не сильно разобрал...
как я понял,тут первое число числителя=знаменатель +2,следущие число числителя =предыдущиму+знаменатель....как то вроде так...но на Языке что то реализовать не получается...
Kastaneda
Форумчанин
Эксперт С++
 Аватар для Kastaneda
4253 / 2785 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 1
Завершенные тесты: 1
23.03.2011, 20:22     Найти сумму ряда #5
S= 2/1!+(4+6)/2!+(5+8+11)/3!+(6+10+14+18)/4!+...../n!
Мне одному кажется, что здесь логика нарушенна? Должно быть:
S= 2/1!+(3+5)/2!+(4+7+10)/3!+(5+9+13+17)/4!+...../n!

Добавлено через 21 минуту
Хотя тут смотря как посмотреть, с другой стороны все правильно. Сразу не дошло)
vitaska
 Аватар для vitaska
83 / 83 / 2
Регистрация: 04.02.2010
Сообщений: 162
23.03.2011, 21:40     Найти сумму ряда #6
Цитата Сообщение от СанСаныч1 Посмотреть сообщение
Прошу помощи с написанием программы на Си
s=(2/1!)+(4+6/2!)+(5+8+11/3!)+(6+10+14+18/4!)+...........n
если бы по условию ряд начинался с (3/1!)+......, то ряд можо было бы представить в таком виде:
Миниатюры
Найти сумму ряда  
СанСаныч1
1 / 1 / 0
Регистрация: 29.03.2010
Сообщений: 60
24.03.2011, 02:11  [ТС]     Найти сумму ряда #7
не не, ряд написан правильно.... ну по крайней мере препод его таким задал.
я думаю что надо S0=присвоить 2/1!, а дальше уже цикл по вычислению суммы всего ряда
fasked
Эксперт C++
 Аватар для fasked
4929 / 2509 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
24.03.2011, 10:37     Найти сумму ряда #8
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
 
int main() {
        int i = 0, j = 0;       // счетчики
        int n = 10;             // предел
        int fact = 1;           // факториал
        int d = 0, k = 0;       // d: числитель n-члена ряда, k: вспомогательная переменная
        double s = 2;           // итоговое значение ряда (равен 2: значению первого члена ряда)
 
        // вычисления начинаются со второго члена ряда
        for (i = 2; i <= n; ++i) {
                // расчет значения факториала для n-члена ряда 
                fact += fact * (i - 1);
 
                // расчет числителя n-члена ряда
                d = k = 2 + i;
                for (j = 1; j < i; ++j)
                        d += (k += i);
                
                // сумма ряда
                s += (double) d / fact;
        }
 
        printf ("n = %d\ns = %e\n", n, s);
        return 0;
}
Результат вроде верный:
Код
s = (2/1!) + (4+6/2!) + (5+8+11/3!) + (6+10+14+18/4!) + ... + n

-------------------------------------------------------------
2 / 1 +
(10 / 2) +
(24 / 6) +
(48 / 24) +
(85 / 120) +
(138 / 720) +
(210 / 5040) +
(304 / 40320) +
(423 / 362880) +
(570 / 3628800) +

-------------------------------------------------------------
n = 10
s = 1.395053e+001
Видно что при n > 5 ряд фактически перестает расти.
СанСаныч1
1 / 1 / 0
Регистрация: 29.03.2010
Сообщений: 60
24.03.2011, 10:55  [ТС]     Найти сумму ряда #9
fasked прошу объяснить,если конечно не трудно...

Цитата Сообщение от fasked Посмотреть сообщение
d = k = 2 + i; как это по шагам получается(т.е. в конце d=2+i)?т.е. k & d будут одинаковы?
for (j = 1; j < i; ++j)
d += (k += i);и вот это тоже не совсем запись понятно....
// сумма ряда
s += (double) d / fact;
(double)d - в чем здесь заключается роль double


СПАСИБО!!!
fasked
Эксперт C++
 Аватар для fasked
4929 / 2509 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
24.03.2011, 11:24     Найти сумму ряда #10
Цитата Сообщение от СанСаныч1 Посмотреть сообщение
(double)d - в чем здесь заключается роль double
Если делить целое число на целое число (то есть int на int), то результатом будет тоже целое число, следовательно дробная часть отбросится. Чтобы этого избежать одно из чисел приводится к типу double, фактическое получается что double делится на int, в результате дробная часть сохраняется.
В двух словах, если этого не сделать, то результат будет всегда равен 13-ти ровно (при n > 4, когда n-член ряда стремится к 0, то есть меньше 1).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2011, 12:28     Найти сумму ряда
Еще ссылки по теме:

Найти сумму ряда C++
Найти сумму ряда C++
Найти сумму ряда C++
C++ Найти сумму ряда
C++ Найти сумму ряда

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
СанСаныч1
1 / 1 / 0
Регистрация: 29.03.2010
Сообщений: 60
24.03.2011, 12:28  [ТС]     Найти сумму ряда #11
огромное спасибо!!!

Добавлено через 35 минут
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
#include <math.h>
#include <conio.h>
int main()
 
{ 
    int j,r=0;
    int b=1;
    double s=2.0;
    int n,u=0;
    int i=0;
 printf("\n Vvedite n = ");
 scanf("%d",&n);
   for (i=2; i<=n; ++i) 
     {
      b*=i; 
      r=u=2+i; 
 
    for (j=1; j<i; ++j)
      r+=(u+=i);
      s+=(double)r/b;
     }
    printf ("\n r=%d",r);
    printf ("\n s=%0.3f",s);
    return (0);
    }
Yandex
Объявления
24.03.2011, 12:28     Найти сумму ряда
Ответ Создать тему
Опции темы

Текущее время: 00:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru