Построить график функции a^2*x^3-y^2=0 — Pascal(Паскаль)

program EvgeniiSp;
uses GraphABC, Events;
 
//------- Solution ------//
 function Solution(a,x: real): real;
  begin
   result:=sqrt(sqr(a)*power(x,3));  // åñëè õn - îòðàöèòåëåí, òî áðàòü abs(x);
  end;
 
//-------- Drawing_graph ------//
 procedure Drawing_graph(color: integer);
  const
   a = 5;
   dx = 0.1; xn = 1; xk = 25;
  var
   ww,wh,xs,ys: integer;
   x,y,ymax,xmax: real;
 
 //------- Conversion_y ------//
  function LogicToScreen_y(y: real): real;
   begin
    result:=(wh div 2)*y/ymax;
   end;
 
 //------- Conversion_x ------//
  function LogicToScreen_x(x: real): real;
   begin
    result:=(ww div 2)*x/xmax;
   end;
 
  begin
   y:=0;
   SetPenWidth(1);
   ww:=WindowWidth;
   wh:=WindowHeight;
   SetPenColor(clGray);
   TextOut((ww div 2)-10,(wh div 2)+4,'0');
   moveTo(0,wh div 2);
   lineTo(ww,wh div 2);
   TextOut(ww-12,(wh div 2)+3,'X');
   moveTo(ww div 2,0);
   lineTo(ww div 2,wh);
   TextOut((ww div 2)+5,3,'Y');
//-------------------------
   x:=xn;
   ymax:=0;
   xmax:=0;
   while x <= xk do
    begin
     y:=Solution(a,x);
     if abs(y) > ymax then ymax:=abs(y);
     if abs(x) > xmax then xmax:=abs(x);
     x:=x+dx;
    end;
//-------------------------
   x:=xn;
   SetPenWidth(1);
   SetPenColor(color);
   while x <= xk do
    begin
     y:=Solution(a,x);
     ys:=Round(LogicToScreen_y(y));
     xs:=Round(LogicToScreen_x(x));
     if x = xn then moveTo((ww div 2)+xs,(wh div 2)-ys)
        else lineTo((ww div 2)+xs,(wh div 2)-ys);
     x:=x+dx;
    end;
   Redraw;
  end;
 
//-------- Resize ------//
 procedure Resize;
  begin
   ClearWindow;
   Drawing_graph(clRed);
   Redraw;
  end;
 
begin
 SetWindowCaption('Ãðàôèê ôóíêöèè.');
 SetWindowSize(700,500);
 LockDrawing;
 CenterWindow;
 Drawing_graph(clRed);
 OnResize:=Resize;
end.

Вариант 2

uses crt,graph;
const
x1=0;{начало и конец графика в пикселах без коэффициентов}
x2=30;
var
a,x,dx,y1,y:real;
mx,my,x0,y0,grD,px,py1,grM,i:integer;
s,s1:string;
begin
clrscr;
writeln('Grafik functii a^2*x^3-y^2=0 <-> y=a*x*x^0.5');
writeln('      oblast opredelenia x>=0');
writeln;
write('a=');readln(a);
grD:=detect;
initgraph(grD,GrM,'');
X0:=10;{начало координат}
Y0:=470;
mx:=30; my:=20; {коэффициенты по осям подогнаны под реальный график}
SetBkColor(7); {цвет фона}
setlinestyle(0,0,1);{сплошная линия}
SetColor(1);{цвет линий осей}
line(x0,y0,630,y0); {ось Х}
line(x0,y0,x0,0); {ось У}
setlinestyle(1,0,0);  {пунктирная линия}
Setcolor(9);  {цвет сетки}
for i:=1 to 11 do   {максимальное количество засечек в одну сторону}
   begin
    line(x0,y0-i*50,630,y0-i*50);     {засечки на оси У}
    line(x0+i*50,0,x0+i*50,480); {засечки на оси Х}
    {подпись оси У}
    str(i,s);
    outtextXY(x0+5,y0-i*50,s);{соответственно засечкам}
    {подпись оси Х}
    str(-i,s1);
    outtextXY(x0+i*50,y0-10,s);
   end;
{подписи концов осей}
outtextXY(getmaxX-10,y0-10,'X');
outtextXY(x0+10,5, 'Y');
dx:=0.001;
x:=x1;
while x<=x2 do
   begin
     px:=x0+round(x*mx); {изменение по оси Х}
     y1:=a*x*sqrt(x); {график}
     py1:=y0-round(y1*my);
     Putpixel (px,py1,4);
     x:=x+dx; {наращиваем х}
   end;
readln;
closegraph
end.

Leave a Comment

59 − = 57