КАТЕГОРИИ: Архитектура-(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
Дата добавления: 2014-11-06; Просмотров: 377; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |