Программа. Структура программы
program Graphics;
uses Crt, Graph ;
const n=640; {Количество точек }
xStart=-5; { Начальное значение аргумента }
xEnd=5; { Конечное значение аргумента }
var xPos : integer; { Позиция по горизонтали }
yPos : integer; { Позиция по вертикали }
х : real; { Аргумент ]
у : array [1..n] of real; { Массив значений функции }
h : real; { Шаг изменения аргумента }
yMin :real; { Наименьшее значение }
уМах : real; { Наибольшее значение }
i, j : integer;
Gd : integer; { Графический драйвер }
Gm : integer; { Графический режим }
function f(x : real) : real;
begin
f:=x*x*x/(2*(x+1)*(x+1));
end; { f }
function f2(x:real) : real;
begin
f2 :=x/2-l;
end; { f2 }
begin { Табулирование функции )
x := xStart;
h : = (xEnd -xStart) / (n-1) ;
for i := 1 to n do begin
y[i] :=f(x);
if y[i] < -6 then
y[i] :=-6;
x := x+h;
end;
{-- Определение наибольшего и наименьшего значений. --} уМах:=у[1];
yMin:=y[1];
for i : = 1 to n do begin
if y[i] >yMax then yMax :sy [i];
if y[i] <yMin then yMin:=y[i];
end;
[----.---- Устанавливаем графический режим -----"-} Gd := Detect; ^ ' lnit<3raph (Gd, Gm, 1 D s \TP7 \BGI');
[------.-.-.---.-.--.- Выводим заголовок ---"-.---------)
SetTextStyle(Oe^£aultFont, HorizDir,3);
SetTeXt Justify (Center-Text, TopText);
OutTextXY(GetM§^X div 2, 0, 'График функции/) ;
^^l/^l•'•lll'l<-'r'fl•"•l'•":/:'"' •111' 1 ^bow а1"1 "1 ^ --.--.< ------—*--.-Проводим ось Х "---"""------}
SetTextStyle(DefaultFont, HorizDir, 2);
yPos : = Trunc<GetMaxY+yMin/ (yMax.-yMin) *GetMaxY) ;
Lihe(0, yPos, GetMaxX, yPos);
OutTextXY(GetMaxX-10, yPos-20, 'X');
SetLineStyletCenterLn, 0, NormWidth) ;
SetColor (Magenta);
(---.--^-.--- Выводим горизонтальную сетку "----".--} 'for i:=-6 to'2 do begin ^1;;. ^--.^л^. • '<"llcl"l'•;•'; -'• if i== 0 then <
SetColor(LightGreen) < else
SetColor(Green);
yPos : = GetMaxY-Trunc ((i-yMin) / (yMax-yMin) * GetMaxY);
Line(0, yPos, GetMaxX, yPos);
end;
{----.--..-.--.- Выводим вертикальную сетку -----------)
for i :== 0 to 10 do begin if i = 5 then
SetColor(LightGreen) else
SetColor(Green);
xPos : =Trimc (GetMaxX/10* i) ;
Line(xPos, 0, xPos, GetMaxY);
end;
{--- Определяем первую точку графика и помещаем -"} '
{--------«--.-- в нее текущий указатель -------------у
xPos ; = 0;
yPos : = GetMaxY-Trunc ((у [ 1] -yMin) / (yMax-yMin) * ' GetMaxY);
MoveTo(xPos, yPos);
{-- Для-остальных точек определяем точки графика "} ^--.--.---.-.- и соединяемих отрезками прямой -"-------)
SetLineStyle(SolidLn, 0, Thi^kWidth) ;
SetColor(Yellow);
for i := 2 to n do begin
xPos :=Trunc(GetMa3CX/(n-l)*(i-l));
yPos := GetMaxY-Trunc ((y[i] -yMin) / (yMax-yMih) * GetMaxY);
if yli] > -6 then
LineTo(xPos, yPos) else
MoveTo(xPos, yPos);
Delay(10);_ end;
{"---"- Табулирование функции асимптоты ----"--} х := xStart;
h := (xEnd-xStart)/(n-l);
for i : =1 to n do begin
y[i]:=f2(x);
x : = x+h;
end;
{-.-„ Определяем первую точку графика асимптоты --"} {"------ помещаем в нее текущий указатель "--"--}
xPos := 0;
yPos : = GetMaxY-Trunc ((у [ 1] -yMin) / (yMax-yMin) * GetMaxY);
MoveTo(xPos, yPos);
{ Для последней точки асимптоты определяем координаты} {-.-------.----- и соединяемих прямой -"---"-----}
SetLineStyle(CenterLn, 0, NonnWidth);
SetColor(White);
xPos :=GetMaxX;
yPos : = GetMaxY-Trunc ((y[n] -yMin) / (yMax-yMin) * GetMaxY);
LineTo(xPos, yPos); \
repeat until KeyPressed;
CloseGraph;
end.
В приведенной программе число точек установлено равным 640, начальное и конечное значения аргумента задаются константами xStart = -5 и xEnd = 5. В программе организована подпрограмма — функция с именем Р2 для расчета значений асимптоты. Формирование асимптоты не отличается от формирования графика и снабжено необходимыми комментариями.
Для построения графиков других функций достаточно записать выражение исследуемой функции в процедуре F, задать число точек N, а также начальное (xStart) и конечное (xEnd) значения интервала изменения аргумента.
Рассмотрим применение графического режима при построении графика функции
fl, еслих =0;
У=\ .9/9
[smx'/x-^ еслих>0.
Интервал изменения аргумента Х в диапазоне от 0 до 5, число точек в строке N= 100.
program Graphics;
uses Crt, Graph ;
const n=100; < Количество точек }
xStart = 0; < Начальное значение аргумента ) xEnd=5; { Конечное значение аргумента }
var xPos : integer; { Позиция по горизонтали ) yPos : integer; { Позиция по вертикали } х : real; { Аргумент } у : array [I, .n] of real; { Массив значений
функции }
h : real; { Шаг изменения аргумента } yMin : real; { Наименьшее значение ) уМах : real; { Наибольшее значение } i., j : integer;
Gd : integer; { Графический драйвер } On : integer; { Графический режим }
function f(x : real) : real;
Begin
if x = 0 then
f :=1 else
f := Sin(Sqr(x)) /Sqr(x) ;
end; { f }
begin < Табулирование функций } x:= xStart;
h := (xEnd-xStart) / (n-1) ;
for i : = 1 to n do begin *-—' y[i] :==f(x);
x :=x+h;
end;
{- Определение наибольшего и наименьшего значений -} уМах:=у[1];
yMin := у [1];
for i := 1 to n do begin if ylil >yMax then yMax:=y[i];
if yli] <yMin then yMin:=y[il;
end;
^------- Устанавливаем графический режим ------")
Gd г = Detect;
3,nitGraph(Gd, Gm, 'C:\TP70\BGI') ;
(--------.------- Выводил заголовок "------""-.-.-}
SetTextStyle(DefaultFont, HorizDir, 3);
SetTextJustifyfCenterText, TopText);
OutTextXY(GetMaxX div 2; 0, 1 График функции');
{-..--.---.-.-„„„.--... Проводим oci» Х -""--"""-----} SetTextStyle(OefaultFont, HorizDir, 2);
yPos : = Trunc (GetMaxY+yMin/ (yMax-yMin) *GetMaxY) ;
Line(0, yPos, GetMaxX, yPos);
OutTextXY(GetMaxX-10, yPos-20, 'X');
SetLineStyle(CenterLn, 0, NormWidth) ;
SetColor(Magenta);
{„--- --.„- Выводим горизонтальную сетку -"-------}
for i :== -10 to 10 do begin
yPos : s= GetMaxY-Trunc ((i/10-yMin) / (yMax-yMin) * GetMaxY);
Line(0, yPos, GetMaxX, yPos);
end;
{---.--.,----- Выводим вертикальную сетку ----""---} for i := 0 to 5 do begin xPos : = Trunc (GetMaxX/5 *i) ;
Line(xPos, 0, xPos, GetMaxY);
end;
{"- Определяем первую точку графика и помещаем ---} {-.-------.----- в нее текущий указатель -------------}
xPos :== 0;
yPos : = GetMaxY-Trunc ((y[l] -yMin) / (yMax-yMin) * GetMaxY) ;
MoveTo(xPos, yPos);
{-- Для остальных точек определяем точки графика --} {-----"--- и соединяемих отрезками прямой ---------}
<^ SetLineStyle(SolidLn, 0, ThickWidth) ;
— SetColor(Yellow);
for i:?=2 to n do begin
xPos : = Trunc (GetMaxX/(n-l)*(i-l)) ;
yPos : =GetMaxY-Trunc ((y[ij -yMin) / (yMax-yMin) * GetMaxY);
LineTo(xPos, yPos); / Delay(lOO);
end;
repeat until KeyPressed;
CloseGraph;
end.
| При исследовании графика можно выделить отдельные облас-|ти и просмотреть его поведение, задавая различные параметры. |Например, чтобы изменить масштаб представления графика, достаточно изменить в программе значение xStart с 0 на -10 и xEnd |с 5 на 10. Если сравнить приведенные программы, можно сде-|латъ вывод, что они позволяют с минимальными изменениями в ^программе вводить новые функции и параметры, расширяющие ^возможности при их исследовании.