Метод Ньютона.Построить график - Pascal

Формулировка задачи:

Я написал программу решения уравнение методом ньютона. Вот только нужно еще построить график на интервале [0;5]. И показать на графике эти точки.
program dot;
uses crt, graph ;
var le,x:double;
a,b,e: real;
 
function f1(x: double):double; {function}
  begin
  f1:= x*x-14*x+24;
  end;
function dfdx(x:double): double; {pohidna}
var dlt:real;
 begin
  dlt:=le-3;
  dfdx:=(f1(x+dlt)-f1(x-dlt))/(2*dlt);
 end;
   BEGIN
    begin
   Clrscr;
   a:=0; b:=5;
   write ('e= '); readln(e);
   clrscr;
   if f1(a)*dfdx(a)>0 then x:=a
   else x:=b;
   while abs(f1(x)/dfdx(x))>e do
    begin
    x:=x-f1(x)/dfdx(x);
     end;
writeln(' V intervali vid  ',a:0:0,'  do  ',b:0:0,'  z pohibkou  ',e:0:2);
writeln ('  x= ',x:0:2,'   f(x)=  ',  f1(x):0:2);
readln
  end;
   END.

Код к задаче: «Метод Ньютона.Построить график - Pascal»

textual
program dot;
uses crt, graph ;
function f1(x: double):double; {function}
begin
f1:= x*x-14*x+24;
end;
function dfdx(x:double): double; {pohidna}
var dlt:real;
begin
dlt:=1e-3;
dfdx:=(f1(x+dlt)-f1(x-dlt))/(2*dlt);
end;
var le,x,x1,a,b,e,mx,my:double;
    g,d,x0,y0,i:integer;
    s:string;
begin
Clrscr;
a:=0; b:=5;
write ('e= '); readln(e);
clrscr;
if f1(a)*dfdx(a)>0 then x1:=a else x1:=b;
while abs(f1(x1)/dfdx(x1))>e do
x1:=x1-f1(x1)/dfdx(x1);
writeln(' V intervali vid  ',a:0:0,'  do  ',b:0:0,'  z pohibkou  ',e:0:2);
writeln ('  x= ',x1:0:2,'   f(x)=  ',  f1(x1):0:2);
write('Press Enter');
readln;
{переход в графический режим}
initgraph(g,d,'');
x0:=50;
y0:=getmaxY div 2;
mx:=(getmaxX-x0-30)/b;{масштаб по Х}
my:=(y0-40)/f1(a);
line(0,y0,getmaxX,y0);{оси}
line(x0,0,x0,getmaxY);
for i:=1 to 6 do{максимальное количество засечек в одну сторону}
 begin
  line(x0-3,y0-round(i*my*5),x0+3,y0-round(i*my*5));{засечки на оси У}
  line(x0-3,y0+round(i*my*5),x0+3,y0+round(i*my*5));
  {подпись оси У}
  str(i*5,s);
  outtextXY(x0-35,y0-round(i*my*5),s);{соответственно засечкам}
  outtextXY(x0-40,y0+round(i*my*5),'-'+s);
  line(x0+round(i*mx),y0-3,x0+round(i*mx),y0+3); {засечки на оси Х}
  {подпись оси Х}
  str(i,s);
  outtextXY(x0+round(i*mx)+5,y0+10,s);
 end;
{центр}
outtextXY(x0-15,y0+10,'0');
{подписи концов осей}
outtextXY(getmaxX-10,y0-10,'X');
outtextXY(x0+5,10, 'Y');
{график}
x:=a;
setcolor(14);
while x<=b do
 begin
  if x=a then moveto(x0+round(x*mx),y0-round(f1(x)*my))
  else lineto(x0+round(x*mx),y0-round(f1(x)*my));
  x:=x+0.001;
 end;
{название}
outtextXY(100,10,'y=x^2-14x+24');
outtextXY(100,30,'int.[0;5]');
setcolor(10);
setfillstyle(1,10);
fillellipse(x0+round(x1*mx),y0-round(f1(x1)*my),3,3);
 
readln
end.

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

15   голосов, оценка 3.667 из 5


СОХРАНИТЬ ССЫЛКУ