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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.09.2012, 08:31   #1
sanchoflat
Пользователь
 
Регистрация: 31.10.2011
Сообщений: 23
По умолчанию Итерационный цикл

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


Разработать алгоритм и составить программу вычисления значений суммы S заданного ряда при различных значениях аргумента Х: во внутреннем цикле для фиксированного значения Х поочередно суммировать члены ряда, пока их абсолютная величина превышает заданную точность eps. Вычисление очередного член ряда осуществлять по рекуррентной формуле. Во внешнем цикле аргумент Х изменяется от 0,5 до 0,75 с шагом 0,05.
Вычисление значения суммы S и значения выражения Y оформить в виде функций.




По идеи просто проходить по циклу for и суммировать члены ряда до тех пор, пока они не превышают eps, но это немного неправильно и сказали делать так:
сначала нахожу общий множитель делением n+1 члена на n, потом тупик.
по идеи нужно в моем цикле вызывать эту функцию, и в ней же считать предыдущую сумму * на общий член.

Цитата:
double control( double a, double x)
{
double sum ;
sum = (x - sin(x))/ a;
return sum;
}


double iter( double x,double a, double n) // по идеи функция для подсчета
{
double q;
q = x/6 * a / ((2n+2)(2n+3));
return q;
}


int main()
{
double e,a;
cout<<"vvedite pogresnost E: ";
cin>>e;
while ( e <= 0 )
{
cout << "vvedite E > 0: ";
cin>>e;
}

cout<< "X kontrol symma" << endl;

for ( double x=0.5; x<=0.75; x+=0.05)
{
a=x*x;
double n;
n=0;

cout<<x;
cout<<" " << control(a,x);
cout<<" "<< iter(x,a,n)<<endl; // тут вызываем функцию

n=n+1;

}

getch();
}

буду рад просто подсказке, как осуществить поиск
спасибо
sanchoflat вне форума Ответить с цитированием
Старый 18.09.2012, 13:11   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Нуууу....

Первое: в Вашей программе я не обнаружил функции вычисления факториала (как вычислять - если не знаете, можно погуглить, там элементарно)
Второе: функция подсчета, по-моему, ничего общего не имеет с приведенным рисункозаданием
Третье: переменная n целочисленная и объявляется не в том месте - на каждой итерации она у Вас обнуляется
Четвертое:

Цитата:
но это немного неправильно и сказали делать так:
сначала нахожу общий множитель делением n+1 члена на n, потом тупик.
Что, вот так и сказали: "тупик"? Должны же были алгоритм какой-то дать
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 18.09.2012 в 13:26.
Sciv вне форума Ответить с цитированием
Старый 18.09.2012, 13:27   #3
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

По третьему пункту отбой, я ступил, все там правильно...
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 18.09.2012, 14:07   #4
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Код:
double iter( double x,double sum, int n, double e) // по идеи функция для подсчета
{
double q=pow(-1,n-1)*pow(x,2*n-1)/fact(2*n+1); //fact - это гипотетическая функция вычисления факториала
if fabs(q)>eps iter(x,sum,n+1);
sum=sum+q;
return sum;
}
В основной функции пишите:

Код:
int main()
{
double e,a;
cout<<"vvedite pogresnost E: ";
cin>>e;
while ( e <= 0 )
{
cout << "vvedite E > 0: ";
cin>>e;
}

cout<< "X kontrol symma" << endl;

for ( double x=0.5; x<=0.75; x+=0.05)
{
a=x*x;
int n=1;
double sum=0;

cout<<x;
cout<<" " << control(a,x);
cout<<" "<< iter(x,sum,n,e)<<endl; // тут вызываем функцию

n=n+1;

}
Вот как- то так. С++ под рукой нет, проверил в паскале - вроде работает
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 18.09.2012, 16:46   #5
sanchoflat
Пользователь
 
Регистрация: 31.10.2011
Сообщений: 23
По умолчанию

задача заключается в том, чтобы посчитать сумму ряда не посредством заданной формулы, а вычислить общий множитель ряда и умножать каждый раз предыдущее значение на этот множитель. Переписал немного свою, попробовал вашу, вроде результат сходится, однако почему- то, значение функции iter отличается от значения функции control примерно на 0.001.
Что может не так?

PHP код:
double iter (double xdouble edouble obs)
{
    
double q;
    
double first x/6;
    
q=first;
    

    while ( 
obs e)
    {
        
q*obs;
    }
    return 
q;
}

int main()
{
    
double e,a,obs;

    
cout<<"vvedite pogresnost E: ";

    
cin>>e;
    while ( 
<= )
    {
        
cout << "vvedite E > 0:   ";
        
cin>>e;
    }

    
cout<< "X     kontrol      symma" << endl;
    
int n;

    for ( 
double x=0.5x<=0.75x+=0.05)
    {
        
a=x*x;
        
n=0;
        
obs = (-a) / ((2*n+2)*(2*n+3));
        
cout<<x;

        
cout<<"   "  << control(a,x);
        
cout<<"   " <<  iter(x,e,obs)<<endl;
        
n+=1;

    }


    
getch();

sanchoflat вне форума Ответить с цитированием
Старый 18.09.2012, 16:53   #6
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Они и не должны совпадать настолько точно - это погрешность: контрол вычисляет функцию прямой подстановкой икса, а итерация - сумму ряда с заданной погрешностью.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 18.09.2012, 16:57   #7
sanchoflat
Пользователь
 
Регистрация: 31.10.2011
Сообщений: 23
По умолчанию

то есть и ваш и мой варианты правильны?
sanchoflat вне форума Ответить с цитированием
Старый 18.09.2012, 21:00   #8
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Насчет своего не знаю - я же написал, что проверял его в Паскакале. Но там работал правильно, и если я нигде не ошибся, конвертируя его в синтаксис С++, значит правильно решает.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Итерационный цикл Camelot_2012 Паскаль, Turbo Pascal, PascalABC.NET 1 22.12.2011 21:18
Pascal итерационный метод Tent Помощь студентам 1 20.12.2011 18:50
итерационный метод phasha Microsoft Office Excel 4 14.11.2011 13:05
Цикл с предусловием. ( цикл while) Цикл с постусловием. (цикл repeat ... until) Mr.User Помощь студентам 9 23.11.2007 01:34