27 lines
993 B
ObjectPascal
27 lines
993 B
ObjectPascal
|
|
function f(x: real) := exp(x) - 4; // Короткое определение функции
|
|||
|
|
|
|||
|
|
function BisectionMethod(a, b, eps: real): real;
|
|||
|
|
begin
|
|||
|
|
var fa := f(a); // Вычисляем f(a) один раз в начале
|
|||
|
|
while abs(b - a) > eps do
|
|||
|
|
begin
|
|||
|
|
var c := (a + b) / 2;
|
|||
|
|
var fc := f(c); // Вычисляем функцию только один раз на итерацию
|
|||
|
|
if fc = 0 then
|
|||
|
|
break; // Выход из цикла, если найден точный корень
|
|||
|
|
if fa * fc < 0 then
|
|||
|
|
b := c
|
|||
|
|
else
|
|||
|
|
(a, fa) := (c, fc); // Кортежное присваивание
|
|||
|
|
end;
|
|||
|
|
Result := (a + b) / 2; // Возвращаем среднюю точку как приближенный корень
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
begin
|
|||
|
|
var (a, b) := (0.0, 3.0); // Множественное присваивание для a и b
|
|||
|
|
var eps := 0.000001;
|
|||
|
|
|
|||
|
|
var root := BisectionMethod(a, b, eps);
|
|||
|
|
|
|||
|
|
Println('Корень уравнения:', root);
|
|||
|
|
end.
|