{Автор: 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.