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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.95
Anton12390
0 / 0 / 0
Регистрация: 15.04.2010
Сообщений: 40
02.03.2012, 10:30     Найти сумму ряда #1
Добрый день. Очень нужна помощь. Найти сумму ряда. В программировании не разбираюсь. Нужно в С++ сделать. Спасибо.
http://www.cyberforum.ru/cgi-bin/latex.cgi?\prod \limits_{k = 0}^{\infty } \left(1 + \frac{{x}^{k}}{k!} \right);\; |x| < 1<br />
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Roof
 Аватар для Roof
154 / 154 / 10
Регистрация: 03.11.2010
Сообщений: 393
02.03.2012, 14:30     Найти сумму ряда #2
Суммы ряда в формуле я не нашел.
Думаю надо вычислить произведение.
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
#include <iostream>
#include <cmath>
using namespace std;
 
unsigned int factorial( unsigned int n ) {
    if ( n <= 1 )
        return 1;
    return ( n * factorial( n - 1 ) );
}
 
double multi( double x, unsigned k ) {
    double result = 1 + pow( x, ( double ) k ) / factorial( k );
    if ( k == 0 )
        return 1;
    return result * multi( x, k - 1 );
}
 
int main() {
    double x;
    unsigned k;
    cout << "Введите x и k через пробел, |x| < 1" << endl;
    cin >> x >> k;
    cout << "Произведение ряда " << multi( x, k ) << endl;
    return 0;
}
Консоль
Введите x и k через пробел, |x| < 1
0.4 3
Произведение ряда 1.52813
-=ЮрА=-
02.03.2012, 16:42
  #3

Не по теме:

Цитата Сообщение от Anton12390 Посмотреть сообщение
Найти сумму ряда.
в задании стоит П - это значит нужно найти произведение элементов ряда, а пишите сумму, что находить надо?

-=ЮрА=-
Заблокирован
Автор FAQ
02.03.2012, 16:50     Найти сумму ряда #4
Roof, проверь алгоритм (посмотри скрин и сравни с твоим ответом)
Цитата Сообщение от Roof Посмотреть сообщение
Консоль
Введите x и k через пробел, |x| < 1
0.4 3
Произведение ряда 1.52813
Миниатюры
Найти сумму ряда  
-=ЮрА=-
Заблокирован
Автор FAQ
02.03.2012, 16:59     Найти сумму ряда #5
Вот простенько и правильно на Си
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
 
int main()
{
    double x = 0;
    long i, N   = 0;
    double fact = 1;
    double xk   = 1;
    double mult = (1 + xk/fact);//ГќГІГ® Г°Г*ГўГ*îñèëüГ*Г® 1 + 1 == 2 ;)
    printf("Enter x : ");scanf("%lf",&x);
    printf("Enter N : ");scanf( "%u",&N);
    for(i = 1; i <= N; i++)
    {
        fact = fact *  i;
        xk   = xk   *  x;
        mult = mult * (1 + xk/fact);
    }
    printf("Mult : %lf\n",mult);
    printf("Press any key to continue\n");
    getchar();
    getchar();
    return 0;
}
Миниатюры
Найти сумму ряда  
-=ЮрА=-
Заблокирован
Автор FAQ
02.03.2012, 17:09     Найти сумму ряда #6
Проведя небольшие исследования с кодом - пришёл к выводу что пределом данного произведения ряда является 3.059795538543
Код и скрин прилагаю
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()
{
    double x = 0;
    long i, N   = 0;
    double fact = 1;
    double xk   = 1;
    double mult = (1 + xk/fact);//ГќГІГ® Г°Г*ГўГ*îñèëüГ*Г® 1 + 1 == 2 ;)
    while(1)
    {
        printf("Enter x : ");scanf("%lf",&x);
        printf("Enter N : ");scanf( "%u",&N);
        fact = 1;
        xk   = 1;
        mult = (1 + xk/fact);
        for(i = 1; i <= N; i++)
        {
            fact = fact *  i;
            xk   = xk   *  x;
            mult = mult * (1 + xk/fact);
        }
        printf("Mult : %.12f\n",mult);
    }
    return 0;
}
Миниатюры
Найти сумму ряда  
NEO*
14 / 14 / 1
Регистрация: 02.11.2011
Сообщений: 22
02.03.2012, 17:44     Найти сумму ряда #7
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
#include <cmath>
 
using namespace std;
 
int fact(int);
 
int main()
 {
     double s; double x; int i; int n;
 
     cin>>x;
     if (abs(x)>1)
     {
     cout<<"error variable";
     return 0;
     }
 
     else
     {
cin>>n; //количество членов в ряду
 
s=2; // нулевой множитель в ряду
 for(i=1;i<n;i++)
 s=s*(1+(double)pow(x,i)/fact(i));
 
cout<<s;
     }
return 0;
 }
 
 int fact(int i)
 
 {
     int f=1;
     int k=1;
 
        if (i==0) return 1;
 
        if (i!=0)
{
     for(k=1;k<=i;k++)
     f=f*k;
}
     return f;
 }
-=ЮрА=-
02.03.2012, 17:50
  #8

Не по теме:

NEO*, введи 1000 элементов и понаблюдай за крахом своего алгоритма...
Находить факториал на каждой итерации - верх нерациональности!

Roof
 Аватар для Roof
154 / 154 / 10
Регистрация: 03.11.2010
Сообщений: 393
02.03.2012, 21:03     Найти сумму ряда #9
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Roof, проверь алгоритм (посмотри скрин и сравни с твоим ответом)
Да, -=ЮрА=-, согласен, я потерял единичку, вследствие чего результат работы функции оказался неверным. Спасибо за подсказку.
В моем варианте нужно исправить функцию:
C++
1
2
3
4
5
6
double multi( double x, unsigned k ) {
    if ( k == 0 )
        return 2.0;
    double result = 1 + pow( x, ( double ) k ) / factorial( k );
    return result * multi( x, k - 1 );
}
-=ЮрА=-
Заблокирован
Автор FAQ
02.03.2012, 22:33     Найти сумму ряда #10
Цитата Сообщение от Roof Посмотреть сообщение
double multi( double x, unsigned k ) {
* * * * if ( k == 0 )
* * * * * * * * return 2.0;
* * * * double result = 1 + pow( x, ( double ) k ) / factorial( k );
* * * * return result * multi( x, k - 1 );
}
- поставь 1000 чу в элементах и посмотри как обломится алгоритм на факториале 1000.
Ну ладно можем тип поправить какой нибудь long long long ... - но ты хоть думал что программа будет производить в n! раз больше операций нежели простое домножение???
Говорю же нерационально вот так считать!
Цитата Сообщение от Roof Посмотреть сообщение
1 + pow( x, ( double ) k ) / factorial( k );
Добавлено через 7 минут
Roof, подумай на досуге что быстрее
цикл
C++
1
2
for(i = 1; i <= N; i++)
   fact *= i;
или же цикл
C++
1
2
for(i = 1; i <= N; i++)
   fact = factorial(i);
- который хоть с реурсией хоть без эквивалентен по трудоёмкости этому
C
1
2
3
4
5
6
7
for(i = 1; i <= N; i++)
{
     factorial = 1;
     for(j = 1; j<= N; j++)
           factorial *= j;
     fact = factorial;
}
- Зачем делать трудоёмкость N! там где можно обойтись трудоёмкостью N???
Roof
 Аватар для Roof
154 / 154 / 10
Регистрация: 03.11.2010
Сообщений: 393
02.03.2012, 23:18     Найти сумму ряда #11
-=ЮрА=-, Нерациональность в своем варианте увидел, ведь действительно можно просто домножать в каждой итерации, за пример спасибо, учту это.
-=ЮрА=-
Заблокирован
Автор FAQ
02.03.2012, 23:51     Найти сумму ряда #12
Цитата Сообщение от Roof Посмотреть сообщение
-=ЮрА=-, Нерациональность в своем варианте увидел, ведь действительно можно просто домножать в каждой итерации, за пример спасибо, учту это.
- я сам в своё время находил факториал на каждой итерации и в степень возводил, однажды мне тоже обратили внимание на это и с тех пор я кардинально пересмотрел свои взгляды на итерационные процессы с участием факториала и степени, что позволило писать более качественный и производительный код. Надеюсь ты теперь сам сможешь экспертно отвечать пользователям по вопросу факториала со степенью в итерационных процессах

Не по теме:

Не сочти за наглось или попытку навязать что-либо прочти
http://www.cyberforum.ru/faq/thread4...ml#post2431657
Там и функции и комплексные числа и ряды и ещё много разных задач, на днях доведу его до конца!

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.03.2012, 02:22     Найти сумму ряда
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Roof
03.03.2012, 02:22     Найти сумму ряда
  #13

Не по теме:

адекватные советы наглостью и навязыванием назвать нельзя, а твою тему по этой ссылке уже видел, но пока не дошел до освоения. но в закладках уже лежит

Yandex
Объявления
03.03.2012, 02:22     Найти сумму ряда
Ответ Создать тему
Опции темы

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