Текст программы
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