Программа. Структура программы

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. Если сравнить приведенные программы, можно сде-|латъ вывод, что они позволяют с минимальными изменениями в ^программе вводить новые функции и параметры, расширяющие ^возможности при их исследовании.