Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.10.2015, 00:24   #61
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

В числителе вообще-то x^(2*i-1)
и можно рекуррентность использовать:

f(0)=1
f(1)=-x/5/sqrt(2)
f(i)=-f(i-1)*x^2/5/sqrt(i/(i+1)) где i=2,3,..,n
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 25.10.2015, 00:55   #62
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

вроде бы все так поправил, но почему-то не работает

Код:

#include <iostream>
#include <math.h>

using namespace std;

// вторым номером указывается количество дробей в ряду...
double recursion(int x,int i)
{


    if(i==0) return 0;

    if(i==1) return 1;
    if(i==2) return (-x)/(5*(sqrt(2)));


    float chislitel=pow(x,(2*i-1)-2 ); // stepen=3,5,7,...
    float znaminatel =pow(1.0*5,i-1)*sqrt(i);


    float a = chislitel / znaminatel ;



       if (i % 2)
        return a + recursion(x,i - 1);
        else
         return -a + recursion(x,i - 1);

}

int main()
{
    cout<<"ITOG: "<<recursion(5,5)+1;
    return 0;
}
ребят, понял косяк в моем коде...

он считает от обратного, т.е. должен так:

1-0,707+2,886-12,5+55,901, а получается почему-то так:

55,901-12,5+2,886-0,707106+1

Ребят, помогите исправить, пожалуйста

Код:

#include <iostream>
#include <math.h>

using namespace std;

// вторым номером указывается количество дробей в ряду...
double recursion(int x,int i)
{


    if(i==0) return 0;

    if(i==1) return 1;
    if(i==2) return (-x)/(5*(sqrt(2)));


    float chislitel=pow(x,(2*i-1)-2 ); // stepen=3,5,7,...
    float znaminatel =pow(1.0*5,i-1)*sqrt(i);


    float a = chislitel / znaminatel ;



       if (i % 2)
        return a + recursion(x,i - 1);
        else
         return -a + recursion(x,i - 1);

}

int main()
{
    cout<<"ITOG: "<<recursion(5,5)+1;
    return 0;
}
from dark to light)

Последний раз редактировалось Stilet; 25.10.2015 в 10:04.
Алексей_2012 вне форума Ответить с цитированием
Старый 25.10.2015, 05:41   #63
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Дак проблема решена?
Разобрался с рекурсией?
Можешь перечислить что осталось непонятно по теме после чтения статьи, которую я предлагал (если читал, конечно)?
rrrFer вне форума Ответить с цитированием
Старый 01.11.2015, 19:14   #64
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

С рекурсией разобрался, проблема решена...а вот еще вопрос, код работает, но возможно ли упростить?

Код:
#include <iostream>
#include <math.h>

using namespace std;


//факториал
int f(int N)
{
    if (N == 1)   return 1;
    return f(N-1)*N;
}

//основная рекурсия
double recursion(int N)
{
    if (N==0) return 0;
    if (N==1) return 3;

    double chislitel =(pow(3.0,N)*f(N));
    double znamenatel =pow(N,N);
    double a = chislitel/znamenatel;

    cout<<a<<endl;

    return a+recursion(N-1);
}



int main()
{
    cout<<"Itog: "<<recursion(5);
    return 0;
}
Изображения
Тип файла: jpg WUTSVaMvbVc.jpg (118.0 Кб, 139 просмотров)
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 01.11.2015, 19:22   #65
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Можно, обратив внимание, что между членами ряда рекуррентная зависимость. Используя её не нужно каждый раз в степень возводить и факториал считать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 01.11.2015, 19:28   #66
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,316
По умолчанию

Код:
#include <iostream>
#include <math.h>

using namespace std;

double rec(int N, double& ch)
{
    if (N <= 0) return 0;
    if (N == 1) {
        ch = 3;
        return 3;
    }
    double sum = rec(N - 1, ch);
    ch *= 3 * N;
    double zn = pow(N, N);
    double a = ch / zn;
    cout << a << endl;
    return sum + a;
}

double recursion(int N)
{
    double tmp;
    return rec(N, tmp);
}

int main()
{
    cout << "Itog: " << recursion(5);
    return 0;
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 12.12.2015, 02:35   #67
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Ребят, у меня не получается решить задание Б, и вообще в своем подходе я сомневаюсь, помогите , пожалуйста, почему-то выводятся одни нули.

Код:
#include <iostream>
#include <math.h>

using namespace std;

int iteration=0;

float f(float x,int n)
{
    float a=pow(x,((2.0*n)+1))/(2.0*n+1);
    if((a<0.00001)||(x<=0.14)||(n<=0)) return 0;

    cout<<a<<endl;

    iteration++;
    if (n%2)
        return a+f(x-0.1,n-1); else
        return -a+f(x-0.1,n-1);

}

int main()
{
    float result=f(0.5,40);
    cout<<"Itog: "<<result<<endl<<"Iteration: "<<
          iteration<<endl<<"Arctg: "<<atan(result);
    return 0;
}
Изображения
Тип файла: jpg Безымянный.jpg (9.3 Кб, 137 просмотров)
Тип файла: jpg XqvbmiAMIu0.jpg (54.6 Кб, 137 просмотров)
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 12.12.2015, 12:47   #68
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Ребят, есть идеи?)
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 13.12.2015, 05:02   #69
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

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

Код:
#include <iostream>
#include <math.h>

using namespace std;

int iteration=0;

float f(float x,int n)
{
    int exponent = (2.0*n)+1;
    float a=pow(x,exponent)/exponent;

    if((a<0.00001)||(x<=0.14)||(n<=0)) return 0;

    iteration++;
    if (n%2)
        return f(x-0.01,n-1)+a; else
        return f(x-0.01,n-1)-a;

}



int main()
{
    float result=f(0.5,40);
    cout<<"Itog: "<<result<<endl<<"Iteration: "<<
          iteration<<endl<<"Arctg: "<<atan(result);
    return 0;
}

Вообще в методичке приводили такой код как пример (скрин)
Изображения
Тип файла: jpg код.jpg (39.1 Кб, 126 просмотров)
from dark to light)

Последний раз редактировалось Stilet; 13.12.2015 в 14:14.
Алексей_2012 вне форума Ответить с цитированием
Старый 13.12.2015, 06:09   #70
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Ребят, вот попробовал так, но как найти предыдущее S(n-1) заново высчитывать?

Код:
#include <iostream>
#include <math.h>


using std::cout;
using std::endl;

int main ()
{

    double expon=0,s=0;


    for (double x=0.14;x<=0.5;x+=0.1)
    {
        for (int n=1;n<=40;n++)
        {

            expon=(2*n)+1;


            if (n%2==0)
                s+=pow(x,expon)/expon;
            else
                s-=pow(x,expon)/expon;

            if(s<0.00001) break;

        }

        cout<<"x = "<<x<<endl<<"y(x) = "<<atan(x)<<endl<<"s = "<<s<<endl<<endl;



    }
    cout<<"The End!)";
    return 0;
}
from dark to light)

Последний раз редактировалось Stilet; 13.12.2015 в 14:14.
Алексей_2012 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
рекурсия Ника-Вероника Паскаль, Turbo Pascal, PascalABC.NET 6 23.03.2012 21:43
Рекурсия unbanned Паскаль, Turbo Pascal, PascalABC.NET 7 19.01.2012 11:25
Рекурсия dusya9992 Паскаль, Turbo Pascal, PascalABC.NET 4 29.08.2010 14:14
Рекурсия Solnze2 Паскаль, Turbo Pascal, PascalABC.NET 0 09.06.2010 09:28
Рекурсия Shadows_Behind Помощь студентам 6 26.05.2010 15:07