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

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

Войти
Регистрация
Восстановить пароль
 
Nady_Beauty
-38 / 0 / 0
Регистрация: 02.04.2012
Сообщений: 94
#1

Найти сумму ряда с точностью е, используя рекурсию - C++

31.10.2012, 17:04. Просмотров 1025. Ответов 10
Метки нет (Все метки)

Найти сумму ряда с точностью е , общий член которого равен a=(-1)^(n-1)/n^n.
Программу я сделала, но преподаватель просит изменить условие, то есть сделать без лог.переменной f. Как можно еще изменить?!! Спасибо.
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
#include "stdafx.h"
#include <stdio.h>
#include <math.h>
#include <iostream>
using namespace std;
int Pow(int t , int n); // метод возведения в степень. t-возведение в степень
int main()
{
setlocale(LC_ALL, "Russian");
double eps;
cout<<"Введите eps = "<<ends;
cin>>eps;
bool f = true;
double sum = 0;
double c;
int b;
for ( int i = 1; i <= 10 && f; i ++)
   {
     if ( i % 2 == 0)
     c=-1;
    else c=1;
    b=Pow(i,i);
    double res = c/b; 
    if (abs(res) >= eps)
            sum+=res;
      else f=false;
    }
cout<<"Сумма ряда = "<< sum<<endl;
return(0); 
}
int Pow(int t , int n) 
{
if (n==1) return t;
 
else return (t*Pow(t,n-1));
}
 Комментарий модератора 
Темы не дублируем
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.10.2012, 17:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Найти сумму ряда с точностью е, используя рекурсию (C++):

Найти сумму ряда с заданной точностью, если дан общий член ряда - C++
Найти сумму ряда с точностью Е=-4 (0.0001) общий член которого n=n*-n2 (n kvadrat)... Надо написать программу, т.е текст..на языке Си...

Найти сумму ряда с точностью до члена ряда - C++
Помогите пожалуйста с задачей , вот условие Найти сумму ряда с точностью до члена ряда, меньшего ε(0.0001) для заданного значения и...

Найти сумму ряда с точностью до члена ряда - C++
Найти сумму ряда с точностью до члена ряда, меньшего 0.0001 для заданного значения и сравнить эту сумму с функцией контроля. Для...

Найти сумму ряда с точностью е - C++
Задание: 3Найти сумму ряда с точностью е, общий член которого равен a(n) = ((-1)^(n-1))/n^n . Точность считается достигнутой, если...

Найти сумму ряда с точностью e - C++
Найти сумму ряда с точностью e=10-4, общий член которого

Найти сумму ряда с точностью - C++
Найти сумму ряда с точностью е=10-4,общий член которого {a}_{n}={10}^{n}/n!

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
31.10.2012, 17:10 #2
Nady_Beauty, это же не рекурсия
0
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
31.10.2012, 17:16 #3
I.M., pow рекурсивна, так как вызывает себя.
0
Thinker
Эксперт C++
4226 / 2200 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
31.10.2012, 17:17 #4
I.M., функция Pow() рекурсивная. Наверное, это было достаточно))

Nady_Beauty,
C++
1
2
3
4
5
6
7
8
9
for ( int i = 1; fabs(res) >= eps; i ++)
 {
     if ( i % 2 == 0)
       c=-1;
    else c=1;
    b=Pow(i,i);
    double res = c/b; 
    sum+=res;
}
но лучше все поменять))
0
I.M.
31.10.2012, 17:20
  #5

Не по теме:

Да, действительно, недоскролил решил, что по заданию предполагалось, что вычисление суммы должно быть рекурсивно

0
Catstail
Модератор
22615 / 10976 / 1779
Регистрация: 12.02.2012
Сообщений: 18,118
31.10.2012, 17:39 #6
Вот рекурсивное (дважды!) решение без лишних переменных:

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 <iostream.h>
#include <math.h>
 
int Pow(int t , int n) 
{
    if (n==1) 
        return t;
    else 
        return (t*Pow(t,n-1));
}
 
double sum(int n, double eps, double s)
{
    double q;
    
    if ((n % 2) == 0) 
        q=1;
    else
        q=-1;
 
    double a=q/(double) Pow(n,n);
 
    if (fabs(a) < eps)
        return s;
    else
        return sum(n+1,eps,s+a);
}
 
int main(int argc, char* argv[])
{
    double eps;
 
    cout << "eps=";
    cin >> eps;
    cout << sum(1,eps,0) << endl;
    return 0;
}
0
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
31.10.2012, 17:45 #7
Цитата Сообщение от Catstail Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
double sum(int n, double eps, double s)
{
   double q;
if ((n % 2) == 0) 
     q=1;
   else
     q=-1;
double a=q/(double) Pow(n,n);
if (fabs(a) < eps)
     return s;
   else
    return sum(n+1,eps,s+a);
}
Лишний параметр.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
double sum1(int n, double eps)
{
 double a=pow(-1.0, n-1)/pow(n, n);
 if (n==1)
 {
  return a;
 }
 return a+sum(n-1, eps);
}
double sum2(int n, double eps)
{
 double s=sum1(n, eps);
 if (abs(s)<eps)
 {
  return s;
 }
 return sum2(n+1, eps);
}
0
salam
163 / 144 / 12
Регистрация: 10.07.2012
Сообщений: 728
31.10.2012, 17:47 #8
не кашерно однако так в степень возводить... используйте алгоритм бинарного возведения в степень...
0
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
31.10.2012, 17:55 #9
И целиком, трижды рекурсивная прога:
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
49
50
51
52
53
54
#include <iostrem.h>
double pow(double a, int n)
{
 int n1, n2;
 if (n<0)
 {
  return 1.0/pow(a, -n);
 }
 if (n==0)
 {
  return 1;
 }
 if (n==1)
 {
  return a;
 }
 n1=n/2;
 n2=n-n1;
 return pow(a, n1)*pow(a, n2);
}
double abs(double x)
{
 if (x<0.0)
 {
  return -x;
 }
 return x;
}
double sum1(int n, double eps)
{
 double a=pow(-1.0, n-1)/pow(n, n);
 if (n==1)
 {
  return a;
 }
 return a+sum(n-1, eps);
}
double sum2(int n, double eps)
{
 double s=sum1(n, eps);
 if (abs(s)<eps)
 {
  return s;
 }
 return sum2(n+1, eps);
}
int main ()
{
 double eps;
 std::cout<<"eps=";
 std::cin>>eps;
 std::cout<<std::endl<<"sum="<<sum2(1, eps)<<std::endl;
 return 0;
}
0
Thinker
Эксперт C++
4226 / 2200 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
31.10.2012, 17:58 #10
компактный вариант
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<stdio.h>
#include<math.h>
#define EPS 0.0001
 
double Sum(double a, int n, double eps)
{
   return fabs(a) < eps ? a : a + Sum(1.0 / pow(n + 2, n + 2), n + 2, eps);
}
 
int main()
{
   printf("%f\n", Sum(1.0, 1, EPS) - Sum(1.0/4.0, 2, EPS));
   return 0;
}
0
Catstail
Модератор
22615 / 10976 / 1779
Регистрация: 12.02.2012
Сообщений: 18,118
01.11.2012, 11:16 #11
Цитата Сообщение от taras atavin Посмотреть сообщение
Лишний параметр.
- Гм... А у Вас - "лишняя" функция. Мой параметр (накапливающий) вовсе не лишний.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.11.2012, 11:16
Привет! Вот еще темы с ответами:

Найти сумму ряда с точностью E - C++
Найти сумму ряда с точностью E , общий член которого равен a(n)=(10^n)/(n!) Точность считается достигнутой, если следующий член...

Найти сумму ряда с точностью - C++
ПРога нужна на С++. Помогите плиииз, не могу разобраться в этих фактериалах. 1)Найти сумму ряда с точностью Е=10-3, общий член...

Найти сумму ряда с точностью е - C++
. Найти сумму ряда с точностью е=0,001, общий член которого: A n-ое=n!/(2n)! помогите

Найти сумму ряда с точностью - C++
ребят помогите написать задачу в с++ перепробовал все что можно..(( вот задание...7) Найти сумму ряда с точностью e=10-4, общий член...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
01.11.2012, 11:16
Ответ Создать тему
Опции темы

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