C/C++

Помогите написать программу C++

В14
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
double fact(int n) {
return n == 0? 1 : n * fact(n - 1);
}
int main() {
cout << "x: ";
double x;
cin >> x;
cout << "k: ";
unsigned k;
cin >> k;
auto sum = 0.0;
const auto ln3 = log(3);
for (auto n = 0; n <= k; ++n) sum += pow(x - 1, n) * pow(ln3, n) / fact(n);
auto ctrl = pow(3, x - 1);
cout.setf(ios::fixed);
cout << "s(" << setprecision(1) << x << ") = " << setprecision(15) << sum << '\n';
cout << "y(" << setprecision(1) << x << ") = " << setprecision(15) << ctrl << '\n';
system("pause > nul");
}
Василий Зеленый
Василий Зеленый
99 736
Лучший ответ
А что, ещё разве не научился как всё это делается? Странно, давно ведь, вроде, пора́ - задания все какие-то однотипные. А у Коли опять эта его галиматья из совершенно ненужных здесь степеней и факториалов - это уже́ даже не смешно: тоже вот ведь совершенно ничему не учится!.
Код внизу табулирует функцию правильно - безо всяких идиотских pow и fact при вычислениях, только я не помню - функцию надо табулировать с задаваемым шагом? А он какой? Внизу заданы пределы интервала [a;b] и количество равномерных подынтервалов n, так что шаг получается h=(b-a)/n. А если не надо вычислять абсолютную ошибку вычисленной функцией по сравнению с 3^(x-1), тогда всё лишнее можно просто убрать:
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{
double p, s, x, y, a = 0.2, b = 0.8, h; int i, j, k = 100, n;
cout << "n = ?\b"; cin >> n; h = (b - a) / n;
for (i = 0; i <= n; i++)
{
x = a + i * h; y = (x - 1.) * log(3.); p = s = 1.;
for (j = 1; j <= k; j++) { p *= y / j; s += p; }
cout << setprecision(3) << fixed << setw(5)
<< x << setprecision(16) << setw(24) << s
<< setw (24) << s - pow(3., x - 1.) << endl;
}
system("pause > nul");
}