NyanCoder

Newton.pas

May 15th, 2022
1,288
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 2.16 KB | None | 0 0
  1. Uses crt, sysutils;
  2.  
  3. Function calculateX(xFrom, i, step : real) : real;
  4. Begin
  5.     calculateX := xFrom + i * step;
  6. End;
  7.  
  8. Function yFormula(x : real) : real;
  9. Begin
  10.     yFormula := exp(-(x - 2) * (x - 2));
  11. End;
  12.  
  13. Function getQ(x0, h : real) : string;
  14. Begin
  15.     getQ := '(x - ' + FloatToStrF(x0,ffgeneral,7,6) + ')/' + FloatToStrF(h,ffgeneral,7,6);
  16. End;
  17.  
  18. Function calculateYDelta(xFrom, step : real; power, i : integer) : real;
  19. Begin
  20.     If (power <= 1) Then
  21.         calculateYDelta := yFormula(calculateX(xFrom, i, step))
  22.     Else
  23.         calculateYDelta := calculateYDelta(xFrom, step, power - 1, i) - calculateYDelta(xFrom, step, power - 1, i + 1);
  24. End;
  25.  
  26. Procedure printNewton1(xFrom, step : real; n : integer; q : string);
  27. Var
  28.     fact, yDelta : real;
  29.     i, j : integer;
  30. Begin
  31.     write('P(x) = ', calculateYDelta(xFrom, step, 0, 0):0:6);
  32.     fact := 1;
  33.     For i := 1 To n Do Begin
  34.         fact *= i;
  35.         yDelta := calculateYDelta(xFrom, step, i, 0);
  36.         If (yDelta < 0) Then Begin
  37.             yDelta *= -1;
  38.             write(' - ');
  39.         End
  40.         Else
  41.             write(' + ');
  42.         write((yDelta / fact):0:6, '(' + q + ')');
  43.         For j := 2 To i Do
  44.             write('(' + q + ' - ', j - 1, ')');
  45.     End;
  46. End;
  47.  
  48. Procedure printNewton2(xFrom, step : real; n : integer; q : string);
  49. Var
  50.     fact, yDelta : real;
  51.     i, j : integer;
  52. Begin
  53.     write('P(x) = ', calculateYDelta(xFrom, step, 0, n):0:6);
  54.     fact := 1;
  55.     For i := 1 To n Do Begin
  56.         fact *= i;
  57.         yDelta := calculateYDelta(xFrom, step, i, n - i);
  58.         If (yDelta < 0) Then Begin
  59.             yDelta *= -1;
  60.             write(' - ');
  61.         End
  62.         Else
  63.             write(' + ');
  64.         write((yDelta / fact):0:6, '(' + q + ')');
  65.         For j := 2 To i Do
  66.             write('(' + q + ' + ', j - 1, ')');
  67.     End;
  68. End;
  69.  
  70. Var
  71.     xFrom, xTo, step : real;
  72.     n : integer;
  73.     q : string;
  74. Begin
  75.     xFrom := 2;
  76.     xTo := 4;
  77.     step := 0.2;
  78.  
  79.     n := Trunc((xTo - xFrom) / step);
  80.  
  81.     q := getQ(xFrom, step);
  82.     printNewton1(xFrom, step, n, q);
  83.  
  84.     writeln;
  85.  
  86.     q := getQ(xTo, step);
  87.     printNewton2(xFrom, step, n, q);
  88. End.
Advertisement
Add Comment
Please, Sign In to add comment