Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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




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π] синий белый красный темно-серый



Поделиться с друзьями:


Дата добавления: 2014-11-06; Просмотров: 351; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.107 сек.