Проверьте Правильность Написания (работы) Программы

203

New member
21.02.2012
2
0
#1
Проверьте правильность написания (работы) программы.
программа написана на C++ тема ссылки

Вот условие задачи.
Безымянный.JPG

Вот код.
C++:
#include <iostream>
using namespace std;
double PowerA(double x, double a, double eps)
{
double s=1,i=a*x,j=2;
int t;
while(abs(i)>eps)
{
s+=i;
i=i*(a-j-1)*x/j;
}
t=i;
return t;
}
int main()
{
setlocale(LC_ALL, "Russian");
double x,a,eps;
cout << "Введите x,a,eps\n";
cin >> x >> a >> eps;
if (abs(x)>=1 || a<=0 || eps <=0)
{
cout << "Неправильные данные!\nВыходим...\n";
system("pause");
return -1;
}
cout << PowerA(x,a,eps) << endl;
system("pause");
return 0;
}
Добавлено: Если программа работает неправильно если несложно то поправите пожалуйста. Если всё верно то при каких условиях она выполняется.
Заранее спасибо.
 

Вложения

203

New member
21.02.2012
2
0
#3
сори я не то копировал тема называется: Нестандартные функции
 
W

Whatka

#4
не верно работает
вот тест
(1-0.5)^2
то есть ввожу
0.5
2
0.25
должно быть 1+0.5*2 +((2*(2-1))/2)*0.25=2.25
а выдаёт 0
в функции ошибка
 

203

New member
21.02.2012
2
0
#5
А может тогда кто поможет сделать, чтобы работало нормально.
 

hosm

* so what *
18.05.2009
2 442
6
#6
t=i; - тут, скорее всего, надо s вместо i.
Остальное не проверяла.
 
W

Whatka

#7
у тебя не считает факториал и вычитание лишнее

вот
C++:
//
#include <iostream>
using namespace std;
double x,a,eps;
double PowerA()
{
double s=1,i=a*x;
int t(2),j(1);
while(abs(i)>eps)
{
s+=i;
i*=(a-j)*x/t;
j++;
t++;
}
return s;
}
int main()
{
setlocale(LC_ALL, "Rus");
cout<<"Введите x,a,eps\n";
cin>>x>>a>>eps;
if (abs(x)>=1||a<=0||eps<=0)
{
cout <<"Неправильные данные!\nВыходим...\n";
return 0;
}
cout<<PowerA()<<endl;
return 0;
}
//
 

hosm

* so what *
18.05.2009
2 442
6
#8
>у тебя не считает факториал и вычитание лишнее
хм, мне показалось, что там нормально - вроде s(n) через s(n-1) cчитается (где s() - это слагаемое суммы - ну, там есть в коде i=i*... ) , но формулу не проверяла. Может, там надо i=i*(a-j+1)*x/j ?
 
W

Whatka

#9
нет не правильно

считается рекурентным соотношением
то есть
i(слагаемое)=
i(предыдущее)*
x(степень у каждого слагаемого больше предыдущего на 1)*
(a-j)(где предыдущий был a-(j-1))* //j увеличивается на 1 для каждого следующего слагаемого
(t)^(-1)(где предыдущий был (t-1)! то есть t*(t-1)!=t!)//t увеличивается на 1 для каждого следующего слагаемого


а теперь посмотри где там каждый ход увеличивается j и t
(в его случае вообще факториал и обычное вычитание через одну!!!! переменную и+ эта переменная не менятся)
 

203

New member
21.02.2012
2
0
#11
У меня возникла новая проблема мне нужно сделать программу фото задачи внизу. Как я посмотрел функция там такая же что и в задаче которую я не мог сделать. Но тут уже стоит тема вызов по ссылке что это вообще такое может кто скажет как это делается. Заранее спасибо.
445913_m.jpg
 

Вложения

W

Whatka

#12
C++:
//
#include <iostream>
using namespace std;
void PowerA(double x,double a,double eps)
{
double s=1,i=a*x;
int t(2),j(1);
while(abs(i)>eps)
{
s+=i;
i*=(a-j)*x/t;
j++;
t++;
}
s+=i;
cout<<"Значение функции="<<s<<endl;
cout<<"Значение n="<<t<<endl;
cout<<"Значение последнего слагаемого="<<i<<endl;
}
int main()
{
setlocale(LC_ALL, "Rus");
double x,a,eps;
cout<<"Введите x,a,eps((1+x)^a):\n";
cin>>x>>a>>eps;
if (abs(x)>=1||a<=0||eps<=0)
{
cout <<"Неправильные данные!\nВыходим...\n";
return 0;
}
PowerA(x,a,eps);
return 0;
}
//
 

203

New member
21.02.2012
2
0
#13
Всё разобрался всем спасибо. (если кто успел прочитать де редактирование поста то я разобрался это равносильность)