Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Текст программы. { Программа Лабораторной работы N 8.
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
|