Top.Mail.Ru
Ответы

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

Сделать визуальную программу для расчета заданных функций с помощью рядов Тейлора:

По дате
По Рейтингу
Аватар пользователя
Высший разум

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

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
 #include <cmath> 
#include <iomanip> 
#include <iostream> 
 
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:

Аватар пользователя
Просветленный

Создайте файл mainwindow.ui для визуального интерфейса.
Добавьте необходимые элементы интерфейса в mainwindow.ui, такие как поля для ввода чисел и кнопки для расчета.
mainwindow.ui
Скачать

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

mainwindow.cpp:
Скачать

Этот код создает графическое приложение, где можно выбрать одну из шести функций, ввести значение x, количество членов ряда и (если нужно) значение α. Затем при нажатии на кнопку "Calculate" рассчитывается значение функции с помощью рядов Тейлора и отображается результат.
Не забудьте добавить зависимости для Qt и настроить проект перед сборкой.