Графическое решение системы нелинейных алгебраических уравнений - Pascal

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

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

Вообщем нужно написать программу на паскале, которая решает систему нелинейных алгебраических уравнений и строит графики. Программа по большому счёту уже сделана, но есть небольшие косяки. Поэтому и прошу помочь. Задание:
графически и численно решить систему нелинейных алгебраи-ческих уравнений, на примере поиска точек пересечения двух функций. Исходные данные: график строится по исходным данным, определяемым в виде констант в программе: а) координаты верхнего левого угла прямоугольника, в котором должен быть расположен график; б) размеры прямоугольника; в) количество линий координатной сетки по каждой из осей; г) диапазон изменения аргумента;

Вот исходники (вместе со всеми модулями):

8.rar

А вот так должна в идеале выглядеть эта программа:

res.rar Модули Consts, Types, Draw1 и Mathem1 врятли нужно менять Недочёты в Draw2, Mathem2 или самой программе, из за этого график и вылазиет за границы. Почти ко всем дествиям программы есть комментарии. Заранее благодарю!

Решение задачи: «Графическое решение системы нелинейных алгебраических уравнений»

textual
Листинг программы
{*********** Процедуры и функции для работы с графикой *************}
unit Draw2;
 
interface
uses consts,types,graph,crt,sysutils;
 { Нарисовать оси }
procedure DrawAxis(var Rect;Xo,Yo,Color:word);
 { Рисование граничных значений по углам рамки }
procedure DrawBounds(Xmin,Xmax,Ymin,Ymax:real;var Rect:trect;Color:word);
 { Рисование координатной сетки }
procedure DrawGridLines(NgrX,NgrY:word;var Rect:trect;Color:word);
 { Вывод координат точек пересечения }
procedure WriteCoord(var RootMas;K:word;var Rect;Color:word);
 
implementation
 
 
 { Нарисовать оси }
procedure DrawAxis(var Rect;Xo,Yo,Color:word);
var oldcolor:word;
begin
 oldcolor:=getcolor;
 setcolor(color);
 line(Xo,OriginY,Xo,OriginY+Ny);
 line(OriginX,Yo,OriginX+Nx,Yo);
 setcolor(oldcolor);
end;
 
 { Рисование граничных значений по углам рамки }
procedure DrawBounds(Xmin,Xmax,Ymin,Ymax:real;var Rect:trect;Color:word);
 
begin
   outtextxy(rect.origin.x,rect.origin.y+rect.size.y+15,floattostr(Xmin));
   outtextxy(rect.origin.x+rect.size.x,rect.origin.y+rect.size.y+15,floattostr(Xmax));
   outtextxy(rect.origin.x-30,rect.origin.y+rect.size.y,floattostr(Ymin));
   outtextxy(rect.origin.x-30,rect.origin.y,floattostr(Ymax));
 
end;
 
 { Рисование координатной сетки }
procedure DrawGridLines(NgrX,NgrY:word;var Rect:trect;Color:word);
var oldcolor:word;
    dx,dy,x0,y0,x1,y1:word;
begin
   oldcolor:=getcolor;
   setcolor(color);
   dx:=round(rect.size.x/ngrx);
   dy:=round(rect.size.y/ngry);
   y1:=rect.origin.y+rect.size.y;
   x0:=rect.origin.x;
   while x0<=(rect.origin.x+rect.size.x-1) do
     begin
         line(x0,rect.origin.y,x0,y1);
         x0:=x0+dx;
     end;
   y0:=rect.origin.y;
   x1:=rect.origin.x+rect.size.x;
   while y0<=(rect.origin.y+rect.size.y-1) do
     begin
         line(rect.origin.x,y0,x1,y0);
         y0:=y0+dy;
     end;
 
end;
 
 { Вывод координат точек пересечения }
procedure WriteCoord(var RootMas;K:word;var Rect;Color:word);
begin
 
end;
 
end.

Объяснение кода листинга программы

{* Процедуры и функции для работы с графикой ***} unit Draw2; interface uses consts, types, graph, crt, sysutils; { Нарисовать оси } procedure DrawAxis(var Rect: trect; Xo, Yo, Color: word); var oldcolor: word; begin oldcolor := getcolor; setcolor(color); line(Xo, OriginY, Xo, OriginY + Ny); line(OriginX, Yo, OriginX + Nx, Yo); setcolor(oldcolor); end; { Рисование граничных значений по углам рамки } procedure DrawBounds(Xmin, Xmax, Ymin, Ymax: real; var Rect: trect; Color: word); begin outtextxy(rect.origin.x, rect.origin.y + rect.size.y + 15, floattostr(Xmin)); outtextxy(rect.origin.x + rect.size.x, rect.origin.y + rect.size.y + 15, floattostr(Xmax)); outtextxy(rect.origin.x — 30, rect.origin.y + rect.size.y, floattostr(Ymin)); outtextxy(rect.origin.x — 30, rect.origin.y, floattostr(Ymax)); end; { Рисование координатной сетки } procedure DrawGridLines(NgrX, NgrY: word; var Rect: trect; Color: word); var oldcolor: word; dx, dy, x0, y0, x1, y1: word; begin oldcolor := getcolor; setcolor(color); dx := round(rect.size.x / NgrX); dy := round(rect.size.y / NgrY); y1 := rect.origin.y + rect.size.y; x0 := rect.origin.x; while x0 < = rect.origin.x + rect.size.x — 1 do begin line(x0, rect.origin.y, x0, y1); x0 := x0 + dx; end; y0 := rect.origin.y; x1 := rect.origin.x + rect.size.x; while y0 < = rect.origin.y + rect.size.y — 1 do begin line(rect.origin.x, y0, x1, y0); y0 := y0 + dy; end; end; { Вывод координат точек пересечения } procedure WriteCoord(var RootMas: TRootMas; K: word; var Rect: trect; Color: word); begin end; end.

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


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

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

12   голосов , оценка 4.167 из 5
Похожие ответы