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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.03.2009, 19:44   #1
molodzo
Пользователь
 
Регистрация: 19.11.2007
Сообщений: 10
По умолчанию Помогите решить задачу...

Задача:

k изменяется от 0 до бесконечности ((4k+1)! / [(2k)!]^2) * x^2k = =1/2*[(1-4x)^(-3/2) + (1+4x)^(-3/2)]

X принадлежит интервалу [-1/4 ; 1/4)

Найти мин. k, которое будет удовлетворять условию:
abs(правая часть - левая часть) < 10^(-15)


Вот код(тока у меня не работает):

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

long double k,x2,x,p,p2,n,znam,znam1,znam2,p3,my_res,p4,p5,p6,p7,p8,sum1,sum2,ch,sravn;
long double factorial(long double);

main()
{
k=-1;
x2=pow(1/10,15);
do
{
      my_res=1;
      x=-0.25;
      k=k+1;
      p=4*k+1;
      ch=factorial(p);
      p2=2*k;
      znam=factorial(p2);
      znam1=znam*znam;

         do
         {
            x=x+x2;
            if (2*k>=0) p3=pow(x,2*k);
            else p3=(1/(pow(x,abs(2*k))));
            sum1=ch/znam1*p3;

            p4=1-4*x;
            p5=(1/(pow(p4,3/2)));
            p6=1+4*x;
            p7=(1/(pow(p6,3/2)));
            p8=p5+p7;
            sum2=0.5*p8;
            sravn=pow(1/10,15);
         }
         while ((x<=0.25) && (abs(sum1-sum2)>=sravn));

         if(abs(sum1-sum2)<sravn)
            {
               cout<<"Sum1="<<sum1;
               cout<<"Sum2="<<sum2;
               cout<<"K="<<k;
               getch();
               break;
            }
         else continue;
      }
while(abs(sum1-sum2)>=sravn);
getch();
}

long double factorial(long double n)
{
   if (n==1) {exit(1);}
   else
   {
      my_res=my_res*n;
      factorial(n-1);
   }
}
Помогите, пожалуйста, ее решить!
molodzo вне форума Ответить с цитированием
Старый 05.03.2009, 18:44   #2
Svetlag
Пользователь
 
Аватар для Svetlag
 
Регистрация: 24.02.2009
Сообщений: 85
По умолчанию

Мне не очень понятна задача.
Но факториал я бы считала так
Код:
long double factorial(const long double n)
{
 	if(n<0) return 0.0;
	if(n==1 || n==0) return 1.0;
	else return n*factorial(n-1);
}
Вместо
Код:
abs(sum1-sum2)
поставьте
Код:
fabs(sum1-sum2)
И еще мне кажется вы задаете слишком маленький шаг по x.

Последний раз редактировалось Svetlag; 05.03.2009 в 21:32.
Svetlag вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите решить задачу kriss123 Помощь студентам 4 18.02.2009 18:43
Помогите решить задачу Witaliy Паскаль, Turbo Pascal, PascalABC.NET 2 24.11.2008 18:21
помогите решить задачу sverhuVniz Паскаль, Turbo Pascal, PascalABC.NET 4 25.10.2008 22:17