Program UniversalGraph;
Uses Graph;
Type
Fun = Function(X: Real): Real;
Procedure Graphic(F: Fun; XBeg, XEnd: Real);
Var
Max, Min, { Экстремальные точки функции в пределах диапазона }
I, { Переменная цикла }
Step, { Расчитываемый шаг }
GradX, { Приращение функции на один шаг по X }
GradY: Real; { Приращение функции на один шаг по Y }
GraphicX, { Координата по X }
GraphicY: Integer; { Координата по Y }
Flag: Boolean; { Флаг - перемещена первая точка }
Procedure Coord(CoordYBeg, CoordYEnd, CoordHMin, CoordHMax: Real);
Var
GradX, GradYX: Real;
X, Y: Integer;
Color: Word;
Begin
Color := GetColor;
SetColor(7);
GradX := GetMaxX / (CoordYEnd - CoordYBeg);
GradYX := GetMaxY / (CoordHMax - CoordHMin);
If (CoordYEnd > 0) And (CoordYBeg < 0) Then
Y := Round(GradX * (0 - CoordYBeg));
If CoordYEnd < 0 Then
Y := GetMaxY;
If CoordYBeg > 0 Then
Y := 1;
If (CoordHMin < 0) And (CoordHMax > 0) Then
X := Round(GradYX * (CoordHMax));
If CoordHMin > 0 Then
X := GetMaxY;
If CoordHMax < 0 Then
X := 1;
Line(1, X, GetMaxX, X); { Горизонтальная линия }
Line(GetMaxX - 4, X + 5, GetMaxX, X); { Стрелочка }
Line(GetMaxX - 4, X - 5, GetMaxX, X); { Стрелочка }
Line(Y, 1, Y, GetMaxY); { Вертикальная линия }
Line(Y - 5, 5, Y, 1); { Стрелочка }
Line(Y + 5, 5, Y, 1); { Стрелочка }
SetColor(Color);
End;
Begin
Step := (XEnd - XBeg) / (GetMaxY - 40);
I := XBeg;
Max := F(XBeg);
Min := F(XBeg);
While I <= (XEnd + Step) Do
Begin
If Max < F(I) Then
Max := F(I);
If Min > F(I) Then
Min := F(I);
I := I + Step;
End;
GradX := GetMaxX / (XEnd - XBeg);
GradY := GetMaxY / (Max - Min);
Coord(XBeg, XEnd, Min, Max);
Flag := True;
I := XBeg;
While I <= (XEnd + Step) Do
Begin
GraphicX := Round(GradX * (I - XBeg));
GraphicY := Round(GradY * (Max - F(I)));
If Flag Then
MoveTo(GraphicX, GraphicY);
{ PutPixel(GraphicX,GraphicY,15); }
LineTo(GraphicX, GraphicY);
I := I + Step;
Flag := False;
End;
End;
{$F+} { Ключи ассемблирования }
Function F1(X: Real): Real;
Begin
F1 := Sin(X) + COS(X / 2);
End;
Procedure GraphicIni;
Var
Mode, DriverDet: Integer;
Begin
Mode := 0;
DriverDet := Detect;
InitGraph(Mode, DriverDet, 'c:\BP\BGI');
SetColor(15);
End;
{$F-} { Ключи ассемблирования }
Begin
GraphicIni;
Graphic(F1, -10, 10);
ReadLn;
CloseGraph;
End.