• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы 203
  • Дата начала
2

203

Проверьте правильность написания (работы) программы.
программа написана на 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;
}

Добавлено: Если программа работает неправильно если несложно то поправите пожалуйста. Если всё верно то при каких условиях она выполняется.
Заранее спасибо.
 
W

Whatka

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

Whatka

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

вот
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;
}
//
 
H

hosm

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

Whatka

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

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


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

203

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

Whatka

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;
}
//
 
2

203

Всё разобрался всем спасибо. (если кто успел прочитать де редактирование поста то я разобрался это равносильность)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!