fork download
  1. # include <iostream>
  2.  
  3. # include <math.h>
  4.  
  5. # include <stdlib.h>
  6.  
  7. #include <iostream>
  8.  
  9. const int n = 10;
  10.  
  11. double x[n + 1] = {0.281, 0.449, 0.618, 0.787,0.956,1.124 ,1.293 ,1.462 ,1.631 , 1.799, 1.968 };
  12.  
  13. double y[n + 1] = {-0.222 ,-0.055 ,0.013 ,0.011, -0.032,-0.088 ,-0.129 , -0.125,-0.047,0.131 ,0.443 };
  14.  
  15. double z[3] = {1.2510,1.1700,1.0870 };
  16.  
  17. double delta(int m, int k);
  18.  
  19. double Stir(int d, double q);
  20.  
  21. using namespace std;
  22.  
  23. int fact(int i);
  24.  
  25. int main()
  26.  
  27. {
  28.  
  29. setlocale(0,"");
  30.  
  31. int i, j, d;
  32.  
  33. double min, b, q;
  34.  
  35. for (i = 0; i<3; i++)
  36.  
  37. {
  38.  
  39. b = z[i];
  40.  
  41. cout << "\n\nПрограмма вычисляет значение в точке x[" << i + 1 <<"] = " << b << " ";
  42.  
  43. min = 10000;
  44.  
  45. for (j = 1; j <= n; j++)
  46.  
  47. {
  48.  
  49. if (fabs(x[j] - b)<min)
  50.  
  51. {
  52.  
  53. min = fabs(x[j] - b);
  54.  
  55. d = j;
  56.  
  57. }
  58.  
  59. }
  60.  
  61. q = fabs(b - x[d]) / (x[1] - x[0]);
  62.  
  63. cout << "\n Расчет ведется методом Стирлинга " <<"\n Результат: " << Stir(d, q)<<endl;
  64.  
  65. }
  66.  
  67. }
  68.  
  69. double delta(int m, int k)
  70.  
  71. {
  72.  
  73. double d;
  74.  
  75. if (m == 1) { d = y[k + 1] - y[k]; }
  76.  
  77. else { d = delta(m - 1, k + 1) - delta(m - 1, k); }
  78.  
  79. return d;
  80.  
  81. }
  82.  
  83.  
  84.  
  85. double Stir(int d, double q)
  86.  
  87. {
  88.  
  89. int t;
  90.  
  91. double sum, a;
  92.  
  93. sum = y[d];
  94.  
  95. a = 1;
  96.  
  97. if (d>(n - d))
  98.  
  99. {
  100.  
  101. t = n - d;
  102.  
  103. }
  104.  
  105. else
  106.  
  107. {
  108.  
  109. t = d;
  110.  
  111. }
  112.  
  113. for (int i = 1; i <= t; i++, a *= (q*q - (i - 1)*(i - 1)))
  114.  
  115. sum += q*a*(delta(2 * i - 1, i) + delta(2 * i, i - 1)) / (fact(2 * i - 1) * 2) + q*q*a*delta(2 * i, i) / fact(2 * i);
  116.  
  117. return (sum);
  118.  
  119. }
  120.  
  121.  
  122.  
  123. int fact(int i)
  124.  
  125. {
  126.  
  127. if (i <= 1) return 1;
  128.  
  129. else return (i*fact(i - 1));
  130.  
  131. }
  132.  
  133.  
  134.  
  135.  
Success #stdin #stdout 0s 4456KB
stdin
1.087
stdout

Программа вычисляет значение в точке x[1] = 1.251 
 Расчет ведется методом Стирлинга 
 Результат: -0.134361


Программа вычисляет значение в точке x[2] = 1.17 
 Расчет ведется методом Стирлинга 
 Результат: -0.0729513


Программа вычисляет значение в точке x[3] = 1.087 
 Расчет ведется методом Стирлинга 
 Результат: -0.0745298