Code:

#include "conio.h"
#include "iostream.h"

typedef struct Diem{
   double x,y;
}Diem;

Diem KhoiTao(double x, double y){
   Diem Temp;
   Temp.x = x;
   Temp.y = y;
   return Temp;
}

Diem*NhapDiem(int n){
   Diem*Temp = new Diem [n+1];
   for(int i=0; i<=n; i++){
      cout<<"x"<<i<<" = ";
      cin>>Temp[i].x;
      cout<<"y"<<i<<" = ";
      cin>>Temp[i].y;
   }
   return Temp;
}

double*NhapDaThuc(int n) {
   double* Temp = new  double [n+1];
   for(int i= 0; i<=n; i++) {
      cout<<"a"<<i<<" = ";
      cin>>Temp[i];
   }
   return Temp;
}

void XuatDaThuc(double*fx,int Bacf, char*s) {
   cout<<s<<" = "<<fx[0];
   for(int i=1; i<=Bacf; i++){
      if(fx[i]>0) {
         cout<<" + "<<fx[i]<<"x^"<<i;
      }
      if(fx[i]<0) {
         cout<<fx[i]<<"x^"<<i;
      }
   }
}

double*Cong(double*fx,int Bacf,double*gx,int Bacg, int&BacTong){
   double*Temp;
   if(Bacf<Bacg){
      BacTong = Bacg;
      Temp = new double [BacTong+1];
      for(int i = 0; i<=Bacf; i++)
         Temp[i] = fx[i]+gx[i];
      for(i = Bacf+1;i<=Bacg; i++)
         Temp[i] = gx[i];
   }else{
      BacTong = Bacf;
      Temp = new double [BacTong+1];
      for(int i = 0; i<=Bacg; i++)
         Temp[i] = fx[i]+gx[i];
      for(i = Bacg+1;i<=Bacf; i++)
         Temp[i] = fx[i];
   }
   return Temp;
}

double*Nhan(double*fx,int Bacf,double c){
   double * Temp = new double [Bacf+1];
   for(int i=0; i<=Bacf; i++)
      Temp[i]=c*fx[i];
   return Temp;
}

double*Nhan(double*fx,int Bacf){
   double*Temp = new double [Bacf+2];
   for(int i=0; i<=Bacf; i++)
      Temp[i+1]=fx[i];
   Temp[0] = 0;
   return Temp;
}

double*Nhan(double*fx, int Bacf, double a, double b){
   double*Temp = Nhan(fx,Bacf);
   Temp = Nhan(Temp,Bacf+1,a);
   Temp = Cong(Temp,Bacf+1,Nhan(fx,Bacf,b),Bacf,Bacf);
   return Temp;
}

/*-------------------SAI PHAN--------------------*/
double**SaiPhan(Diem*P,int n){
   double**Temp;
   *Temp = new double [n+1];
   for(int i=0; i<=n; i++)
      Temp[i] = new double [n+2-i];
   for(i=0; i<=n; i++){
      Temp[i][0] = P[i].x;
      Temp[i][1] = P[i].y;
   }
   for(i=2; i<=n+1;i++)
   for(int j=0; j<=n+1-i;j++)
      Temp[j][i] =(Temp[j+1][i-1]-Temp[j][i-1])/(Temp[j+i-1][0]-Temp[j][0]);
   return Temp;
}

void XuatBangSaiPhan(double**A, int n){
   for(int i=0; i<=n; i++) {
      cout<<endl;
      for(int j=0; j<=n+1-i; j++)
         cout<<A[i][j]<<"\t";
   }
}

/*---------------------NEWTON TIEN----------------*/
double*DiemTien(Diem*P,int n){
   double*Temp = new double[n+1];
   double**A = SaiPhan(P,n);
   for(int i=0; i<=n; i++)
      Temp[i] = A[0][i+1];
   return Temp;
}


double*NewtonTien(Diem*P,int n){
   double*Temp,*Temp1;
   double*Y = DiemTien(P,n);
   int BacT = 0,BacT1;
   *Temp = Y[0];
   for(int i = 1; i<=n; i++) {
      BacT1 = 0;
      *Temp1=1;
      for(int j=0; j<i;j++) {
         Temp1 = Nhan(Temp1,BacT1,1,-P[j].x);
         BacT1++;
      }
      Temp1 = Nhan(Temp1,BacT1,Y[i]);
      Temp = Cong(Temp,BacT,Temp1,BacT1,BacT);
   }
   return Temp;
}

/*---------------------NEWTON LUI----------------*/
double*DiemLui(Diem*P,int n){
   double*Temp = new double[n+1];
   double**A = SaiPhan(P,n);
   for(int i=n+1; i>=1; i--)
      Temp[i-1] = A[n+1-i][i];
   return Temp;
}

double*NewtonLui(Diem*P,int n){
   double*Temp,*Temp1;
   double*Y = DiemLui(P,n);
   int BacT = 0,BacT1;
   *Temp = Y[0];
   for(int i = 1; i<=n; i++) {
      BacT1 = 0;
      *Temp1=1;
      for(int j=0; j<i;j++) {
         Temp1 = Nhan(Temp1,BacT1,1,-P[n-j].x);
         BacT1++;
      }
      Temp1 = Nhan(Temp1,BacT1,Y[i]);
      Temp = Cong(Temp,BacT,Temp1,BacT1,BacT);
   }
   return Temp;
}

void Exit() {
      asm {
      mov ah,4ch;
      int 21h
   }
}

void main(){
   clrscr();
   int n;
   cout<<"Nhap So Diem Can Noi Suy:";
   cin>>n;
   n--;
   Diem*P = NhapDiem(n);
   double* Px = NewtonTien(P,n);
   cout<<"\nDA THUC NOI SUY PHUONG PHAP NEWTON TIEN";
   XuatDaThuc(Px,n,"\np(x)");
   double* Hx = NewtonLui(P,n);
   cout<<"\nDA THUC NOI SUY PHUONG PHAP NEWTON LUI";
   XuatDaThuc(Hx,n,"\nh(x)");
   getch();
   Exit();
}