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

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

Войти
Регистрация
Восстановить пароль
 
isaak
102 / 39 / 9
Регистрация: 17.10.2010
Сообщений: 656
#1

Вычисление ряда - C++

21.08.2012, 00:36. Просмотров 638. Ответов 9
Метки нет (Все метки)

Всем доброго время суток. Нужно написать программу для вычисления ряда:
http://www.cyberforum.ru/cgi-bin/latex.cgi?1 + 2*x + 3*{x}^{2} + 4*{x}^{3} + ... = \sum_{n=0}^{infinity}(n + 1)*{x}^{n}=\frac{1}{{(1-x)}^{2}}
Аргумент x (x по модулю меньше 1) вводится с клавиатуры пользователем, а граница ряда определяется как константа. Вот код, но он не совсем правильный, не могу понять в чем ошибка:
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
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <iostream>
using namespace std;
const int N = 1000;
double slagaemoe(double slad_pred,int n, double x);
double SumObsch(double x);
double SumObsch(double x)
{
double Sum = 1, slag=1,slad_next;
int n;
 for ( x >  -1 && x < 1;; ++n)
{
slag=slagaemoe(slag,x,n);
        Sum+=slag;
   
    }
    return Sum;
  }
double slagaemoe(double slag_pred,int n, double x)
{  
return  slag_pred*1.0 / pow((1-x), 2.0);
}
int main()
{
    setlocale( LC_ALL,"Russian" );
    //int n;
    double x;
    /*cout<<"Enter n:";
    cin>>n;*/
    cout<<"Enter х:";
    cin>>x;
    cout<<"Сумма ряда равна:"<<SumObsch(x);
    system("pause");
    return 0;
}
Заранее огромное спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.08.2012, 00:36     Вычисление ряда
Посмотрите здесь:

Вычисление ряда - C++
Есть ряд, который является разложение формулы (см. приложение). Есть такая вот программа: #include &lt;iostream&gt; using std::cout; ...

Вычисление ряда - C++
Всем доброго время суток. Я новичок в C++ нужно написать программу для вычисления ряда: 1 + 2x + 3x2 + 4x3 +… = ∑(n + 1)xn = 1/(1-x)2 ...

Вычисление суммы ряда - C++
не могу написать функцию, просто не понимаю ряды, а времени для их изучения нет, дайте идею или кусок кода.

Вычисление произведения ряда - C++
Подскажите пожалуйста способ для подсчёта произведения ряда S = \prod_{k = 0}^{\propto }\left(1 - \frac{4x^2}{\left(2k + 1 \right)^2 \pi...

Вычисление суммы ряда - C++
Суммы жду помощи.

Вычисление суммы ряда. - C++
Помогите, пожалйста!!! Вычислить сумму бесконечного ряда Y=(fabs)ak, где а=-0,1(аk-1+аk+1) при k=2,3,4... Вычисления окончить при...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CEBEP
105 / 105 / 9
Регистрация: 21.03.2010
Сообщений: 437
21.08.2012, 01:16     Вычисление ряда #2
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
const int N = 1000;
double slagaemoe(int n, double x)
{  
    return  (n + 1.0) * pow(x, n);
}
double SumObsch(double x)
{
    double Sum = 0.0;
    for (int n = 0; n != N; ++n)
    {
        Sum += slagaemoe(n,x);
    }
    return Sum;
}
как-то так, разьве нет?
isaak
102 / 39 / 9
Регистрация: 17.10.2010
Сообщений: 656
21.08.2012, 01:49  [ТС]     Вычисление ряда #3
Спасибо огромное за ответ как сделать, чтобы выполнялось условие x по модулю меньше 1? заранее огромное спасибо.
CEBEP
105 / 105 / 9
Регистрация: 21.03.2010
Сообщений: 437
21.08.2012, 02:14     Вычисление ряда #4
ну используй if сразу после места где производится ввод... ненадо этого делать в for - он предназначен для организации цыкла
isaak
102 / 39 / 9
Регистрация: 17.10.2010
Сообщений: 656
21.08.2012, 11:49  [ТС]     Вычисление ряда #5
Вот что то надумал, посмотрите пожалуйста вроде бы правильно?
C++
1
2
3
4
5
6
7
8
9
10
11
12
int main()
{
    setlocale( LC_ALL,"Russian" );
    double x;
    cout<<"Enter х:";
    cin>>x;
    if ( x > -1 && x < 1 )
    cout<<"Сумма ряда равна:"<<SumObsch(x);
    else cout << "Error!\n";
    system("pause");
    return 0;
}
Заранее огромное спасибо.
-=ЮрА=-
Заблокирован
Автор FAQ
21.08.2012, 12:55     Вычисление ряда #6
Итератор
http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{n} = (n + 1)*{x}^{n}
http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{n + 1} = (n + 2)*{x}^{n + 1}
http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{{a}_{n + 1}}{{a}_{n}} = \frac{(n + 2)*{x}^{n + 1}}{(n + 1)*{x}^{n}} = x*\frac{(n + 2)}{n + 1}
-=ЮрА=-
21.08.2012, 13:23
  #7

Не по теме:

isaak, а формула разложения точно правильная???
Я на всякий случай цепляю код, но разность результатов суммы и проверки скорее говорит не об ошибке в моих вычилсениях а об ошибке в формуле. Можно посмотреть в каком источнике она указана, т.к. у меня для неё совсем другое разложение

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
47
48
#include <cmath>
#include <iomanip>
#include <iostream>
using namespace std;
 
double Sum(double x, double eps)
{
    double sum = 0;
    for
    (
        double an = 1, n = 0; 
        eps < fabs(an); 
        an *= x*(n + 2)/(n + 1)
    )
    {
        sum = sum + an;
        n   = n   + 1;
    }
    return sum;
}
 
double Check(double x)
{
    return 1/pow((1 - x),2.0);
}
 
int main()
{
    double xn, xk, dx, eps;
    cout<<"xn = ";cin>>xn; 
    cout<<"xk = ";cin>>xk; 
    cout<<"dx = ";cin>>dx;
    cout<<"eps= ";cin>>eps;
    cout<<setw(9)<<setfill(' ')<<"  x  |"
        <<setw(9)<<setfill(' ')<<"Sum  |"
        <<setw(9)<<setfill(' ')<<"Check\n";
    for(double x = xn; x <= xk; x += dx)
    {
        
        if(x == 1)
            cout<<"x not from ODZ of function\n";
        else
            cout<<setprecision(4)<<setw(8)<<setfill(' ')<<x<<"|"
                <<setprecision(4)<<setw(8)<<setfill(' ')<<Sum(x,eps)<<"|"
                <<setprecision(4)<<setw(8)<<setfill(' ')<<Check(x)<<endl;
    }
    return 0;
}

isaak
102 / 39 / 9
Регистрация: 17.10.2010
Сообщений: 656
21.08.2012, 15:20  [ТС]     Вычисление ряда #8
-=ЮрА=- спасибо огромное за ответ задача взята из Васильева А.Н. "Самоучитель С++ с примерами и задачами" здесь: http://www.twirpx.com/file/408500/ ее можно вроде бы скачать. Посмотри пожалуйста если не сложно заранее огромное спасибо!!!!

Добавлено через 52 минуты
-=ЮрА=- как сделать чтобы выполнилось условие x по модулю меньше 1???? Чтобы при вводе -1 и 1 выскакивало сообщение "x не входит в область допустимых значений"???? Я ради експеримента ввел xn = -1 и xk = 1 ни кого сообщения не было программа тупо зависла? Заранее огромное спасибо!!!!
-=ЮрА=-
21.08.2012, 15:22
  #9

Не по теме:

isaak, хорошо я сейчас буду разбираться, возможно в чём то просчитался...

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

Вычисление суммы ряда - C++
Вычислить \sum_{i=1}^{\propto }i^2 пока S&lt;50 с помощью цикла while

Вычисление суммы ряда - C++
Новичок Всем доброго время суток, я пока только изучаю C++, поэтому если будут ошибки прошу меня сторог не судить, нужно вычислить ряды:...

Вычисление суммы ряда - C++
Составить программу вычисления значений функции в точках хi  , хi = х0 + iх, i = 0,1, …, воспользовавшись формулами разложения...

Вычисление суммы ряда - C++
Считает вроде бы неплохо, но нету близости значений. Есть предположение что не верно. Программа вычисление значения суммы ряда. S(x) = 1...


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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
21.08.2012, 16:02     Вычисление ряда #10
isaak, я разобрался, ошибка была в цикле, верней в очерёдности домножения на итератор и инкрементированию n

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
for
* * (
* * * * double an = 1, n = 0;
* * * * eps < fabs(an);
* * * * an *= x*(n + 2)/(n + 1)
* * )
* * {
* * * * sum = sum + an;
* * * * n * = n * + 1;
* * }
- строки отмеченные красным следует поменять местами. После алгоритм заработает как надо
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
47
48
#include <cmath>
#include <iomanip>
#include <iostream>
using namespace std;
 
double Sum(double x, double eps)
{
    double sum = 0;
    for
    (
        double an = 1, n = 0; 
        eps < fabs(an); 
        n   = n   + 1
    )
    {
        sum = sum + an;
        an *= x*(n + 2)/(n + 1);
    }
    return sum;
}
 
double Check(double x)
{
    return 1/pow((1 - x),2.0);
}
 
int main()
{
    double xn, xk, dx, eps;
    cout<<"xn = ";cin>>xn; 
    cout<<"xk = ";cin>>xk; 
    cout<<"dx = ";cin>>dx;
    cout<<"eps= ";cin>>eps;
    cout<<setw(9)<<setfill(' ')<<"  x  |"
        <<setw(9)<<setfill(' ')<<"Sum  |"
        <<setw(9)<<setfill(' ')<<"Check\n";
    for(double x = xn; x <= xk; x += dx)
    {
        
        if(x == 1)
            cout<<"x not from ODZ of function\n";
        else
            cout<<setprecision(4)<<setw(8)<<setfill(' ')<<x<<"|"
                <<setprecision(4)<<setw(8)<<setfill(' ')<<Sum(x,eps)<<"|"
                <<setprecision(4)<<setw(8)<<setfill(' ')<<Check(x)<<endl;
    }
    return 0;
}
Касательно
Цитата Сообщение от isaak Посмотреть сообщение
Чтобы при вводе -1 и 1 выскакивало сообщение "x не входит в область допустимых значений"????
- ввод чисел по модулю равных либо больших единицы концептуально запрещён применимостью самой формулы разложения (см второй скрин). Так что вот эту строку cout<<"x not from ODZ of function\n"; вообще можно исключить

Не по теме:

От себя:Для начинающего ссылка на тот ресурс просто подарок свыше, очень хорошая книга, написано просто и понятно - самое оно для человека на этапе становления как программиста

Миниатюры
Вычисление ряда   Вычисление ряда  
Yandex
Объявления
21.08.2012, 16:02     Вычисление ряда
Ответ Создать тему
Опции темы

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