fork download
  1. Program BisectionMethodWithTabulation;
  2.  
  3. Function f(x: Real): Real;
  4. Begin
  5. f := x * x - 4; // Приклад функції x^2 - 4 = 0
  6. End;
  7.  
  8. Procedure TabulateAndFindInterval(Var a, b: Real);
  9. Var
  10. x, step: Real;
  11. found: Boolean;
  12. Begin
  13. step := 0.1; // Крок табулювання
  14. x := -10; // Початок інтервалу для пошуку
  15. found := False;
  16.  
  17. WriteLn('Табулювання функції:');
  18. While x <= 10 Do
  19. Begin
  20. WriteLn('f(', x:0:2, ') = ', f(x):0:4);
  21.  
  22. // Якщо знайдено інтервал де f(a) * f(b) < 0
  23. If (f(x) * f(x + step) < 0) Then
  24. Begin
  25. a := x;
  26. b := x + step;
  27. found := True;
  28. Break;
  29. End;
  30. x := x + step;
  31. End;
  32.  
  33. If not found Then
  34. WriteLn('Не знайдено інтервалу, де функція змінює знак.');
  35. End;
  36.  
  37. Procedure Bisection(a, b, Eps: Real);
  38. Var
  39. c: Real;
  40. iterations: Integer;
  41. Begin
  42. iterations := 0;
  43. While (b - a) > Eps Do
  44. Begin
  45. c := (a + b) / 2;
  46. If f(a) * f(c) < 0 Then
  47. b := c
  48. Else
  49. a := c;
  50. iterations := iterations + 1;
  51. End;
  52. WriteLn('Корінь рівняння: ', c:0:6);
  53. WriteLn('Кількість ітерацій: ', iterations);
  54. End;
  55.  
  56. Var
  57. a, b, Eps: Real;
  58. Begin
  59. Eps := 0.001;
  60.  
  61. // Автоматичне табулювання та пошук інтервалу
  62. TabulateAndFindInterval(a, b);
  63.  
  64. If (a <> b) And (f(a) * f(b) > 0) Then
  65. WriteLn('Немає кореня на цьому інтервалі')
  66. Else If (a <> b) Then
  67. Bisection(a, b, Eps);
  68. End.
Success #stdin #stdout 0s 5284KB
stdin
Standard input is empty
stdout
Табулювання функції:
f(-10.00) = 96.0000
f(-9.90) = 94.0100
f(-9.80) = 92.0400
f(-9.70) = 90.0900
f(-9.60) = 88.1600
f(-9.50) = 86.2500
f(-9.40) = 84.3600
f(-9.30) = 82.4900
f(-9.20) = 80.6400
f(-9.10) = 78.8100
f(-9.00) = 77.0000
f(-8.90) = 75.2100
f(-8.80) = 73.4400
f(-8.70) = 71.6900
f(-8.60) = 69.9600
f(-8.50) = 68.2500
f(-8.40) = 66.5600
f(-8.30) = 64.8900
f(-8.20) = 63.2400
f(-8.10) = 61.6100
f(-8.00) = 60.0000
f(-7.90) = 58.4100
f(-7.80) = 56.8400
f(-7.70) = 55.2900
f(-7.60) = 53.7600
f(-7.50) = 52.2500
f(-7.40) = 50.7600
f(-7.30) = 49.2900
f(-7.20) = 47.8400
f(-7.10) = 46.4100
f(-7.00) = 45.0000
f(-6.90) = 43.6100
f(-6.80) = 42.2400
f(-6.70) = 40.8900
f(-6.60) = 39.5600
f(-6.50) = 38.2500
f(-6.40) = 36.9600
f(-6.30) = 35.6900
f(-6.20) = 34.4400
f(-6.10) = 33.2100
f(-6.00) = 32.0000
f(-5.90) = 30.8100
f(-5.80) = 29.6400
f(-5.70) = 28.4900
f(-5.60) = 27.3600
f(-5.50) = 26.2500
f(-5.40) = 25.1600
f(-5.30) = 24.0900
f(-5.20) = 23.0400
f(-5.10) = 22.0100
f(-5.00) = 21.0000
f(-4.90) = 20.0100
f(-4.80) = 19.0400
f(-4.70) = 18.0900
f(-4.60) = 17.1600
f(-4.50) = 16.2500
f(-4.40) = 15.3600
f(-4.30) = 14.4900
f(-4.20) = 13.6400
f(-4.10) = 12.8100
f(-4.00) = 12.0000
f(-3.90) = 11.2100
f(-3.80) = 10.4400
f(-3.70) = 9.6900
f(-3.60) = 8.9600
f(-3.50) = 8.2500
f(-3.40) = 7.5600
f(-3.30) = 6.8900
f(-3.20) = 6.2400
f(-3.10) = 5.6100
f(-3.00) = 5.0000
f(-2.90) = 4.4100
f(-2.80) = 3.8400
f(-2.70) = 3.2900
f(-2.60) = 2.7600
f(-2.50) = 2.2500
f(-2.40) = 1.7600
f(-2.30) = 1.2900
f(-2.20) = 0.8400
f(-2.10) = 0.4100
f(-2.00) = 0.0000
Корінь рівняння: -1.999219
Кількість ітерацій: 7