Advertisement
Guest User

Untitled

a guest
Feb 21st, 2019
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.51 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3. #include "ConsolCyr.h"
  4. #include <math.h>
  5. #include <iomanip>
  6. double dx;
  7. struct I_print{ //данные для печати результатов интегрирования
  8.     char* name;//название функции
  9.     double i_sum;   //значение интегральной суммы
  10.     double i_toch;  //точное значение интеграла
  11.     int n;  //число разбиений области интегрирования
  12.             //при котором достигнута требуемая точность
  13. };
  14.  
  15. void PrintTabl(I_print i_prn[],int k)
  16. {
  17. const int m=4;//число столбцов таблицы
  18. int wn[m]={12,18,18,10};//ширина столбцов таблицы
  19. char *title[m]={"Function","Integral","IntSum","N "};
  20. int size[m];
  21. for(int i=0;i<m;i++)
  22.     size[i]=strlen(title[i]);
  23. //шапка таблицы
  24. cout<<char(218)<<setfill(char(196));
  25. for(int j=0;j<m-1;j++)
  26.     cout<<setw(wn[j])<<char(194);
  27. cout<<setw(wn[m-1])<<char(191)<<endl;
  28.  
  29. cout<<char(179);
  30. for(int j=0;j<m;j++)
  31.     cout<<setw((wn[j]-size[j])/2)<<setfill(' ')<<' '<<title[j]
  32.     <<setw((wn[j]-size[j])/2)<<char(179);
  33. cout<<endl;
  34. for(int i=0;i<k;i++)
  35.     {//заполнение таблицы
  36. cout<<char(195)<<fixed;
  37. for(int j=0;j<m-1;j++)
  38.     cout<<setfill(char(196))<<setw(wn[j])<<char(197);
  39. cout<<setw(wn[m-1])<<char(180)<<setfill(' ')<<endl;
  40.  
  41. cout<<char(179)<<setw((wn[0]-strlen(i_prn[i].name))/2)<<' '<<i_prn[i].name
  42.                     <<setw((wn[0]-strlen(i_prn[i].name))/2)<<char(179);
  43. cout<<setw(wn[1]-1)<<setprecision(10)<<i_prn[i].i_toch<<char(179)
  44.     <<setw(wn[2]-1)<<i_prn[i].i_sum<<setprecision(6)<<char(179)
  45.     <<setw(wn[3]-1)<<i_prn[i].n<<char(179)<<endl;  
  46.     }
  47. //низ таблицы
  48. cout<<char(192)<<setfill(char(196));
  49. for(int j=0;j<m-1;j++)
  50.     cout<<setw(wn[j])<<char(193);
  51. cout<<setw(wn[m-1])<<char(217)<<setfill(' ')<<endl;
  52. }
  53. typedef double (*TPF)(double);
  54. double IntRect(TPF f,double a,double b,double eps)
  55. {
  56.     dx=fabs(b-a)/2; double st1, st2, r;
  57.     st2=f(a);
  58.     for (double x=a+dx/2; x<b; x+=dx)
  59.         st2=st2+f(x);
  60.     st1=st2*dx;
  61.    
  62.     do
  63.     {
  64.         st2=st1;  
  65.         dx=dx/2;
  66.         st1=f(a);
  67.         for (double x=a+dx/2; x<b; x+=dx)
  68.             st1=st1+f(x);
  69.            
  70.         st1=st1*dx;
  71.         r=fabs(st1-st2)/3;
  72.     }
  73.     while (r-eps>0);
  74.  
  75.     return st1;
  76. }
  77.  
  78. double f1(double x)
  79. {
  80.     return x;
  81. };
  82. double f2(double x)
  83. {
  84.     return sin(22*x);
  85. };
  86. double f3(double x)
  87. {
  88.     return x*x*x*x;
  89. };
  90. double f4(double x)
  91. {
  92.     return atan(x);
  93. };
  94.  
  95. double TOCH (int i, double a, double b)
  96. { double t;
  97. switch(i)
  98. {
  99. case 0 : t=(b*b - a*a)/2.0; break;
  100. case 1 : t=(cos(a*22.0) - cos(b*22.0))/22.0; break;
  101. case 2 : t=(b*b*b*b*b - a*a*a*a*a)/5.0; break;
  102. case 3 : t=b*atan(b) - a*atan(a) - (log(b*b+1) - log(a*a+1))/2.0; break;
  103.  
  104. }
  105. return t;}
  106.  
  107. double IntTrap(TPF f,double a,double b,double eps)
  108. {
  109.     dx=fabs(b-a)/2; double st1, st2, r;
  110.     st2=0;
  111.     for (double x=a; x<b; x=x+dx)
  112.         st2=st2+f(x);
  113.     st1=dx*st2/2;
  114.    
  115.     do
  116.     {
  117.         st2=st1;  
  118.         dx=dx/2;
  119.         st1=0;
  120.         for (double x=a; x<b; x=dx+x)
  121.             st1=st1+f(x);
  122.         st1=st1*dx/2;
  123.         r=fabs(st1-st2)/3;
  124.     }
  125.     while (r-eps>0);
  126.  
  127.     return st1;
  128. }
  129.  
  130. int main ()
  131. {   double a=-1, b=3;
  132.  
  133. TPF f [4] = {f1,f2 ,f3 ,f4 };
  134. char* fs [4] = {"x ", "sin(22*x) ", "x*x*x*x ", "atan(x) "};
  135.     double eps [5] = {0.01, 0.001, 0.0001, 0.00001, 0.000001};
  136.     I_print mass[4];
  137.  
  138. for(int j=0;j<5;j++)
  139. {
  140.     for (int i=0; i<4; i++)
  141.     {
  142.             mass[i].name=fs[i];
  143.             mass[i].i_sum=IntRect(f[i],a,b,eps[j]);
  144.             mass[i].i_toch=TOCH(i, a, b);
  145.             mass[i].n=(b-a)/dx;
  146.     };
  147.     PrintTabl(mass,4);
  148. }
  149.     system("pause");
  150.     return 0;
  151. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement