Есть программа отделяющая корни уравнений:
Код
uses crt;
var
a,b,x1,x2,y1,y2,h,w,y,e:real;
n,k:integer;
function f(x:real):real;
begin
f:=Sqr(x)-(0.1*exp(x))-5;
end;
begin
a:=-3;
b:=7;
h:=0.5;
clrscr;
k:=0; x1:=a; x2:=x1+h; y1:=f(x1); y2:=f(x2);
while x2<b do
begin y2:=f(x2);
if y1*y2<0 then
begin inc (k);
writeln(k,'-й корень[',x1:4:1,';',x2:4:1,']')
end;
x1:=x2; x2:=x1+h; y1:=y2;
end;
repeat until keypressed
end.
Есть еще кусок кода, уточняющий корни:
Код
repeat
writeLn('Введите точность в пределах от 0 до 1 eps=');
readln(eps);
until (eps >0) and (eps <1);
clrscr;
{n := 0;}
repeat
c:=(f(b)*a-f(a)*b)/(f(b)-f(a));
if f(a)*f(c) > 0 then a := c
else b := c;
{Inc(n)}
until abs((f(b)*a-f(a)*b)/(f(b)-f(a))-c)<eps;
x := c;
writeLn('Корень уравнения x=', x:10:7);
write('Для выхода нажмите Enter');
{writeLn('Количество итераций = ',n);}
Никак не могу слепить их воедино, чтобы программа сначала отделяла корни, а потом их уточняла.
По одиночке они работают, когда соединяю их прога зависает, видимо получается бесконечный цикл.