Исправьте ошибки пожалуйста, сами формулы записаны правильно. точность e=0.00001
Половинное деление...
Код:
program mdp;
function f(x: real): real;
begin
f:=exp(ln(0.5)*x)+1-exp(ln(x-2)*2);
end;
var a, b, e, c, x: real;
begin
a:=-7;
b:=-5;
write ('e=');
read(e);
c:=(a+b)/2;
while abs(b-a)>e do
begin
if f(a)*f(c)<0 then
b:=c
else
a:=c;
c:=(a+b)/2;
end;
x:=(a+b)/2;
writeln ('x=',x:3:3,' f(x)=',f(x):4:4);
end.
Метод Ньютона
Код:
uses Crt;
var x,a,b,e,x_old: real;
function f1(z: real): real; {Основная функция}
begin
f1:= x*x*x + x*x*2 + 2;
end;
function f2(z:real): real; {Производная от основной функции}
begin
f2:=3*x*x+4*x ;
end;
begin
Clrscr;
a:=-3;b:=1;
write('e=');readln(e);
clrscr;
if f1(a)*f2(a)>0 then x:=a
else x:=b;
while abs(f1(x))>e do //некорректно здесь, мне подсказывают...
begin
x:=x-f1(x)/f2(x);
end;
Writeln (' В интервале от ',a:0:0,' до ',b:0:0,' с погрешностью ',e:0:5);
Writeln ('x=',x:0:5,' f(x)=',f1(x):0:5);
Readln
end.