Advertisement
didiwot

8. 2var

Dec 15th, 2019
261
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.22 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <iomanip>    
  4. using namespace std;
  5.  typedef double (*uf)(double, double, int &);  // все uf можно задать с помощью (double, double, int &)
  6.  
  7. void tabl(double, double, double, double, uf);
  8. double y(double, double, int &);
  9. double s(double, double, int &);
  10.  
  11. int main()
  12. {
  13.  cout << setw(8) <<"x"<< setw(15) <<"y(x)"<< setw(10) << "k" << endl;
  14.  tabl(0.1,0.9,0.4,0.00001,y);   // Вызываем функцию y
  15.  cout << endl;
  16.  cout << setw(8) <<"x"<< setw(15) <<"s(x)"<< setw(10) << "k" <<endl ;
  17.  tabl(0.1,0.9,0.4,0.00001,s);   // Вызываем функцию s
  18. return 0;
  19.  }
  20.  
  21. int fact(int n)  // Функция для факториала
  22. {
  23.   int res,i;
  24.   res = 1;
  25.   n += 1;
  26.   for (i = 1; i <= n; i++) {
  27.   res = res * i;
  28.   }
  29.   return res;
  30. }
  31. /*так как *uf - указатель на функцию => к всем функциям которые принимают (double, double, int &) можно обращаться с помощью uf
  32. => когда мы в main доходим до строчки tabl(0.1,0.9,0.4,0.00001,s); (обратить внимание, что в последнем значении мы вызываем функцию s) для того, чтобы обратиться к s в функции tabl мы как бы вводим локальную переменную fun. в стрчке sum=fun(x,eps,k); мы передаём в fun 3 значения, которые передаются в uf, а uf в своё время является указателем на функцию s которую мы написали в строчке tabl(0.1,0.9,0.4,0.00001,s);*/
  33. void tabl(double a, double b, double h, double eps, uf fun)
  34. {
  35.  
  36.  int k=0;  
  37.  double sum;
  38.    for (double x=a; x<b+h/2; x+=h)  
  39. {
  40.    sum=fun(x,eps,k);
  41.         cout << setw(8) << x << setw(15) << sum << setw(10) << k << endl;
  42.    }
  43. }
  44.  
  45. double y(double x, double eps, int &k)
  46. {
  47.  return sin(x)/x;
  48.  }
  49.  
  50. double s(double x, double eps, int &k)
  51. {  
  52.  double a,c,sum;
  53.  sum=a=c=x;  
  54.  k=1;
  55.  while (fabs(c)>eps)  
  56. {  
  57.  c = pow(-1,k)*pow(x,2*k)/fact(2*k);
  58.   a *= -c;  
  59. sum += a;
  60.  k++;
  61.  }
  62.  sum += 1 - (x*x)/(2*3);
  63.  return sum;
  64.  }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement