Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
2 / 1 / 0
Регистрация: 28.03.2010
Сообщений: 81
1

Используя функцию, написать программу вычисления суммы ряда

17.04.2010, 13:44. Показов 3030. Ответов 17
Метки нет (Все метки)

Используя функцию, написать программу вычисления суммы ряда s=s(1)+…+s(n), где s(n)=(-1)^n x^(2n-1)/(2n+1) с точностью до eps=0.001. В качестве параметров выбрать x

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>                                                             #include <stdio.h>
#include <math.h>
#include <conio.h>
double ABS(double s)
{return s<0 ? s*-1:s;
}
int main()
{
double x=0.0f, s=0.002f;
scanf("%f",&x);
for (int n=1; ABS(s)<0.003; n++)
s+=pow(-1.0, (double)n)*pow(x,(2.0*(double)n-1.0)/(2.0*(double)n+1.0));
printf("s=",s);
getch ();
return 0;
}
Добавлено через 1 минуту
подправьте что не так, дайте совет,
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.04.2010, 13:44
Ответы с готовыми решениями:

Написать функцию вычисления суммы ряда
Написать функцию вычисления суммы ряда s=s(1)+…+s(n), где s(n)=(-1)n x(2n-1)/(2n+1) с точностью...

Написать функцию вычисления суммы ряда s=s(1)+…+s(n)
Написать функцию вычисления суммы ряда s=s(1)+…+s(n), где s(n)=(-1)^n*(x^(2n-1))/(2n+1) с...

Написать функцию вычисления суммы ряда для заданного аргумента
Написать функцию вычисления суммы ряда для заданного аргумента с точностью 4 знака после запятой....

Написать функцию вычисления суммы ряда для заданного аргумента с точностью 4 знака после запятой
Добрый день друзья. Подскажите пожалуйста. Встретился в лабораторной работе с данной задачей, я в...

17
Эксперт С++
2334 / 1707 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
17.04.2010, 13:53 2
sopik, каким образом ты учел требования заданной точности?
0
2 / 1 / 0
Регистрация: 28.03.2010
Сообщений: 81
17.04.2010, 14:04  [ТС] 3
по условию eps=0.001
0
Автор FAQ
3683 / 960 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
17.04.2010, 21:40 4
sopik, зачем вам нужна самописная ABS функция? есть же стандартная fabs
0
2 / 1 / 0
Регистрация: 28.03.2010
Сообщений: 81
17.04.2010, 21:51  [ТС] 5
это что то изменит кардинально?
выдает ошибку domain error
0
Эксперт JavaЭксперт С++
8365 / 3586 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
18.04.2010, 00:51 6
C
1
2
3
4
double ABS(double s)
{
    return s < 0 ? -s : s;
}
0
2 / 1 / 0
Регистрация: 28.03.2010
Сообщений: 81
18.04.2010, 14:11  [ТС] 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
#include <stdio.h>                                             
#include <math.h>
#include <conio.h>
int main()
{
int sign, n;
double eps, sum, elem, x, x2;
eps=0.001;
x=0.1;
sign=1;
x2=x;
for(n=1; n++;)
{
elem=sign*x2/(2*n+1);
sum+=elem;
if(fabs(elem)<eps){break;}
sign=-sign;
x2*=x*x;
}
printf("sum=%.10f\n",sum);
getch();
return 0;
}
так работает тока не пойму правильно или нет? Посмотрите
0
Автор FAQ
3683 / 960 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
18.04.2010, 20:14 8
Цитата Сообщение от sopik Посмотреть сообщение
Используя функцию, написать программу вычисления суммы ряда s=s(1)+…+s(n), где s(n)=(-1)^n x^(2n-1)/(2n+1)
(2*n+1) я вижу. а где в коде выше (2n-1)?
1
2 / 1 / 0
Регистрация: 28.03.2010
Сообщений: 81
18.04.2010, 20:22  [ТС] 9
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>                                                             #include <stdio.h>
#include <math.h>
#include <conio.h>
int main()
{
int sign, n;
double eps, sum, elem, x;
eps=0.001;
x=0.1;
sign=1;
for(n=1; n++;)
{
elem=sign*pow(x,(2*n-1))/(2*n+1);
sum+=elem;
if(fabs(elem)<eps){break;}
sign=-sign;
}
printf("sum=%.10f\n",sum);
getch();
return 0;
}
Добавлено через 55 секунд
вот так работает тока не знаю правильно или нет? Как думаешь?
0
Автор FAQ
3683 / 960 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
18.04.2010, 21:03 10
sopik, вполне похоже на правду
1
2 / 1 / 0
Регистрация: 28.03.2010
Сообщений: 81
18.04.2010, 21:06  [ТС] 11
т.е. правильно?
0
Автор FAQ
3683 / 960 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
18.04.2010, 21:26 12
Если расчитывается
то да
Я вначале почему то подумал что степень это (2n-1)/(2n+1)
1
2 / 1 / 0
Регистрация: 28.03.2010
Сообщений: 81
18.04.2010, 22:08  [ТС] 13
нет x в степени(2n-1)
0
Эксперт JavaЭксперт С++
8365 / 3586 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
18.04.2010, 22:59 14
sopik, используйте редактор формул
0
2 / 1 / 0
Регистрация: 28.03.2010
Сообщений: 81
22.04.2010, 15:54  [ТС] 15
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
#include <stdio.h>
#include <math.h>
#include <conio.h>
double fabs(double sum)
{return sum<0 ? -sum:sum;}
int main()
{
clrscr();
int sign, n;
double eps, sum, elem, x;
eps=0.001;
x=0.5;
sign=1;
for(n=1; n++;)
 {
elem=sign*pow(x,(2*n-1))/(2*n+1);
sum+=elem;
if(fabs(elem)<eps){break;}
sign=-sign;
  }
printf("sum=%.10f\n",sum);
getch();
return 0;
}
Программа работает, преподавателя не устраивает вид записи функции, нужно переделать, а как не пойму мои варианты ее не устраивают. Подскажите как грамотно записать, используя функцию, вычисление суммы ряда.
0
Автор FAQ
3683 / 960 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
22.04.2010, 16:49 16
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
double Calc(double x, double eps){
   double sum = 0, elem = 0;
   int sign=1;
   for(int n=1; n++;)
   {
       elem=sign*pow(x,(2*n-1))/(2*n+1);
       sum+=elem;
       if(fabs(elem)<eps){break;}
       sign=-sign;
  }
return sum;
}
 
int main(){
   printf("sum=%.10f\n",Calc(0.5, 0.001));
getch();
return 0;
}
Ну если надо просто вынести это в функцию то в целом так. Ps. не компилил
1
Эксперт JavaЭксперт С++
8365 / 3586 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
22.04.2010, 17:40 17
Все время высчитывать степень нехорошо. могу предложить такой вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <cmath>
int main()
{
    int n, i = 2;
    double _x, x_, x, tmpX, sum;
    std::cout<<"n = ", std::cin>>n;
    std::cout<<"x = ", std::cin>>x;
    _x = x, x_ = 3, tmpX = -_x / x_, sum = tmpX;
    while(i < n)
    {
        _x *= x * x;
        x_ += 2;
        tmpX = _x / x_;
        if(fabs(tmpX) < 0.001)
            break;
        sum += (i & 1) ? tmpX : -tmpX;
        ++i;
    }
    std::cout<<"Sum = "<<sum;
    return 0;
}
Переделать под функцию, думаю, труда не составит
1
2 / 1 / 0
Регистрация: 28.03.2010
Сообщений: 81
22.04.2010, 18:38  [ТС] 18
insideone, M128K145 Спасибо
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.04.2010, 18:38

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Написать программу-функцию F(x,N) для вычисления суммы N слагаемых, используя while
Написать программу-функцию F(x,N) для вычисления суммы N слагаемых, используя цикл while...

Написать программу-функцию F(x,N) для вычисления суммы N слагаемых, используя цикл for
Написать программу-функцию F(x,N) для вычисления суммы N слагаемых, используя цикл for

Написать программу-функцию для вычисления суммы N слагаемых, используя цикл for
Написать программу-функцию F(x,N) для вычисления суммы N слагаемых, используя цикл for .

Написать программу и рекурсивную функцию для вычисления значения суммы бесконечного ряда с заданной точностью
Написать программу и рекурсивную функцию для вычисления значения суммы бесконечного ряда с заданной...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

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