Dostałem zadanie na studiach napisania programiku zamieniający wielomian interpolacyjny, postaci [b]a0 + a1(x-x0) + a2(x-x0)(x-x1) + ... an(x-x0)(x-x1)(x-x2)...(x-x[n-1])[/b] na wielomian newtona - [b]bnxn + b[n-1]x</sup>(n-1) + ... + b1*x + b0[/b].
Udało mi się napisać programik dla wielomianów stopnia n=4, ale to za mało.
Moglibyście mi pomóc, z góry dziękuje wszystkim za jakiekolwiek wskazówki

Oto kod mojego dzieła:


#include <iostream> //biblioteka standartowa
#include <fstream> //biblioteka odpowiedzialna za zapis do pliku

    //funkcje:
void alg (int, float [], float [], float []);
float iks (float [], int, int);

    //funkcja glowna:
int main()
 {
    //funkcja zawiera ponizsze strumienie
  using std::cout;
  using std::endl;
  using std::cin;
  using std::ofstream;

       //zmienna zapetlajaca program
  bool jeszcze_raz = true;

      //otwarcie pliku do zapisu
  ofstream file("rozw.txt");
     //zapetlenie programu
  while (jeszcze_raz)
    {
    //wczytanie danych
      cout << "Wielomian interpolacyjny: a0 + a1(x-x0) + a2(x-x0)(x-x1)+ "
       << "... + an(x-x0)...(x-xm)^ m=n1" << endl << endl;

      float *x = NULL;
      float *a = NULL;
      float *w = NULL;
      int n;

      cout << "Podaj stopien wielomianu: ";
      cin >> n;

      a = new float[n+1];
      x = new float[n];

      cout << "Podaj a[0]: ";
      cin >> a[0];

      for (int i = 0; i < n; i++)
        {
          cout << "Podaj a[" << i+1 << "]: ";
      cin >> a[i+1];
      cout << "Podaj x[" << i << "]: ";
      cin >> x[i];
      x[i] = -x[i];
    };

        //koniec wczytywania

        //zapis do pliku wielomianu interpolacyjnego
      file << a[0];

      for (int z = 1; z <= n; z++)
        {
      if (a[z] > 0)
        file << "+";

      if (a[z] == 1)
        ;
       else

      if (a[z] == -1)
        file << "-";
           else
            file << a[z];

         for (int c = 0; c < z; c++)
           {
         if (x[c] == 0)
         file << "x";

          else
          {
        file << "(x";
        if (x[c] > 0)
          file << "+";

        file << x[c] << ")";
              };
           };
        };

      file << "=";
        //koniec zapisu

//tablica w - nowa postac wielomianu
      w = new float[n+1];

//algorytm
      alg (n, w, a, x);

//zapis do pliku wielomianu klasycznego
        file << w[n];

        for (int z = n; z >= 1; z--)
          {
        if (z > 1)
          {
        file << "x^" << z << " ";
        if (w[z-1] > 0)
          file << "+";

        file << w[z-1];
          }

         else
              {
            file << "x ";
        if (w[z-1] > 0)
          file << "+";
          file << w[z-1] << endl;
          };
          };

    //koniec zapisu

    //petla ciag dalszy:

       cout << "Czy kontynuowac dzialanie programu? (tak - 1; nie - 0) ";
       cin >> jeszcze_raz;
    }
    //koniec petli

   return 0;
 };

void alg (int stopien, float w[], float a[], float x[])
 {
   for (int i = stopien; i >= 0; i--)
     {
       for (int j = i; j <= stopien; j++)
         {
       w[i] += (a[j] * iks(x, i, j));
         };
     };
   return;
 };

float iks(float x[], int i, int j)
 {
   if ( i == j)
     return 1;

   float X = 0.0;

   for (int k = 0; k < j; k++)
     {
       float Y = 1.0;
       for (int t = 0; t < j-i; t++)
         Y *= x[k+t];

       X += Y;
     };

   return X;
 };