一. 目的与背景知识
1、生成一个多项式
2、根据Horner规则求解多项式的值。
伪代码如下:
y=0
for i=n down to 0
y=A[i]+X*Y
上述伪代码即描述了求解A[0]+A[1]X^1+…+A[N] ( X ^N )
二. 代码实现
1、多项式展示与计算类
#include<iostream>
namespace MyAlgorithm{
template <class T>
class Polynomial
{
private:
T* Coefficient;
int Size;
public:
Polynomial(T testArray[], int nSize){
Coefficient = testArray;
Size = nSize;
};
~Polynomial(){};
void ShowPolynomial(){
using namespace std;
cout << "多项式为:" << endl;
for (int i = 0; i < Size; i++){
cout << Coefficient[i];
if (i != 0){
cout << "*X^" << i;
}
if (i != Size - 1){
cout << " + ";
}
}
cout << endl;
};
void ComputerValue(T Variable){
using namespace std;
cout << "多项式值为:";
double Sum(0.0);
for (int i = Size - 1; i >= 0; i--){
Sum = Coefficient[i] + Variable*Sum;
}
cout << Sum << endl;
};
};
}
2、调用代码
#include<iostream>
#include"Polynomial.h"
#include"Test.h"
#define N_COUNT 10
int main(){
using namespace Test;
using namespace MyAlgorithm;
using namespace std;
LogInfo<double> log = LogInfo<double>();
log.ShowState("测试多项式Horner求值");
log.ShowLine();
TestDataCreator<double, N_COUNT> testArray = TestDataCreator<double, N_COUNT>(RandomArray);
Polynomial<double> testPoly = Polynomial<double>(testArray.GetArray(), testArray.GetSize());
testPoly.ShowPolynomial();
testPoly.ComputerValue(3.0);
int nWait;
cin >> nWait;
return 0;
}
3、结果输出
三. 错误清单
1、函数未加;导致编译不过。
2、三个源文件CPP共同含有两个main1方法导致编译不过。
3、elseif结构使用导致多项式展示缺少+
4、未加停顿语句,导致窗口一闪而过。
5、对数组地址加下标方式理解不到位。
四. 经验总结
1、没有加命名空间的函数,默认为std.同一个命名空间不能有两个相同的定义。
2、注意逻辑分支的处理。
五. 后续内容
进行数组逆序对的练习。