Advertisement
dimon2242

Untitled

Apr 28th, 2017
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 3.51 KB | None | 0 0
  1. PROGRAM LR2S2DT;
  2.  
  3. const
  4.     M = 50; // С округлением
  5.  
  6. type
  7.     func = function(x : real; n : integer) : real;
  8.  
  9. var
  10.     x, e, step : real;
  11.     i, j, k : integer;
  12.     outp : text;
  13.  
  14. function fnegativecheck(n : integer) : boolean; // Ф-ция проверки на отрицательность
  15. begin
  16.     if(n < 0) then begin
  17.         writeln('Значение ', n, ' отрицательно!');
  18.         fnegativecheck := true;
  19.     end
  20.     else
  21.         fnegativecheck := false;
  22. end;
  23.  
  24. function st(n : integer) : integer; // Проверка на чётность
  25. begin
  26.     if(fnegativecheck(n)) then
  27.         halt;
  28.  
  29.     if(n = 0) or not odd(n) then
  30.         ST := 1
  31.     else
  32.         ST := -1
  33. end;
  34.  
  35. function fpow(x : real; n : integer) : real; // Возведение в степень
  36. begin
  37.     if(n > 0) then
  38.         fpow := x * fpow(x, n-1)
  39.     else
  40.         fpow := 1;
  41. end;
  42.  
  43. function WRF(x, e : real) : real; // Суммирование с while и реккурентной формулой
  44. var
  45.     s, a : real;
  46.     n : integer;
  47.  
  48. begin
  49.     a := x;
  50.     s := 0;
  51.     n := 0;
  52.     while(abs(a) >= e) do begin
  53.         s := s + a;
  54.         n := n + 1;
  55.         a := a * -(sqr(x)/(2*n+1)*(2*n-1));
  56.     end;
  57.     WRF := s + a;
  58. end;
  59.  
  60. function RRF(x, e : real) : real; // Суммирование с repeat и рекуррентной формулой
  61. var
  62.     s, a : real;
  63.     n : integer;
  64.  
  65. begin
  66.     a := x;
  67.     s := 0;
  68.     n := 0;
  69.     repeat
  70.         s := s + a;
  71.         n := n + 1;
  72.         a := a * -(sqr(x)/(2*n+1)*(2*n-1));
  73.     until (abs(a) <= e);
  74.     RRF := s + a;
  75. end;
  76.  
  77. function mexp(x : real; n : integer) : real; // Вычисление очередного члена ряда
  78. begin
  79.     mexp := st(n)*fpow(x, 2*n+1)/(2*n+1);
  80. end;
  81.  
  82. function SMW(x, e : real; n : integer; fn : FUNC) : real; // Суммирование с while и процедурным параметром
  83. var
  84.     f, s : real;
  85.  
  86. begin
  87.     s := 0;
  88.     f := fn(x, n);
  89.     while(abs(f) >= e) do begin
  90.         s += f;
  91.         n += 1;
  92.         f := fn(x, n);
  93.     end;
  94.     SMW := s + f;
  95. end;
  96.  
  97. function SMR(x, e : real; n : integer; fn : FUNC) : real; // Суммирование с repeat с процедурным параметром
  98. var
  99.     f, s : real;
  100.  
  101. begin
  102.     s := 0;
  103.     repeat
  104.         f := fn(x, n);
  105.         s := s + f;
  106.         n := n + 1;
  107.     until(abs(f) <= e);
  108.     SMR := s;
  109. end;
  110.  
  111. function SUM(x, e : real; n : integer; fn : FUNC) : real; // Рекурсивное суммирование с процедурным параметром
  112. var
  113.     f : real;
  114.  
  115. begin
  116.     f := fn(x, n);
  117.     if(abs(f) <= e) then
  118.         SUM := f
  119.     else
  120.         SUM := f + SUM(x, e, n+1, fn);
  121. end;
  122.  
  123. begin
  124.     e := 1E-3;
  125.     x := 0;
  126.     k := 10;
  127.     step := 0;
  128.     assign(outp, 'rData.txt');
  129.     rewrite(outp);
  130.  
  131.     repeat
  132.         writeln('Введите X в диапазоне |X| < 1!');
  133.         read(x);
  134.     until (NOT(abs(x) >= 1));
  135.  
  136.     repeat
  137.         writeln('Введите шаг STEP в диапазоне |STEP| < 1!');
  138.         read(step);
  139.     until (NOT(abs(step) >= 1));
  140.  
  141.  
  142.     { Отрисовка таблицы }
  143.     writeln(outp, '|', 'X' : 3, '|' : 4, 'f(x)' : 5, '|' : 2, 'WRF' : 4, '|' : 3, 'RRF' : 4, '|' : 3, 'SMW' : 4, '|' : 3, 'SMR' : 4, '|' : 3, 'SUM' : 4, '|' : 3);
  144.     for i := 1 to M do begin
  145.         if(odd(i)) then
  146.             for j := 1 to M do begin
  147.                 write(outp, '-');
  148.             end
  149.         else if((abs(x) < 1) and (k > 0)) then begin
  150.             write(outp, '|');
  151.             {Содержимое таблицы}
  152.             write(outp, x :6:3, '|' : 1, arctan(x) :6:3, '|' : 1, WRF(x, e) :6:3, '|' : 1, RRF(x, e) :6:3, '|' : 1, SMW(x, e, 0, @mexp) :6:3, '|' : 1, SMR(x, e, 0, @mexp) :6:3, '|' : 1, SUM(x, e, 0, @mexp) :6:3, '|');
  153.             x += step;
  154.             k -= 1;
  155.         end
  156.         else
  157.                 break;
  158.         writeln(outp);
  159.     end;
  160.     close(outp);
  161. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement