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

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: