Текст программы

Program Graph_work;

{ Программа Лабораторной работы N 8.

Вариант N 31.

Построение графика функции.

А.Я.Умненькая, ст. гр. Я-007 }

Uses Graph,Crt,Print; {Print – только при наличии принтера для печати графика с экрана на бумагу }

Var

X,Y, { текущие значения переменных Х и Y }

Xmin,Xmax,{минимальное и максимальное значения Х на графике}

Ymin,Ymax,{минимальное и максимальное значения Y на графике}

DeltaX,DeltaY,{диапазоны изменения X и Y в пределах рисунка}

Dx, { шаг построения графика по Х }

Dxs,Dys, { Шаги разметки осей по Х и по Y }

Part,Pole, { Доля экрана, занятая рисунком и доля чистого поля с каждой стороны }

Mx,My {Коэффициенты пересчета Х в J и Y в I}

: real;

Imin,Imax, {координаты экрана, соответствующие Ymin и Ymax}

Jmin,Jmax, {координаты экрана, соответствующие Xmin и Xmax}

J,I, {текущие значения переменных координат экрана }

JAll,IAll, {Максимальные размеры экрана (в пикселях) по X,Y}

J0,I0, {Координаты на экране точки пересечения осей графика}

DeltaJ,DeltaI,{Экранные размеры рисунка по Х и Y в пикселях}

Nx,Ny {Шаги разметки осей Х и Y в пикселях }

: integer;

Riska : String[5]; {Строка для вывода чисел у рисок осей}

GraphDrv, {Тип графического драйвера }

GraphMode: integer; {Устанавливаемый графический режим}

Code: word; {Код завершения инициализации графики }

BEGIN { Начало программы }

{1.Задание констант, стандартных значений }

Xmin:=-1.0; Xmax:=2.0;

Dxs:=0.5; Dys:=1.0;

Part:=0.6; Dx:=0.2;

{2.Ввод исходных данных - в примере не используем}

{3.Печать исходных данных - в примере не используем}

{4.Расчет характеристик функций }

DeltaX:=Xmax-Xmin;

Ymin:=exp(Xmin);

Ymax:=exp(Xmax);

if Ymin>0 then Ymin:=0;

if Ymax<0 then Ymax:=0;

DeltaX:=Xmax-Xmin;

DeltaY:=Ymax-Ymin;

{5.Открытие графики с проверкой правильности срабатывания}

GraphDrv:=0; {пусть определяет режим сам }

InitGraph(GraphDrv,GraphMode,'C:\TP6\BGI');

Code:=GraphResult;

if Code<>0 then {если завершение с кодом не 0 - закончить программу}

Begin

writeln('Ошибка открытия графики с кодом: ',Code);

Halt; { Останов программы }

End;

{6.Настройка фона}

SetBkColor(15); {Фон белый }

ClearDevice; {Очистка экрана}

{7.Расчет параметров графика на экране}

JAll:=GetMaxX;

IAll:=GetMaxY;

Pole:=(1.0-Part)/2.0;

Jmin:=Round(Pole*JAll);

Jmax:=Round((1.0-Pole)*JAll);

Imin:=Round((1.0-Pole)*IAll);

Imax:=Round(Pole*IAll); { Imin > Imax !!! }

DeltaJ:=Jmax-Jmin;

DeltaI:=Imax-Imin;

{8.Расчет масштабных коэффициентов перехода от X к J и от Y к I}

Mx:=DeltaJ/DeltaX;

My:=DeltaI/DeltaY;

{9.Построение графика функции}

{9.1.Задание характеристик линии}

SetColor(4); { цвет красный }

SetLineStyle(3,0,3); { штриховая толстая }

{9.2.Начальная точка графика}

Nx:=Round(Dxs*Mx);

Ny:=Round(Dys*My); { Шаг разметки по Y - отрицательный }

J:=Jmin;

I:= Imin+Round((exp(Xmin)-Ymin)*My);

MoveTo (J,I);

{9.3.Цикл расчета экранных координат графика (X->J, X->Y->I) и проведения отрезков}

X:=0;

While X<=Xmax do

Begin

X:=X+Dx;

Y:=exp(X);

J:=Jmin+Round((X-Xmin)*Mx);

I:=Imin+Round((Y-Ymin)*My);

LineTo(J,I);

End;

{10.Построение осей 10.1.Задание характеристик линии }

SetColor(8); { цвет темно-серый }

SetLineStyle(0,0,3); { сплошная толстая }

{10.2.Построение осей }

J0:=Jmin+Round((0-Xmin)*Mx);

I0:=Imin+Round((0-Ymin)*My);

Line(J0,Imin,J0,Imax); {Построение оси Y (где X=0)}

Line(Jmin,I0,Jmax,I0); {Построение оси Х (где Y=0)}

{11.Разметка осей 11.1.Задание характеристик линии }

SetLineStyle(0,0,0); { сплошная тонкая }

{11.2.Характеристики шрифта для подписи значений }

SetTextStyle(0,0,0); { шрифт стандартный, подпись горизонтальна }

SetTextJustify(1,2); {Размещение текста симметрично, относительно заданной точки по горизонтали и ниже точки по вертикали}

{11.3.Цикл проведения разметки оси X, риски вверх от оси, по 10 пикселов }

J:=J0;

X:=0;

while J<=Jmax+1 do {от начала координат - вправо }

begin

Line(J,I0,J,I0-10);

Str(X:3:1,Riska);

OutTextXY(J,I0+5,Riska);

X:=X+Dxs;

J:=Jmin+Round((X-Xmin)*Mx);

end;

J:=J0;

X:=0;

while J>=Jmin do {от начала координат - влево }

begin

Line(J,I0,J,I0-10);

Str(X:3:1,Riska);

OutTextXY(J,I0+5,Riska);

X:=X-Dxs;

J:=J-Nx;

end;

{11.4.Цикл проведения разметки оси Y, риски вправо от оси, по 10 пикселов }

SetTextJustify(2,1); {Размещение текста симметрично, относительно заданной точки по вертикали и левее точки по горизонтали }

I:=I0;

Y:=0;

while I>=Imax do {от начала координат - вверх }

begin

Line(J0,I,J0+10,I);

Str(Y:3:1,Riska);

OutTextXY(J0-10,I,Riska);

Y:=Y+Dxs;

I:=I+Ny;

end;

{ Для данной функции ниже оси Х разметка не нужна}

I:=I0;

while I<=Imin do

begin

Line(J0,I,J0+10,I);

I:=I-Ny;

end;

{12.Подпись графика}

{12.1.Характеристики шрифта, цвет }

SetColor(1); { цвет синий }

SetTextJustify(1,1); {Размещение текста симметрично, относительно заданной точки по горизонтали и по вертикали}

{12.2.Вывод подписи }

I:=Round(IAll*(1-Pole/2)); {середина нижнего поля}

OutTextXY(JAll div 2,I,'График функции Y = exp(X)');

{13.Задержка графика на экране }

while Not KeyPressed do;

{14. Вывод графика на печать (на принтер) - только если он подключен }

Pr;

CloseGraph; {14.Закрытие графического режима }

END.

Рисунок 10. Результат работы программы 31-го варианта

Разбор контрольного варианта № 32