You are on page 1of 2

program Metoda3_b_t_c;(* PR5.

PAG 35*)
uses crt;
var a,b,e,x0:real;
k, n:integer;
function f(x:real):real;
begin f:=x*x*x*X*X-x*4+9;end;
function fp(x:real):real;
begin fp:=5*x*x*X*X-4;end;
function fpp(x:real):real;
begin fpp:=20*x*X*X;end;
function bisect_apost(a,b,e:real;var n:integer ):real;
var x:real;
begin
x:=(a+b)/2;
n:=0;
while (abs(b-a)>=e) and (abs(f(x))>=e) do
begin n:=n+1;
if f(a)*f(x)<0 then b:=x else a:=x;
x:=(a+b)/2;
end;
bisect_apost:=x;
end;

function bisect_apriori(a,b,e:real;var n:integer):real;


label 1;
var x:real; i:integer;
begin
n:=trunc(ln((b-a)/e)/ln(2))+1;
for i:=1 to n do
begin
x:=(a+b)/2;
if f(x)=0 then goto 1;
if f(a)<0 then if f(x)<0 then a:=x else b:=x
else if f(x)<0 then b:=x else a:=x;
end;
1: bisect_apriori:=x;
end;

function coarda(a,b,e:real;var n:integer):real;


var c0,c1,d:real; {c0, c1 puncte de intersectie a 2 coarde vecine}
begin
c0:=(a*f(b)-b*f(a))/(f(b)-f(a)); {ecuatia coardei}
n:=0;
repeat
n:=n+1;
if f(a)<0 then if f(c0)<0 then a:=c0 else b:=c0 {schimbarea extremitatilor}
else if f(c0)<0 then b:=c0 else a:=c0;
c1:=c0;
c0:= (a*f(b)-b*f(a))/(f(b)-f(a));
d:=abs(c0-c1) {distanta dintre a 2 coarde vecine}
until (d<e) or (abs(f(c1))<e); {controlul conditiei de trasare a coardelor}
coarda:= c0;
end;
function Newton (x0,e:real):real;
var x,d:real;
begin n:=0;
repeat
n:=n+1;
x:=x0-f(x0)/fp(x0);
d:=abs(x-x0);
x0:=x;
until (d<e) or (abs(f(x))<e);
newton:=x;
end;

begin clrscr;
write('Introduceti a : '); readln(a);
write('Introduceti b : '); readln(b);
{write('Introduceti e : '); readln(e);}
e:=0.1;
if f(a)*f(b)=0
then if f(a)=0 then writeln(a:0:6) else writeln(b:0:6)
else if f(a)*f(b)<0 then
begin
for k:=1 to 5 do
begin textcolor(k+1);
writeln('Bisect_aposteriori x= ',bisect_apost(a,b,e,n):10:6, '
numarul de iteratii ',n:4,' e=',e:10:k);
writeln('Bisect_apriori x= ',bisect_apriori(a,b,e,n):10:6,'
numarul de iteratii ',n:4,' e=',e:10:k);
writeln('Solutia m.coardelor x= ',coarda(a,b,e,n):10:6, '
numarul de coarde ',n:4,' e=',e:10:k);
if (f(a)*fpp(a)<0) and (f(b)*fpp(b)<0) then writeln('Metoda nu poate fi
aplicata pe acest interval')
else
begin
if f(a)*fpp(a)>0 then x0:=a else x0:=b;
writeln ('Solutia m.tangentelor x=',newton (x0,e):10:6, '
numarul de tangente ',n:4,' e=',e:10:k);
end;
e:=e/10; writeln;writeln;
end end
else writeln('Metoda nu se aplica');
readln
end.

You might also like