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

Узнай цену своей работы

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

Я написал программу решения уравнение методом ньютона. Вот только нужно еще построить график на интервале [0;5]. И показать на графике эти точки.
Листинг программы
  1. program dot;
  2. uses crt, graph ;
  3. var le,x:double;
  4. a,b,e: real;
  5. function f1(x: double):double; {function}
  6. begin
  7. f1:= x*x-14*x+24;
  8. end;
  9. function dfdx(x:double): double; {pohidna}
  10. var dlt:real;
  11. begin
  12. dlt:=le-3;
  13. dfdx:=(f1(x+dlt)-f1(x-dlt))/(2*dlt);
  14. end;
  15. BEGIN
  16. begin
  17. Clrscr;
  18. a:=0; b:=5;
  19. write ('e= '); readln(e);
  20. clrscr;
  21. if f1(a)*dfdx(a)>0 then x:=a
  22. else x:=b;
  23. while abs(f1(x)/dfdx(x))>e do
  24. begin
  25. x:=x-f1(x)/dfdx(x);
  26. end;
  27. writeln(' V intervali vid ',a:0:0,' do ',b:0:0,' z pohibkou ',e:0:2);
  28. writeln (' x= ',x:0:2,' f(x)= ', f1(x):0:2);
  29. readln
  30. end;
  31. END.

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

textual
Листинг программы
  1. program dot;
  2. uses crt, graph ;
  3. function f1(x: double):double; {function}
  4. begin
  5. f1:= x*x-14*x+24;
  6. end;
  7. function dfdx(x:double): double; {pohidna}
  8. var dlt:real;
  9. begin
  10. dlt:=1e-3;
  11. dfdx:=(f1(x+dlt)-f1(x-dlt))/(2*dlt);
  12. end;
  13. var le,x,x1,a,b,e,mx,my:double;
  14.     g,d,x0,y0,i:integer;
  15.     s:string;
  16. begin
  17. Clrscr;
  18. a:=0; b:=5;
  19. write ('e= '); readln(e);
  20. clrscr;
  21. if f1(a)*dfdx(a)>0 then x1:=a else x1:=b;
  22. while abs(f1(x1)/dfdx(x1))>e do
  23. x1:=x1-f1(x1)/dfdx(x1);
  24. writeln(' V intervali vid  ',a:0:0,'  do  ',b:0:0,'  z pohibkou  ',e:0:2);
  25. writeln ('  x= ',x1:0:2,'   f(x)=  ',  f1(x1):0:2);
  26. write('Press Enter');
  27. readln;
  28. {переход в графический режим}
  29. initgraph(g,d,'');
  30. x0:=50;
  31. y0:=getmaxY div 2;
  32. mx:=(getmaxX-x0-30)/b;{масштаб по Х}
  33. my:=(y0-40)/f1(a);
  34. line(0,y0,getmaxX,y0);{оси}
  35. line(x0,0,x0,getmaxY);
  36. for i:=1 to 6 do{максимальное количество засечек в одну сторону}
  37.  begin
  38.   line(x0-3,y0-round(i*my*5),x0+3,y0-round(i*my*5));{засечки на оси У}
  39.   line(x0-3,y0+round(i*my*5),x0+3,y0+round(i*my*5));
  40.   {подпись оси У}
  41.   str(i*5,s);
  42.   outtextXY(x0-35,y0-round(i*my*5),s);{соответственно засечкам}
  43.   outtextXY(x0-40,y0+round(i*my*5),'-'+s);
  44.   line(x0+round(i*mx),y0-3,x0+round(i*mx),y0+3); {засечки на оси Х}
  45.   {подпись оси Х}
  46.   str(i,s);
  47.   outtextXY(x0+round(i*mx)+5,y0+10,s);
  48.  end;
  49. {центр}
  50. outtextXY(x0-15,y0+10,'0');
  51. {подписи концов осей}
  52. outtextXY(getmaxX-10,y0-10,'X');
  53. outtextXY(x0+5,10, 'Y');
  54. {график}
  55. x:=a;
  56. setcolor(14);
  57. while x<=b do
  58.  begin
  59.   if x=a then moveto(x0+round(x*mx),y0-round(f1(x)*my))
  60.   else lineto(x0+round(x*mx),y0-round(f1(x)*my));
  61.   x:=x+0.001;
  62.  end;
  63. {название}
  64. outtextXY(100,10,'y=x^2-14x+24');
  65. outtextXY(100,30,'int.[0;5]');
  66. setcolor(10);
  67. setfillstyle(1,10);
  68. fillellipse(x0+round(x1*mx),y0-round(f1(x1)*my),3,3);
  69.  
  70. readln
  71. end.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

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

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

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

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы