Программа
USES Crt,Graph; { Подключение модулей }
CONST PathToDriver=''; { Путь к графическому драйверу }
TYPE Func=Function(X:real):real; { Тип функция}
VAR GraphDriver:Integer; { Графический драйвер }
GraphMode:Integer; { Графический режим }
FUNCTION F(X:real):real;far; { Отображаемая функция }
Begin
F:=5*Sin(X*X)-X*X/2
End;
PROCEDURE OutGraph (Left,Right,Step:real;F:Func); { Процедура вывода графика }
Var ScaleX,ScaleY:real; { Масштабы по осям X и Y }
MaxY,MinY:real; { Максимальное и минимальное значения координаты Y }
i:integer; { Счетчик }
BufY:real; { Буферная переменная для сохранения значения координаты Y }
OXy,OYx:real; { Y-координата оси OX, X-соордината оси OY }
Begin
SetColor(White); { Установка белого цвета }
Rectangle(0,0,GetMaxX,GetMaxY); { Прорисовка рамки }
ScaleX:=(Right-Left)/(GetMaxX*8)*10; {Вычисление масштаба по оси X }
if ScaleX=0 then ScaleX:=1;
{ Если масштаб по оси X равен 0, то переопределение масштаба }
{ Поиск максимального и минимального значений функции на выводимом промежутке: }
MaxY:=F(Left); { Начальное определение максимума }
MinY:=MaxY; { Начальное определение минимума }
for i:=1 to Round((Right-Left)/Step) do
begin { Цикл просмотра значений функции на выводимом промежутке }
BufY:=F(Left+i*Step); { Вычисление функции в текущей точке }
if BufY>MaxY { Если значение функции перевосходит максимальное }
then MaxY:=BufY { то переопределение макс. значения функции }
else if BufY<MinY then { Иначе, если значение функции меньше
минимального, то переопределение минимального значения функции }
MinY:=BufY
end;
ScaleY:=(MaxY-MinY)/(GetMaxY*8)*10; { Вычисление масштаба по оси Y }
if ScaleY=0 then ScaleY:=1;
{ Если масштаб по оси Y равен 0, то переопределение масштаба }
MoveTo(Round(GetMaxX/10),Round(GetMaxY*9/10-(F(Left)-MinY)/ScaleY));
{ Помещение указателя в первую точку графика }
PutPixel(Round(GetMaxX/10),Round(GetMaxY*9/10-(F(Left)-MinY)/ScaleY),
White); { Прорисовка первой точки графика }
for i:=1 to Round((Right-Left)/Step) do { Цикл прорисовки графика }
LineTo(Round((0.1+i*Step/(Right-Left)*0.8)*GetMaxX),
Round(GetMaxY*9/10-(F(Left+i*Step)-MinY)/ScaleY));
{ Прорисовка линии от предыдущей точки к текущей }
OXy:=GetMaxY*9/10+MinY/ScaleY; { Вычисление Y-координаты оси OX }
{ Если Y-координата оси OX выходит за границу вывода, то переопределение
Y-координаты и определение типа линии: }
if OXy>GetMaxY*19/20
then begin
OXy:=GetMaxY*19/20; { Преопределение Y-координаты }
SetLineStyle(DashedLn,0,NormWidth) { Определение типа линии }
end
else if OXy<GetMaxY/20
then begin
OXy:=GetMaxY/20; { Преопределение Y-координаты }
SetLineStyle(DashedLn,0,NormWidth)
{ Определение типа линии }
end
else SetLineStyle(SolidLn,0,NormWidth);{ Определение типа линии }
Line(Round(GetMaxX/20),Round(OXy),Round(GetMaxX*19/20),Round(OXy));
{ Прорисовка оси OX }
{ Прорисовка стрелки на оси OX: }
SetLineStyle(SolidLn,0,NormWidth); { Определение типа линии }
Line(Round(GetMaxX*19/20),Round(OXy),
Round(GetMaxX*18.5/20),Round(OXy+GetMaxY/90));
Line(Round(GetMaxX*19/20),Round(OXy),
Round(GetMaxX*18.5/20),Round(OXy-GetMaxY/90));
OYx:=GetMaxX/10-Left/ScaleX; { Вычисление X-координаты оси OY }
{ Если X-координата оси OY выходит за границу вывода, то переопределение }
{ X-координаты и определение типа линии: }
if OYx>GetMaxX*19/20
then begin
OYx:=GetMaxX*19/20; { Преопределение Y-координаты }
SetLineStyle(DashedLn,0,NormWidth) { Определение типа линии }
end
else if OYx<GetMaxX/20
then begin
OYx:=GetMaxX/20; { Преопределение Y-координаты }
SetLineStyle(DashedLn,0,NormWidth)
{ Определение типа линии }
end
else SetLineStyle(SolidLn,0,NormWidth);{ Определение типа линии }
Line(Round(OYx),Round(GetMaxY/20),Round(OYx),Round(GetMaxY*19/20));
{ Прорисовка оси OY }
{ Прорисовка стрелки на оси OY: }
SetLineStyle(SolidLn,0,NormWidth); { Определение типа линии }
Line(Round(OYx),Round(GetMaxY/20),
Round(OYx+GetMaxX/120),Round(GetMaxY/20+GetMaxY*9/160));
Line(Round(OYx),Round(GetMaxY/20),
Round(OYx-GetMaxX/120),Round(GetMaxY/20+GetMaxY*9/160))
End;
VAR Ch:char;
BEGIN
GraphDriver:=Detect; { Автоматическое оперделение драйвера }
GraphMode:=0; { Задание графического режима }
InitGraph(GraphDriver,GraphMode,PathToDriver); { Инициалиэация графики }
OutGraph(-5,-2,0.01,F);
Ch:=ReadKey;
CloseGraph { Закрытие графического режима }
END.
Бесплатные примеры программ
Примеры написанных программ
Помощь студентам по программированию