Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- PROGRAM LR2S2DT;
- const
- M = 50; // С округлением
- type
- func = function(x : real; n : integer) : real;
- var
- x, e, step : real;
- i, j, k : integer;
- outp : text;
- function fnegativecheck(n : integer) : boolean; // Ф-ция проверки на отрицательность
- begin
- if(n < 0) then begin
- writeln('Значение ', n, ' отрицательно!');
- fnegativecheck := true;
- end
- else
- fnegativecheck := false;
- end;
- function st(n : integer) : integer; // Проверка на чётность
- begin
- if(fnegativecheck(n)) then
- halt;
- if(n = 0) or not odd(n) then
- ST := 1
- else
- ST := -1
- end;
- function fpow(x : real; n : integer) : real; // Возведение в степень
- begin
- if(n > 0) then
- fpow := x * fpow(x, n-1)
- else
- fpow := 1;
- end;
- function WRF(x, e : real) : real; // Суммирование с while и реккурентной формулой
- var
- s, a : real;
- n : integer;
- begin
- a := x;
- s := 0;
- n := 0;
- while(abs(a) >= e) do begin
- s := s + a;
- n := n + 1;
- a := a * -(sqr(x)/(2*n+1)*(2*n-1));
- end;
- WRF := s + a;
- end;
- function RRF(x, e : real) : real; // Суммирование с repeat и рекуррентной формулой
- var
- s, a : real;
- n : integer;
- begin
- a := x;
- s := 0;
- n := 0;
- repeat
- s := s + a;
- n := n + 1;
- a := a * -(sqr(x)/(2*n+1)*(2*n-1));
- until (abs(a) <= e);
- RRF := s + a;
- end;
- function mexp(x : real; n : integer) : real; // Вычисление очередного члена ряда
- begin
- mexp := st(n)*fpow(x, 2*n+1)/(2*n+1);
- end;
- function SMW(x, e : real; n : integer; fn : FUNC) : real; // Суммирование с while и процедурным параметром
- var
- f, s : real;
- begin
- s := 0;
- f := fn(x, n);
- while(abs(f) >= e) do begin
- s += f;
- n += 1;
- f := fn(x, n);
- end;
- SMW := s + f;
- end;
- function SMR(x, e : real; n : integer; fn : FUNC) : real; // Суммирование с repeat с процедурным параметром
- var
- f, s : real;
- begin
- s := 0;
- repeat
- f := fn(x, n);
- s := s + f;
- n := n + 1;
- until(abs(f) <= e);
- SMR := s;
- end;
- function SUM(x, e : real; n : integer; fn : FUNC) : real; // Рекурсивное суммирование с процедурным параметром
- var
- f : real;
- begin
- f := fn(x, n);
- if(abs(f) <= e) then
- SUM := f
- else
- SUM := f + SUM(x, e, n+1, fn);
- end;
- begin
- e := 1E-3;
- x := 0;
- k := 10;
- step := 0;
- assign(outp, 'rData.txt');
- rewrite(outp);
- repeat
- writeln('Введите X в диапазоне |X| < 1!');
- read(x);
- until (NOT(abs(x) >= 1));
- repeat
- writeln('Введите шаг STEP в диапазоне |STEP| < 1!');
- read(step);
- until (NOT(abs(step) >= 1));
- { Отрисовка таблицы }
- writeln(outp, '|', 'X' : 3, '|' : 4, 'f(x)' : 5, '|' : 2, 'WRF' : 4, '|' : 3, 'RRF' : 4, '|' : 3, 'SMW' : 4, '|' : 3, 'SMR' : 4, '|' : 3, 'SUM' : 4, '|' : 3);
- for i := 1 to M do begin
- if(odd(i)) then
- for j := 1 to M do begin
- write(outp, '-');
- end
- else if((abs(x) < 1) and (k > 0)) then begin
- write(outp, '|');
- {Содержимое таблицы}
- 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, '|');
- x += step;
- k -= 1;
- end
- else
- break;
- writeln(outp);
- end;
- close(outp);
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement