#include <iostream>       //id=240242103
#include <cmath>
#include <iomanip>
using namespace std;
 
double horner(double coeff[], int n, double x) {
    double result = coeff[n];
    for (int i = n - 1; i >= 0; i--)
        result = result * x + coeff[i];
    return result;
}
 
double horner_derivative(double coeff[], int n, double x) {
    double result = n * coeff[n];
    for (int i = n - 1; i >= 1; i--)
        result = result * x + i * coeff[i];
    return result;
}
 
int main() {
    int degree;
    cout << "ENTER THE TOTAL NO. OF POWER:::: ";
    cin >> degree;
 
    double coeff[degree + 1];
    for (int i = 0; i <= degree; i++) {
        cout << "x^" << i << "::";
        cin >> coeff[i];
    }
 
    cout << "THE POLYNOMIAL IS ::: ";
    for (int i = degree; i >= 0; i--) {
        if (coeff[i] >= 0 && i != degree) cout << "+";
        cout << coeff[i] << "x^" << i << " ";
    }
    cout << endl;
 
    double x0;
    cout << "INITIAL X1 ------ >";
    cin >> x0;
 
    double E = 1e-6; // stopping criterion
    double x1, f0, f1, Ea;
    int iter = 0;
 
    cout << "**************************************\n";
    cout << "ITERATION  X      FX      F'X      Ea(%)\n";
    cout << "**************************************\n";
 
    do {
        f0 = horner(coeff, degree, x0);
        f1 = horner_derivative(coeff, degree, x0);
        x1 = x0 - f0 / f1;
 
        if (iter == 0)
            Ea = 0;
        else
            Ea = fabs((x1 - x0) / x1) * 100;
 
        iter++;
        cout << iter << "\t" << x1 << "\t" << f0 << "\t" << f1 << "\t" << Ea << endl;
 
        x0 = x1;
 
    } while (Ea > E);
 
    cout << "**************************************\n";
    cout << "THE ROOT OF EQUATION IS " << fixed << setprecision(6) << x1 << endl;
 
    return 0;
}