Консультация № 175672
27.12.2009, 19:18
35.00 руб.
0 2 2
Вечер добрый! Помогите, пожалуйста, написать такую программу:

Составить и протестировать функцию для вычисления:



Спасибо большое!

Обсуждение

Неизвестный
27.12.2009, 20:05
общий
это ответ
Здравствуйте, MrSpencer.
Можете воспользоваться следующим кодом. По хорошему, надо бы еще проверку на n>m, но думаю в данной ситуации это не обязательно.

Приложение:
#include <iostream.h>
#include <conio.h>
#include <math.h>

//Функция для вычисления факториала
double factorial(int x)
{

int i=1;
double fac=1;
if(x==0) return 1;
while (i<=x)
{
fac*=i;
i++;
}
return fac;
}

//Вычисление функции
double func(int x, int n, int m)
{
double sum=0;
int i;
for(i=m; i<=n;i++)
sum+=pow(x,2*i)/factorial(2*i);
return sum;
}

int main()
{
int x,n,m;
clrscr();
cout<<"x=";
cin>>x;
cout<<"n=";
cin>>n;
cout<<"m=";
cin>>m;
cout<<"f(x,n,m)="<<func(x,n,m);
getch();
}
Неизвестный
27.12.2009, 20:16
общий
это ответ
Здравствуйте, MrSpencer.
Программа. C++. Проверял MS VS 2008.
Код:
#include <locale>
#include <iostream>
#include <stdexcept>

using namespace std;

// Требуемая функция.
double f(double x,unsigned short n,unsigned short m)
{
if(m>n)
{
throw invalid_argument("Параметр m не может быть больше n");
}
// Вычисления будем производить по рекуррентной формуле
// U(x,i+1)=F(U(x,i),i)=U(x,i)*x*x/((2*i+1)*(2*i+2))
// квадрат x
const double x2=x*x;
// curr - U(x,i)-текущий элемент последовательности
double curr=1.0;
unsigned int t=0;
// Пропустим элементы до i=m
while(m--)
{
--n;
curr*=x2/(t+1)/(t+2);
t+=2;
}
double result=curr;
// Дальше вычисляем рекуррентно
while(n--)
{
result+=curr*=x2/(t+1)/(t+2);
t+=2;
}
return result;
}

// Ф-я для оформления вывода при тестировании
void test(double x,unsigned short n,unsigned short m)
{
cout<<"f("<<x<<","<<n<<","<<m<<")=";
try
{
cout<<f(x,n,m);
}
catch(invalid_argument& ex)
{
cout<<ex.what();
}
cout<<endl;
}

int main()
{
locale::global(locale(""));
test(-5,4,5);
test(-5,0,0);
test(-5,1,0);
test(-5,3,3);
test(-5,3,2);
test(10,18,11);
system("PAUSE");
return 0;
}

Вывод программы:
Код:
f(-5,4,5)=Параметр m не может быть больше n
f(-5,0,0)=1
f(-5,1,0)=13.5
f(-5,3,3)=21.7014
f(-5,3,2)=47.7431
f(10,18,11)=10.7935
Форма ответа