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]bn*xn + b[n-1]x(n-1) + ... + b1x + 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;
 };