Cài đặt công thức nội suy Lagrange

Mã:
#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*CongDaThuc(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*NhanHeSo(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*NhanBien(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*NhanDaThucCap1(double*fx, int Bacf, double a, double b){
	double*Temp = NhanBien(fx,Bacf);
	Temp = NhanHeSo(Temp,Bacf+1,a);
	Temp = CongDaThuc(Temp,Bacf+1,NhanHeSo(fx,Bacf,b),Bacf,Bacf);
	return Temp;
}

double*Yi_Pi(Diem*P, int n, int i){
	double* Temp = new double [n+1];
	double BacT = 0, MauSo = 1;
	Temp[0] = 1;
	for(int j=0; j<=n; j++)
	if(i!=j) {
		Temp = NhanDaThucCap1(Temp,BacT,1,-P[j].x);-
		BacT++;
		MauSo*=(P[i].x-P[j].x);
	}
	MauSo = P[i].y/MauSo;
	Temp = NhanHeSo(Temp,BacT,MauSo);
	return Temp;
}

double*Lagrange(Diem*P, int n){
	double*Temp = Yi_Pi(P,n,0);
	for(int i=1; i<=n; i++)
		Temp = CongDaThuc(Temp,n,Yi_Pi(P,n,i),n,n);
	return Temp;
}

void main(){
	clrscr();
	int n;
	cout<<"Nhap So Diem:";
	cin>>n;
	n--;
	Diem*P = NhapDiem(n);
	double* Px = Lagrange(P,n);
	XuatDaThuc(Px,n,"\nP(x)");
	getch();
}