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

Посчитать сумму - C++

Восстановить пароль Регистрация
 
OksanaKurb
0 / 0 / 1
Регистрация: 12.10.2012
Сообщений: 12
27.10.2012, 18:28     Посчитать сумму #1
Уже всю голову сломала никак не получается,помогите
Для заданного натурального k и действительного x подсчитать следующее выражение
Изображения
 
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OksanaKurb
0 / 0 / 1
Регистрация: 12.10.2012
Сообщений: 12
27.10.2012, 19:34  [ТС]     Посчитать сумму #2
Я вот что сделала,но что-то вовсе неправильно считает((
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<iostream>
using namespace std;
int main()
{int n;
float x,s=0,a=-x;
cout<<"x=";cin>>x;
cout<<"n=";cin>>n;
for(int i=0;i<=n;i++)
{       s+=a;
        a*=-x*x/(2*i*(2*i+1));
       
        
          cout<<s<<endl;}
cout<<"s="<<s<<endl;
system("pause");
return 0;}
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6162 / 2891 / 282
Регистрация: 04.12.2011
Сообщений: 7,691
Записей в блоге: 3
27.10.2012, 20:04     Посчитать сумму #3
Факториал лучше отдельно вычислить. Я не проверил, - посмотрите, что эта штука посчитает. Одно слагаемое считает вроде. Смотрю, - зря с С-библиотеками сделал. Перепишете?
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
#include <stdlib.h>
#include <Stdio.h>
#include <Math.h>
int fact(int a){
if(a==0||a==1)return 1;
return (a*fact(a-1));
}
int main(){
int n=0;
int nMax=100;
float x;
float sum=0;
printf_s("Vvedite kolichestvo slagaemih\n");
 scanf_s("%d",&n);
if(n>nMax||n<=0) n=nMax;
printf_s("\nVvedite x \n");
scanf_s("%f",&x);
int sign=1;
for(int i=0; i!=n; i++){
    sign=-sign;
sum+=sign* pow(x,2*i+1)/fact(2*i+1);
printf_s("%f",sum);
printf_s("\n");
}
printf_s("\nSumma ravna=\t");
printf_s("%f",sum);
printf_s("\nVvedite cifru");
int t;
scanf_s("%f",&t);
return 0;
}
isaak
101 / 38 / 9
Регистрация: 17.10.2010
Сообщений: 634
27.10.2012, 20:08     Посчитать сумму #4
C++
1
a*=-2*i*x/(2*i+1);
Так как
http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{2n} = \frac{{x}^{2n}}{2n}
http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{2n+1} = \frac{{x}^{2n+1}}{2n+1}
Отношение:
http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{{a}_{2n+1}}{{a}_{2n}}=\frac{2n}{2n+1}*x
Buildog
40 / 40 / 2
Регистрация: 29.04.2012
Сообщений: 185
27.10.2012, 20:18     Посчитать сумму #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
24
25
26
27
28
29
30
31
32
#include <iostream>
 
using namespace std;
 
int fact (int x)
{
    if (x<=1) 
    {
        return 1;
    }
    else return x*fact (x-1);
}
 
 
int main ()
{
    int k = 0;
    double SUMM = 0;
    double x = 0;
    cout << "Enter k=";
    cin >> k;
    cout << endl;
    cout << "Enter x=";
    cin >> x;
    for (int i = 0; i<=k; i++)
    {
        SUMM+=(pow(-1,i)*pow(x,2*i+1))/fact(2*i+1);
    }
    cout << SUMM;
    system ("pause");
    return 0;
}

Честно говоря, на правильность вычислений не проверял, но должен работать правильно
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
27.10.2012, 20:36     Посчитать сумму #6
Цитата Сообщение от OksanaKurb Посмотреть сообщение
Я вот что сделала,но что-то вовсе неправильно считает((
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<iostream>
using namespace std;
int main()
{int n;
float x,s=0,a=-x;
cout<<"x=";cin>>x;
cout<<"n=";cin>>n;
for(int i=0;i<=n;i++)
{ * * * s+=a;
* * * * a*=-x*x/(2*i*(2*i+1));
cout<<s<<endl;}
cout<<"s="<<s<<endl;
system("pause");
return 0;}
дело еще вот в этой строке
C++
1
float x,s=0,a=-x;
вы при инициализации а присваиваете пустоту потому что х ничего не присвоено =)
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6162 / 2891 / 282
Регистрация: 04.12.2011
Сообщений: 7,691
Записей в блоге: 3
27.10.2012, 21:26     Посчитать сумму #7
Не подумал, - удалил.

Добавлено через 44 минуты
Для рекуррентного подсчёта у меня получается:
http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{n-1} = \frac{(-1)^n{x}^{2(n-1)+1}}{(2(n-1)+1)!}=\frac{(-1)^n{x}^{2n-1}}{(2n-1)!}
http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{n} = \frac{(-1)^{n+1}{x}^{2n+1}}{(2n+1)!}
Отношение:
http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{{a}_{n}}{{a}_{n-1}}=-\frac{x^2}{2n(2n+1)}
то есть в цикле:
C++
1
sum+=-x*x*sum/(2*n*(2*n+1));
OksanaKurb
0 / 0 / 1
Регистрация: 12.10.2012
Сообщений: 12
27.10.2012, 21:38  [ТС]     Посчитать сумму #8
IGPIGP да это и у меня также вышло!но не работает зараза всё равно,около 50 задач таких сделала все работают эта осталась только((
isaak
101 / 38 / 9
Регистрация: 17.10.2010
Сообщений: 634
27.10.2012, 22:57     Посчитать сумму #9
Цитата Сообщение от IGPIGP Посмотреть сообщение
Не подумал, - удалил.

Добавлено через 44 минуты
Для рекуррентного подсчёта у меня получается:
http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{n-1} = \frac{(-1)^n{x}^{2(n-1)+1}}{(2(n-1)+1)!}=\frac{(-1)^n{x}^{2n-1}}{(2n-1)!}
http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{n} = \frac{(-1)^{n+1}{x}^{2n+1}}{(2n+1)!}
Отношение:
http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{{a}_{n}}{{a}_{n-1}}=-\frac{x^2}{2n(2n+1)}
то есть в цикле:
C++
1
sum+=-x*x*sum/(2*n*(2*n+1));
Извиняюсь у меня ошибочка вышла IGPIGP ваше соотношение верно, OksanaKurb попробуйте при инициализации a=1.
C++
1
float x,s=0,a=1;
Добавлено через 41 минуту
Вот еще один код, вроде бы все правильно работает.
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
#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*x/(2*n*(n + 1))
    )
    {
        sum = sum + an;
        n   = n   + 1;
    }
    return sum;
}
 
 
 
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  |";
        
    for(double x = xn; x <= xk; x += dx)
    {
         cout<<setprecision(4)<<setw(8)<<setfill(' ')<<x<<"|"
         <<setprecision(4)<<setw(8)<<setfill(' ')<<Sum(x,eps)<<"|";
    }
    system("pause");
    return 0;
}
Добавлено через 11 минут
Еще раз извиняюсь забыл 2-ку
C++
1
an *= - x*x/(2*n*(2*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
#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*x/(2*n*(2*n + 1))
    )
    {
        sum = sum + an;
        n   = n   + 1;
    }
    return sum;
}
 
 
 
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  |";
        
    for(double x = xn; x <= xk; x += dx)
    {
         cout<<setprecision(4)<<setw(8)<<setfill(' ')<<x<<"|"
       <<setprecision(4)<<setw(8)<<setfill(' ')<<Sum(x,eps)<<"|";
    }
    system("pause");
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.10.2012, 23:38     Посчитать сумму
Еще ссылки по теме:

Посчитать сумму ряда C++
Посчитать сумму C++

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

Или воспользуйтесь поиском по форуму:
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6162 / 2891 / 282
Регистрация: 04.12.2011
Сообщений: 7,691
Записей в блоге: 3
27.10.2012, 23:38     Посчитать сумму #10
Цитата Сообщение от OksanaKurb Посмотреть сообщение
IGPIGP да это и у меня также вышло!но не работает зараза всё равно,около 50 задач таких сделала все работают эта осталась только((
OksanaKurb, очень забавно сходится этот ряд. Посмотрите может это подойдет:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<iostream>
using namespace std;
int main()
{
    int n;
float x=0,s=0,a=0;
cout<<"x=";cin>>x;
cout<<"n=";cin>>n;
s=a=-x;
n++;
cout<<"S0= "<<s<<endl;
for(int i=1;i<n;i++)
{
    a*=-x*x/(2*i*(2*i+1));
cout<<"a("<<i<<")= "<<a<<endl;
    s+=a;
cout<<"s("<<i<<")= "<<s<<endl;
}
cout<<"s="<<s<<endl;
system("pause");
return 0;}
Yandex
Объявления
27.10.2012, 23:38     Посчитать сумму
Ответ Создать тему
Опции темы

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