Лабораторные работы / Программы / Код некоторых программ - 2003 / Метод половинного деления
.docМетод половинного деления
Program Half_Div;
uses crt;
var
n:integer;
x,y,x1,y1,x2,y2,m1,m2,h,mx1,eps,a,b,mx2:real;
function f(x:real):real;
begin
f:=-2.505-2.802 *x+4.175*x*x+x*x*x;
end;
Begin
clrscr;
writeln('Введите точность');readln(eps);
writeln('Введите левую границу');readln(a);
writeln('Введите праввую границу ');readln(b);
m2:=a;
n:=1;
h:=(b-a)/2; writeln('________________________________________________________________________');
write ('| N | A | X | B | F(A) | F(X) | F(B) | B-A | ');
while m2<=b do
begin
m1:=m2;
m2:=m2+h;
if ((f(m1)>=0) and (f(m2)<=0)) or((f(m1)<=0) and (f(m2)>=0)) then
begin
x1:=m1;
x2:=m2;
Writeln;
repeat
begin
x:=(x2+x1)/2;
y1:=f(x1);
y2:=f(x2);
y:=f(x);
Writeln ('| ',n,' | ',x1:6:3,' | ',x:4:3,'| ',x2:4:3,'| ',f(x1):8:4,'| ',
'| ',f(x):8:4,'|',f(x2):8:4,' | ',x2-x1:4:4,' | ');
n:=n+1;
mx1:=x1;
mx2:=x2;
If ((y1>=0) and (y<=0)) or((y1<=0) and (y>=0)) Then x2:=x else x1:=x
end;
until abs(mx2-mx1)/2<=eps;
n:=1;
end;
end;
write('------------------------------------------------------------------------');
readln;
end.