Предмет: Информатика,
автор: vitoss503
Найти методом деления отрезка пополам корень уравнения x3+2x2+3x+5=0 на отрезке [-2;-1] с точностью 0.01.
Аноним:
Язык программирования Вам неважен?
Ответы
Автор ответа:
4
Преобразуем левую часть уравнения с использованием схемы Горнера:

PascalABC.Net
function f(x: real): real;
begin
f := 5+x*(3+x*(2+x));
end;
var
a, b, x, fa, fb, fx, eps: real;
begin
Write('Введите через пробел границы интервала [a;b] и точность:');
Readln(a, b, eps);
fa := f(a);
if abs(fa) <= eps then Writeln('x=', a, ', y=', fa)
else begin
fb := f(b);
if abs(fb) <= eps then Writeln('x=', b, ', y=', fb)
else
if fa * fb > 0 then Writeln('На указанном интервале корней нет')
else
repeat
x := (a + b) / 2;
fx := f(x);
if abs(fx) <= eps then Writeln('x=', x, ', y=', fx)
else
if fa * fx > 0 then a := x else b := x;
until abs(fx) <= eps
end
end.
Результат решения:
Введите через пробел границы интервала [a;b] и точность:-2 -1 0.01
x=-1.84375, y=-9.1552734375E-05
PascalABC.Net
function f(x: real): real;
begin
f := 5+x*(3+x*(2+x));
end;
var
a, b, x, fa, fb, fx, eps: real;
begin
Write('Введите через пробел границы интервала [a;b] и точность:');
Readln(a, b, eps);
fa := f(a);
if abs(fa) <= eps then Writeln('x=', a, ', y=', fa)
else begin
fb := f(b);
if abs(fb) <= eps then Writeln('x=', b, ', y=', fb)
else
if fa * fb > 0 then Writeln('На указанном интервале корней нет')
else
repeat
x := (a + b) / 2;
fx := f(x);
if abs(fx) <= eps then Writeln('x=', x, ', y=', fx)
else
if fa * fx > 0 then a := x else b := x;
until abs(fx) <= eps
end
end.
Результат решения:
Введите через пробел границы интервала [a;b] и точность:-2 -1 0.01
x=-1.84375, y=-9.1552734375E-05
Интересные вопросы
Предмет: Українська мова,
автор: Irisha20115
Предмет: Другие предметы,
автор: Аноним
Предмет: Русский язык,
автор: andreypershin2
Предмет: Английский язык,
автор: salta160680
Предмет: Алгебра,
автор: Geranr