Решение уравнений методом половинного деления
Метод половинного деления (дихотомия)
{Автор: Ozzя}
var
a,b,x,e:real;
{ Нелинейное уравнение (x-2)*lg(x+11)-1 }
function f(x:real):real;
begin
f:=(x-2)*lg(x+11)-1;
end;
{ Функция, определяющая знак числа }
function sgn(x:real):integer;
begin
sgn:=0;
if x<0.0 then
sgn:=-1;
if x>0.0 then
sgn:=1;
end;
{ Процедура, реализующая метод половинного деления }
procedure dich (var a,b,x,e:real);
var
i:integer;
r:real;
begin
i:=sgn(f(a));
{ Повторяем до тех пор, пока интервал [a,b] не станет меньше }
{ заданной погрешности е }
while b-a>e do
begin
{ Определяем середину отрезка }
x:=(a+b)/2;
{ Далее делаем выбор, какую из частей отрезка взять }
{ для дальнейшего уточнения корня }
{ Если левая часть уравнения f(x) есть непрерывная функция }
{ аргумента х, то корень будет находиться в той половине }
{ отрезка, на концах которой f(x) имеет разные знаки. }
r:=f(x);
if sgn(r)=i then
a:=x
else
b:=x
end
end;
begin
write('Введите значения интервала A,B? ');
readln(a,b);
write('Введите требуемое значение точности E? ');
readln(e);
dich(a,b,x,e);
writeln('X= ',x);
end.