Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите решить задачу по программирования на C++

Warseew_24 Ученик (171), на голосовании 4 месяца назад
Сделать визуальную программу для расчета заданных функций с помощью рядов Тейлора:
Голосование за лучший ответ
Татьяна Просветленный (36384) 5 месяцев назад
Создайте файл mainwindow.ui для визуального интерфейса.
Добавьте необходимые элементы интерфейса в mainwindow.ui, такие как поля для ввода чисел и кнопки для расчета.
mainwindow.ui
Скачать

Создайте файл mainwindow.h и mainwindow.cpp для обработки логики программы.
mainwindow.h:
Скачать

mainwindow.cpp:
Скачать

Этот код создает графическое приложение, где можно выбрать одну из шести функций, ввести значение x, количество членов ряда и (если нужно) значение α. Затем при нажатии на кнопку "Calculate" рассчитывается значение функции с помощью рядов Тейлора и отображается результат.
Не забудьте добавить зависимости для Qt и настроить проект перед сборкой.
Ксения Райт Гений (97316) 5 месяцев назад
Какую визуальную программу - Вы вообще про что?
Синус и косинус трудно будет реализовать для очень больших аргументов.
Ряд Маклорена для натурального логарифма у Вас неверный. Вот правильный ряд:
㏑(1+x) = ⅀(n=1;∞)(-1)ⁿ⁺¹xⁿ/n
При х=1 данный ряд сходится к ㏑2, но крайне медленно!
Кстати, где Вы эту картинку взяли - на calc ru? Вот же тоже идиоты - что ещё тут скажешь? Печатают всякую чушь!
Ряд для арктангенса при х=-1 расходится, а поэтому область его сходимости указана неправильно! Кроме того при х=1 данный ряд сходится к π/4, но крайне медленно!
Так что Вы хотели?
Вот как, например, реализуются функции для синуса, косинуса, натурального логарифма и арктангенса:
 #include  
#include
#include

using namespace std;
const double ε = 1e-17;
double q;

double Sin(double x)
{
double y = - x * x, p = x, s = x; q = 1.;
while (abs(p) > ε) s += (p *= y / ((q += 2.) * (q - 1.)));
return s;
}

double Cos(double x)
{
double y = - x * x, p = 1., s = p; q = 0.;
while (abs(p) > ε) s += (p *= y / ((q += 2.) * (q - 1.)));
return s;
}

double Ln(double x)
{
double y = - x, e = 1., s = 0., p = -1.; q = 0.;
while (abs(e) > ε) s += (e = (p *= y) / (q += 1));
return s;
}

double Arctg(double x)
{
double y = - x * x, e = 1., p = x, s = x, q = e;
while (abs(e) > ε) s += (e = (p *= y) / (q += 2.));
return s;
}

int main()
{
double x, y;
while (true)
{
cout << "x: ";
cin >> x;
y = Sin(x);
cout << "sin(x) = " << setprecision(15) << fixed << y
<< ", err = " << setprecision(5) << scientific << y - sin(x)
<< " (" << setprecision(0) << fixed << (q + 1.) / 2 << ')' << endl;
y = Cos(x);
cout << "cos(x) = " << setprecision(15) << fixed << y
<< ", err = " << setprecision(5) << scientific << y - cos(x)
<< " (" << setprecision(0) << fixed << (q + 1.) / 2 << ')' << endl;
y = Ln(x);
cout << "㏑(1+x) = " << setprecision(15) << fixed << y
<< ", err = " << setprecision(5) << scientific << y - log(1. + x)
<< " (" << setprecision(0) << fixed << q << ')' << endl;
y = Arctg(x);
cout << "arctg(x) = " << setprecision(15) << fixed << y
<< ", err = " << setprecision(5) << scientific << y - atan(x)
<< " (" << setprecision(0) << fixed << (q + 1.) / 2. << ')' << endl;
}
}
Если греческие литеры не поддерживаются, тогда ε лучше везде заменить на eps. Вместо abs можно fabs. В скобках - потребовавшееся количество взятых слагаемых для вычисления функций с точностью, близкой к машинной для вещественных чисел типа double, а перед этим - абсолютная точность расчёта по сравнению с функциями, вычисленными при помощи модуля cmath:
ТатьянаПросветленный (36384) 5 месяцев назад
Полный непонятный код для студента сразу видно. Уровень джуна на С++
Похожие вопросы