Текст программы
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,'D:\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
Задание
Построить график кривой, заданной параметрически: X=(2+0.5cos(8t))cos(t), Y=(2+0.5cos(8t))sin(t) для интервала t от 0 до 2π, нанести на график размеченные оси координат и сделать подпись.
Дополнительные требования: график изобразить тонкой сплошной линией красного цвета на белом фоне, координатные оси (толстая линия) и разметка (тонкая линия) – черного (темно-серого) цвета, подпись – синего цвета под графиком посередине.
Программу составить для EGA и VGA адаптеров (универсальную). Драйвер графического адаптера (с именем EGAVGA.BGI) находится в каталоге D:\TP6\BGI.
Условия, принятые из соображений дизайна:
График будет занимать 60% ширины и высоты экрана. Разметку проводим через 0.5 по Х и Y. График рисуем процедурой LineTo, для 400 точек.
Program Graph_work2;
{ Программа Лабораторной работы N 8
Вариант N 32.
Построение кривой, заданной параметрически.
А.Я.Умненькая, ст. гр. Я-007 }
Uses Graph,Crt; { Print - только при наличии принтера для печати графика с экрана на бумагу }
TYPE
mas=array[0..400] of real;
Var
X,Y:mas; { текущие значения переменных Х и Y }
Xmin,Xmax,t,tmin,tmax, { минимальное и максимальное значения Х на графике }
Ymin,Ymax, { минимальное и максимальное значения Y на графике }
DeltaX,DeltaY, { диапазоны изменения X и Y в пределах рисунка }
Dt,R, { шаг построения графика по t }
Xj,Yi,
Dxs,Dys, { Шаги разметки осей по Х и по Y }
Part,Pole, { Доля экрана, занятая рисунком и доля чистого поля с каждой стороны }
Mx,My {Коэффициенты пересчета Х в J и Y в I}
: real;
Imin,Imax, { координаты экрана, соответствующие Ymin и Ymax }
Jmin,Jmax, { координаты экрана, соответствующие Xmin и Xmax }
J,I,N,k, { текущие значения переменных координат экрана }
JAll,IAll, {Максимальные размеры экрана (в пикселях) по X и Y}
J0,I0, {Координаты на экране точки пересечения осей графика }
DeltaJ,DeltaI { Экранные размеры рисунка по Х и Y в пикселях}
: integer;
Riska : String[5]; { Строка для вывода чисел у рисок осей }
GraphDrv, { Тип графического драйвера }
GraphMode: integer;{ Устанавливаемый графический режим }
Code: word; { Код завершения инициализации графики }
BEGIN { Начало программы }
{1.Задание констант, стандартных значений }
tmin:=0; tmax:=2.0*Pi;
Dxs:=0.5; Dys:=0.5;
Part:=0.6; N:=401;
{4.Расчет характеристик функций }
Dt:=(tmax-tmin)/(N-1);
Xmax:=-100;
Xmin:=100;
Ymax:=-100;
Ymin:=100;
For k:=0 to N-1 do
begin
t:=tmin+Dt*k;
R:=2.0+0.5*cos(8.0*t);
X[k]:=R*cos(t);
Y[k]:=R*sin(t);
if X[k]>Xmax then Xmax:=X[k];
if X[k]<Xmin then Xmin:=X[k];
if Y[k]>Ymax then Ymax:=Y[k];
if Y[k]<Ymin then Ymin:=Y[k];
end;
DeltaX:=Xmax-Xmin;
DeltaY:=Ymax-Ymin;
{5.Открытие графики с проверкой правильности срабатывания}
GraphDrv:=0; {пусть определяет режим сам }
InitGraph(GraphDrv,GraphMode,'C:\voronov\STUD\TP\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(0,0,2);
{9.2.Начальная точка графика}
J:=Jmin+Round((X[0]-Xmin)*Mx);
I:=Imin+Round((Y[0]-Ymin)*My);
MoveTo (J,I);
{9.3.Цикл расчета экранных координат графика (X->J, Y->I) и проведения отрезков}
for k:=1 to N-1 do
Begin
J:=Jmin+Round((X[k]-Xmin)*Mx);
I:=Imin+Round((Y[k]-Ymin)*My);
LineTo(J,I);
End;
{10.Построение осей координат }
SetColor(8); { цвет темно-серый }
SetLineStyle(0,0,3); { сплошная толстая }
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.Разметка осей}
SetLineStyle(0,0,0); { сплошная тонкая }
SetTextStyle(0,0,0); { шрифт стандартный, подпись горизонтальна }
SetTextJustify(1,2); {Размещение текста симметрично, относительно заданной
точки по горизонтали и ниже точки по вертикали}
J:=J0;
Xj:=0;
while J<=Jmax+1 do {от начала координат - вправо }
begin
Line(J,Imin,J,Imax);
Str(Xj:3:1,Riska);
OutTextXY(J,I0+5,Riska);
Xj:=Xj+Dxs;
J:=Jmin+Round((Xj-Xmin)*Mx);
end;
J:=J0;
Xj:=0;
while J>=Jmin do {от начала координат - влево }
begin
Line(J,Imin,J,Imax);
Str(Xj:3:1,Riska);
OutTextXY(J,I0+5,Riska);
Xj:=Xj-Dxs;
J:=Jmin+Round((Xj-Xmin)*Mx);
end;
SetTextJustify(2,1); {Размещение текста симметрично, относительно заданной
точки по вертикали и левее точки по горизонтали }
I:=I0;
Yi:=0;
while I>=Imax-1 do {от начала координат - вверх }
begin
Line(Jmin,I,Jmax,I);
Str(Yi:3:1,Riska);
OutTextXY(J0-10,I,Riska);
Yi:=Yi+Dxs;
I:=Imin+Round((Yi-Ymin)*My);
end;
I:=I0;
Yi:=0;
while I<=Imin do {от начала координат - вниз }
begin
Line(Jmin,I,Jmax,I);
Str(Yi:3:1,Riska);
OutTextXY(J0-10,I,Riska);
Yi:=Yi-Dxs;
I:=Imin+Round((Yi-Ymin)*My);
end;
{12.Подпись графика}
SetColor(1); { цвет синий }
SetTextJustify(1,1); {Размещение текста симметрично, относительно заданной
точки по горизонтали и по вертикали}
I:=Round(IAll*(1-Pole/2)); {середина нижнего поля}
OutTextXY(JAll div 2,I,'X=(2+0.5cos(8t))cos(t), Y=(2+0.5cos(8t))sin(t)');
{13.Задержка графика на экране }
while Not KeyPressed do;
{14. Вывод графика на печать (на принтер) - только если он подключен }
{Pr;}
{14.Закрытие графического режима }
CloseGraph;
END.
Рисунок 11. Результат работы программы 32-го варианта
Варианты заданий
Таблица 29. Варианты заданий лабораторной работы N9
N вар | Функция или параметрическое уравнение | Аргумент и его диапазон | Цвет | |
текста/ фона | графика/ осей координат | |||
Парабола Y=1.3*X2-1.8 | X [-1.2, 1.2] | голубой белый | зеленый голубой | |
Окружность X=0.5+2*cos(t) Y=0.2+2*sin(t) | t [0, 2p] | красный темно-серый | светло-красный коричневый | |
Степенная функция Y=X3-2* X2+X | X [-1, 3] | розовый темно-серый | светло-зеленый светло-серый | |
Эллипс x=3*cos(t), y=15*sin(t) | t [0, 2p] | синий светло-серый | светло-синий темно-серый | |
Конхоида Никомеда X=A+B*cos(f) Y=A*tg(f)+B*sin(f) | f [1.5, 4.5] A=1, B=2 | светло-красный темно-серый | светло-зеленый красный | |
Кардиоида X=4*cos(t)*(1+cos(t)) Y=4*sin(t)*(1+cos (t)) | t [0, 2p] | розовый красный | синий розовый | |
Дробно-рациональная функция Y=(1.5*X+3)/(X-2) | X [-4.2,1.9] | светло-серый розовый | голубой желтый | |
Декартов лист X=3*A*t/(1+t3) Y=3*A*t*t/(1+t3) | t [-0.5,10] A=2 | синий белый | светло-синий светло-зеленый | |
Функция синус Y=2.5*sin(X)+0.5 | X [-2p, 2p] | белый зеленый | желтый коричневый | |
Циссоида X=5*t2/(1+t2), Y=5*t3/(1+t2), t=tg(f) | f [-p/4, p/4] | розовый черный | зеленый белый | |
Тригонометрическая функция Y=сos(X2) | X [-2p, 2p] | светло-зеленый светло-синий | белый розовый | |
Строфоида X=4*(t2-1)/(t2+1), Y=4*t*(t2-1)/(t2+1) t=tg(f) | f [-p/2.5, p/2.5] | темно-серый голубой | белый желтый | |
Тригонометрическая функция Y=tg(X)-2*X | X [-p/2.5, p/2.5] | зеленый синий | фиолетовый черный | |
Астроида X=3.5*cos3(t), Y=3.5*sin3(t) | t [0, 2p] | голубой белый | светло-зеленый зеленый | |
Арксинус Y=arcsin(0.5*X) | X [-2, 2] | темно-серый голубой | светло-зеленый зеленый | |
Эпициклоида X=(a+b)cos(t)-a*cos((a+b)*t/a), Y=(a+b)sin(t)-a*sin((a+b)*t/a) | t [0, 2p] a=6, b=9 | розовый фиолетовый | голубой синий | |
Логарифм Y=ln(X+2) | X [-1.5, 5] | зеленый красный | желтый светло-зеленый | |
Гипоциклоида X=2a*cos(f)+a*cos(2f) Y=2a*sin(f)-a*sin(2f) | f [-p, p] a=1 | белый розовый | темно-серый голубой | |
Арктангенс Y=3*arctg(X) | X [-5, 5] | светло-зеленый голубой | синий светло-синий | |
Эвольвента окружности X=a*cos(f)+a*f*sin(f) Y=a*sin(f)-a*f*cos(f) | f [-9p, 9p] a=1.5 | зеленый синий | голубой черный | |
Дробно-рациональная нелинейная функция Y = A + B/X + C/X2 | X [0.18, 3] A=1, B=2, C=-0.5 | темно-серый белый | фиолетовый красный | |
Леминиската X=r*cos(f) Y=r*sin(f) r=a*sqrt(2*cos(2f)) | f [-p, p] | светло-зеленый фиолетовый | синий белый | |
Локон Аньези Y=A3/(X2 + A2) | X [-5, 5] A=2 | зеленый белый | темно-серый светло-зеленый | |
Архимедова спираль X=r*cos(f) Y=r*sin(f) r=A*f | f [-6p, 6p] A=1.5 | розовый желтый | синий светло-красный | |
Трохоида(удлинненая циклоида) X=A*(f-B*sin(f)) Y=A*(1-B*cos(f)) | f [-2p, 4p] A=1.5, B=1.3 | темно-серый белый | светло-красный фиолетовый | |
Гиперболическая спираль X=(A*cos(f))/f Y=(A*sin(f))/f | f [0.1, 10] A=3 | фиолетовый зеленый | светло-зеленый розовый | |
Удлиненная эпициклоида X=5*cos(f)-2*cos(5f) Y=5*sin(f)-2*sin(5f) | f [-p, p] | светло-серый синий | светло-синий красный | |
Логарифмическая спираль X=r*cos(f) Y=r*sin(f) r=A*exp(B*f) | f [0, 4] A=1.3, B=0.5 | светло-зеленый синий | белый зеленый | |
Удлиненная гипоциклоида X=4*cos(f)+2*cos(4f) Y=4*sin(f)-2*sin(4f) | f [0, 2p] | темно-серый белый | синий зеленый | |
Улитка Паскаля X=2cos2(t)+3cos(t), Y=2*cos(t)sin(t)+3sin t | t [0, 2p] | коричневый желтый | зеленый синий | |
Показательная функция Y=exp(X2) | X [-1,2] | белый красный | красный темно-серый | |
X=(2+0.5cos(8t))cos(t), Y=(2+0.5cos(8t))sin(t) | t [0 до 2π] | синий белый | красный темно-серый |