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.