Построение графиков функции – неотъемлемая часть большинства программ, предназначенных для обучения математике и физике. в качестве примера приведена программа построения графика функции y=x*x*sin(1/x) на произвольном отрезке [a,b]. количество точек графика (параметр n) задается произвольно(точка x=0 исключается, так как в ней функция не определена). в программе так же определяются величины t =(x -x )/(b-a) и t=(y -y )/(2m), которые означают масштабы по осям X и Y. Графика рассматриваемой функции представлен на двух отрезках [a,b] и [-0.1;0.1]. Чтобы построить график другой функции, достаточно задать её аналический вид в описании функции (function f).
Program Prog;
Uses Graph;
Var Max, Min, A, B,H, X: Real
MaxX,MaxY : Integer
Function F(X:Real):Real;
Begin
F:=1;
(* If X<>0 Then F:=Abs(Sin(X)/X); *)
If X<>0 Then F:=(X*X)*Sin(1/X);
End;
Procedure GetMaxSize;
Begin
MaxX := GetMaxX;
MaxY := GetMaxY;End;
Procedure Coord (CoordA,CoordB,CoordMin,CoordMax,CoordH: Real);
Var GradX, GradY: Real;
X, Y: Integer;
Color: Word;
Begin
Color:=GetColor;
SetColor (15);
GradX := MaxX / (CoordB - CoordA);
GradY := MaxY / (CoordMax-CoordMin);
If (CoordB>0) And (CoordA<0) Then Y:=Round(GradX*(0-CoordA));
If CoordB<0 Then Y:=MaxX;
If CoordA>0 Then Y:=0 ;
If (CoordMin<0) And (CoordMax>0) Then X:=Round(GradY*(CoordMax));
If CoordMin>0 Then X:=MaxY;
If CoordMax<0 Then X:=0 ;
Line (0,X,MaxX,X);
Line (Y,0,Y,MaxY);
Line (0, X, MaxX,X);
Line (MaxX-5,X+5,MaxX,X);
Line (MaxX-5,X-5,MaxX,X);
OutTextXY (MaxX-10,X-20,'X');
Line (Y,0,Y,MaxY);
Line (Y-5,5,Y,0);
Line (Y+5,5,Y,0);
OutTextXY (Y+10,5,'Y');
SetColor (Color);End;
Procedure Graphic (GraphA,GraphB,GraphMax,GraphMin,GraphH: Real);
Var GradY, GradX, GraphicY, GraphX: Real;
GraphicHx, GraphicHy: Integer;
Flag: Boolean;Begin
Coord (GraphA,GraphB,GraphMin,GraphMax,GraphH);
Flag:=True;
GradX := MaxX / (GraphB - GraphA);
GradY := MaxY / (GraphMax-GraphMin);
GraphX:=GraphA;
While (GraphX<=GraphB) Do
Begin
GraphicHx:=Round (GradX * ( GraphX - GraphA));
GraphicHy:=Round (GradY * ( GraphMax - F(GraphX)));
If Flag Then MoveTo (GraphicHx,GraphicHy);
LineTo(GraphicHx,GraphicHy);
GraphX:=GraphX+GraphH;
Flag:=False; End; ReadLn;
ClearDevice;End;
Procedure GraphicIni;
Var Mode, DriverDet: Integer;
Begin
Mode:=0; DriverDet:=Detect;
InitGraph(Mode,DriverDet,'c:\TP\BGI');
SetColor(White);
Function FunMax(FunA,FunB,FunH:Real):Real;
Var FunX : Real;
Fun : Real;
Begin
Fun:=F(FunA);
FunX:=FunA;
While (FunX<=FunB) Do
Begin
If Fun<F(FunX) Then Fun:=F(FunX);
FunX:=FunX+FunH; End;
FunMax:=Fun;End;
Function FunMin(FunA,FunB,FunH:Real):Real;
Var FunX : Real;
Fun : Real;
Begin
Fun:=F(FunA);
FunX:=FunA;
While (FunX<=FunB) Do
Begin
If Fun>F(FunX) Then Fun:=F(FunX);
FunX:=FunX+FunH; End;
FunMin:=Fun; End;
Begin
Write ('введите начало диапазона: ');
ReadLn (A);
Write ('введите конец диапазона: ');
ReadLn (B);
Write ('введите шаг вычисления: ');
ReadLn (H);
Max:=FunMax(A,B,H);
Min:=FunMin(A,B,H);
GraphicIni;
GetMaxSize;
Graphic (A,B,Max,Min,H);
CloseGraph;End.
Задания для самостоятельного выполнения
1. Постройте линии для функции гистограмм и диаграмм.