Построить график функции - Turbo Pascal (29064)
Формулировка задачи:
помогите пожалуйста сделать график функции у=(корень х)+х2( х в квадрате)
Решение задачи: «Построить график функции»
textual
Листинг программы
uses
Graph;
type
tFunc= function(x: double): double;
var
gd,gm,i,j: integer;
i1,i2,j1,j2: integer;
x1,x2,y1,y2: double;
function WinX(x: double): integer;
begin
WinX:= Round((x-x1)/(x2-x1)*(i2-i1)) + i1
end;
function WinY(y: double): integer;
begin
WinY:= j2-Round((y-y1)/(y2-y1)*(j2-j1))
end;
procedure WinSet(u1,v1,u2,v2: double; a1,b1,a2,b2: integer);
begin
if a1<0 then i1:= GetMaxX+a1 else i1:= a1;
if b1<0 then j1:= GetMaxY+b1 else j1:= b1;
if a2<0 then i2:= GetMaxX+a2 else i2:= a2;
if b2<0 then j2:= GetMaxY+b2 else j2:= b2;
x1:= u1;
y1:= v1;
if u2<=u1 then x2:= x1+(v2-v1)/(j2-j1)*(i2-i1) else x2:= u2;
if v2<=v1 then y2:= y1+(u2-u1)/(i2-i1)*(j2-j1) else y2:= v2
end;
procedure WinFrame(col: integer);
begin
SetColor(col);
Rectangle(i1,j1,i2,j2)
end;
procedure WinAxisX(y,d: double; col,mark: word);
var
x: double;
s: string;
begin
SetColor(col);
SetLineStyle(SolidLn,0,3);
Line(i1,WinY(y),i2,WinY(y));
x:= Trunc(x1/d)*d;
if x1>0 then x:=x+d;
SetLineStyle(SolidLn,0,1);
while x<x2 do begin
x:=x+d;
if abs(x)>1e-16 then begin
Line(WinX(x),WinY(y)+mark,WinX(x),WinY(y)-mark);
Str(x:0:1,s);
OutTextXY(WinX(x)-TextWidth(s) div 2,WinY(y)+mark*2,s)
end
end;
end;
procedure WinAxisY(x,d: double; col,mark: word);
var
y: double;
s: string;
begin
SetColor(col);
SetLineStyle(SolidLn,0,3);
Line(WinX(x),j1,WinX(x),j2);
y:= Trunc(y1/d)*d;
if y1>0 then y:=y+d;
SetLineStyle(SolidLn,0,1);
while y<y2 do begin
y:=y+d;
if abs(y)>1e-16 then begin
Line(WinX(x)+mark,WinY(y),WinX(x)-mark,WinY(y));
Str(y:0:1,s);
OutTextXY(WinX(x)-TextWidth(s)-mark*2,WinY(y)-TextHeight(s) div 2,s)
end
end;
end;
procedure WinPlot(f: tFunc; x1,x2,d: double);
var
x: double;
begin
MoveTo(WinX(x1),WinY(f(x1)));
x:= x1;
while x<x2 do begin
LineTo(WinX(x),WinY(f(x)));
x:= x+d
end;
MoveTo(WinX(x2),WinY(f(x2)))
end;
{ тут реализуете свою функцию }
function MyFunc(x: double): double;
begin
MyFunc:= Sqrt(x) + Sqr(x)
end;
begin
gd:= Detect;
InitGraph(gd,gm,'');
WinSet(-1,-1,10,-1,20,20,GetMaxX div 2,-20);
WinFrame(DarkGray);
WinAxisX(0,1,LightGray,5);
WinAxisY(0,1,LightGray,5);
SetLineStyle(SolidLn,0,Yellow);
WinPlot(@MyFunc,0,x2,0.01);
readln;
CloseGraph
end.
Объяснение кода листинга программы
В данном коде используется библиотека Graph, которая позволяет создавать графики функций. Переменные и функции объявлены следующим образом:
- gd, gm, i, j: integer;
- i1, i2, j1, j2: integer;
- x1, x2, y1, y2: double;
- tFunc - тип функции, которая будет строиться;
- MyFunc - функция, которую мы будем использовать для построения графика;
- WinX, WinY, WinSet, WinFrame, WinAxisX, WinAxisY, WinPlot - процедуры, которые отвечают за построение осей и графика функции. В функции WinSet устанавливаются начальные значения координат для осей x и y. Затем в функциях WinAxisX и WinAxisY строятся оси x и y соответственно. В функции WinPlot строится график функции. Функция MyFunc используется для вычисления значения функции в точке x. В конце программы закрывается графический редактор.