Ex6_11.cpp
上传用户:wuzhousb
上传日期:2022-07-12
资源大小:380k
文件大小:1k
源码类别:

书籍源码

开发平台:

Visual C++

  1. //【例6.11】设计梯形法求积分的类模板,梯形法求积分的函数为成员函数,
  2. //可求任一函数的定积分。以积分类的模板参数T来引入被积函数。
  3. #include <iostream>                                                    
  4. #include <iomanip>
  5. using namespace std;
  6. class F1 {
  7. public:
  8. double fun(double x){return (1+x+2*x*x);}
  9. };
  10. class F2 {
  11. public:
  12. double fun(double x){return (1+x+2*x*x+3*x*x*x);}
  13. };
  14. class F3 {
  15. public:
  16. double fun(double x){return (1+x+2*x*x+3*x*x*x+4*x*x*x*x);}
  17. };
  18. template<typename T>class Integer{
  19. double a,b,step,result;
  20. int n;//分区数量
  21. T cf;//被积函数
  22. public:
  23. Integer(double aa=0, double bb=0, int nn=100){
  24. a=aa; b=bb; n=nn;
  25. integerate();
  26. }
  27. void putlimits(double aa=0, double bb=0, int nn=100){//修改积分上下限和分区数
  28. a=aa; b=bb; n=nn;
  29. }
  30. void integerate();
  31. void print(){cout<<"定积分值为:"<<result<<endl;}
  32. };
  33. template<typename T>void Integer<T>::integerate(){
  34. step=(b-a)/n;
  35. result=(cf.fun(a)+cf.fun(b))/2;
  36. for (int i=1;i<n;i++) result+=cf.fun(a+i*step);
  37. result*=step;
  38. }
  39. int main(){
  40. Integer<F1> integer1(0.0,3.0,1000);
  41. integer1.print();
  42. Integer<F2> integer2(0.0,3.0,1000);
  43. integer2.print();
  44. Integer<F3> integer3(0.0,3.0,1000);
  45. integer3.print();
  46. return 0;
  47. }