Cài đặt một số phép toán thực hiện trên đa thức bằng ngôn ngữ C


BÀI TOÁN
Một số phép toán thực hiện trên đa thức.
1. f(x)+g(x)
2. c.f(x)
3. x.f(x)
4. (ax+b).f(x)
5. f(x).g(x)
Ý TƯỞNG CÀI ĐẶT
1. CÀI ĐẶT f(x)+g(x)
Ý tưởng: Cộng hai đa thức chính là cộng các hệ số tương ứng của hai đa thức đó lại với nhau. Số bậc trả về là bậc cao nhất của một trong hai đa thức đó.
Cài đặt:
Mã:
/*Cộng hai đa thức kết quả trả về là một đa thức và có bậc là BacTong*/
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;
}
2. CÀI ĐẶT c.f(x)
Ý tưởng: Nhân đa thức f(x) với hệ số c chính là nhân các hệ số tương ứng của đa thức f(x) với hệ số tự do c.
Cài đặt:
Mã:
/*Nhân đa thức f(x) với hệ số tự do c*/
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;
}
3. CÀI ĐẶT x.f(x)
Ý tưởng: Nhân đa thức f(x) với biến x chính là cho chỉ số hệ số của đa thức tương ứng tăng lên 1 và hệ số tự do bằng 0 (chỉ số 0 của hệ số). Bậc đa thức tra về bằng bậc đa thức f(x)+1.
Cài đặt:
Mã:
/*Nhân đa thức f(x) với biến x*/
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;
}
4. CÀI ĐẶT (ax+b).f(x)
Ý tưởng:
g(x) = (ax+b).f(x)=a[x.f(x)]+b.f(x)
Bậc đa thức tra về bằng bậc đa thức f(x)+1.
Cài đặt:
Mã:
/*Nhân đa thức f(x) với (ax+b)*/
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;
}
5. CÀI ĐẶT f(x).g(x)
Ý tưởng: Tương tự như (ax+b)f(x). Ta cố định f(x) và lần lược nhân f(x) với các hệ số tương ứng của g(x) rồi cộng lại. Bậc trả về bằng bậc của đa thức f(x) cộng bậc đa thức g(x).
Cài đặt:
Mã:
/*Nhân đa thức f(x) với g(x)*/
double*NhanDaThuc(double*fx, int Bacf, double* gx, int Bacg) {
       double* Temp;
       int BacT,BacT1;
       double* Temp1;
       if(gx[0]!=0) {
		Temp = NhanHeSo(fx,Bacf,gx[0]);
		BacT = Bacf;
       } else {
		Temp[0] = 0;
		BacT = 0;
       }
       for(int i = 1; i<=Bacg; i++)
       if(gx[i]!=0) {
		Temp1 = NhanHeSo(fx,Bacf,gx[i]);
		BacT1 = Bacf;
		for(int j =1; j<=i;j++) {
			Temp1 = NhanBien(Temp1,BacT1);
			BacT1++;
		}
		Temp = CongDaThuc(Temp,BacT,Temp1,BacT1,BacT);
       }
       return Temp;
}