Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Стандартный модуль работы с графическим экраном Graph
1) назначение модуля Подключаются процедуры и функции по работе с экраном в графическом режиме, т.е. когда доступной становится любая точка (пиксель) экрана. Для их использования необходимо:
2) координаты экрана Определяются возможностями видеосистемы ПЭВМ. Обычно стараются использовать наилучший возможный режим экрана { *** функции, связанные с координатами *** } function GetX: integer; – получить текущую координату X; function GetY: integer; – получить текущую координату Y; function GetMaxX: integer; – получить максимально возможную координату экрана по X; function GetMaxY: integer; – получить максимально возможную координату экрана по Y; 3) управление графическим режимом { *** определение, инициализация и восстановление текстового режима *** } procedure DetectGraph (var GraphDriver, GraphMode: integer); – получение возможного типа драйвера и графического режима по установленным аппаратным средствам; procedure InitGraph (var GraphDriver: integer; var GraphMode: integer; PathToDriver: String); – инициализировать графический режим экрана; function GetMaxMode: integer; – получение наилучшего графического режима для данной ПЭВМ; procedure SetGraphMode (Mode: integer); – задание графического режима; function GetGraphMode: integer; – получение текущего графического режима; procedure GraphDefaults; – установление графических параметров по-умолчанию (стандартных) procedure RestoreCrtMode; – возвращение экрана в состояние, которое было до установления графики procedure CloseGraph; – закрытие графического режима.
{ Коды завершений графических операций: } grOk = 0; – без ошибок. grNoInitGraph = -1; – не загружен драйвер графического режима. grNotDetected = -2; – не определен тип видеокарты. grFileNotFound = -3; – не найден файл с драйвером. grInvalidDriver = -4; – ошибка работы драйвера. grNoLoadMem = -5; – не хватает места в ОП для загрузки драйвера. grNoScanMem = -6; – выход за пределы памяти при сканирующем заполнении grNoFloodMem = -7; – выход за пределы памяти при заливке. grFontNotFound = -8; – не найден заказанный шрифт. grNoFontMem = -9; – не хватает места в ОП для загрузки шрифта. grInvalidMode = -10; – неверный режим графики. grError = -11; – ошибка графической операции. grIOerror = -12; – ошибка графического ввода/вывода grInvalidFont = -13; – ошибка в файле шрифта. grInvalidFontNum = -14; – недопустимый номер шрифта.
{ *** Функции, возвращающие сведения об ошибках *** } function GraphErrorMsg (ErrorCode: integer): String; – название ошибки по коду; function GraphResult: integer; – код ошибки последней графической операции.
4) управление экраном и окном { *** экран, окна, сохранение и восстановление окон *** } procedure ClearDevice; – очиска грфического экрана цветом фона. Текущий указатель в левом верхнем углу; procedure SetViewPort (x1, y1, x2, y2: integer; Clip: boolean); – задание границ окна и типа отсечения; procedure GetViewSettings (var ViewPort: ViewPortType); – получить характеристики окна; procedure ClearViewPort; – очистить окно цветом фона; procedure SetVisualPage (Page: word); – задает номер отображаемой графической страницы; procedure SetActivePage (Page: word); – устанавливает для графического вывода активную страницу.
{ *** сохранение/восстановление части экрана *** } function ImageSize (x1, y1, x2, y2: integer): word; – определить размер ОП для прямоугольника; procedure GetImage (x1, y1, x2, y2: integer; var BitMap); – сохранить в ОП образ прямоугольника; procedure PutImage (X, Y: integer; var BitMap; BitBlt: word); – восстановить прямоугольник из ОП.
5) управление цветом { константы изображения цветов: }
Таблица 27. Кодировка цветов
{ *** процедуры работы с цветом *** } procedure SetBkColor (ColorNum: word); – установить цвет фона; procedure SetColor(Color: word); – установить цвет рисования function GetBkColor: word; – получить цвет фона; function GetColor: word; – получить текущий цвет рисования; function GetMaxColor: word; – получить максимально-возможное число цветов.
6) вывод точек { *** процедуры работы с точкой *** } procedure PutPixel (X, Y: integer; Pixel: word); – поставить на экране точку (X, Y) заданным цветом (pixel); function GetPixel (X, Y: integer): word; – получить цвет точки с координатами (Х, Y).
7) вывод линий { типы и толщины линий для процедур Get/SetLineStyle: } SolidLn = 0; { сплошная }; DottedLn = 1; { пунктирная }; CenterLn = 2; { штрих-пунктирная (осевая) }; DashedLn = 3; { штриховая }; UserBitLn = 4; { задаваемая пользователем }; NormWidth = 1; { нормальная (тонкая) }; ThickWidth = 3; { толстая }.
{ *** процедуры перемещений и проведения отрезков линий *** } procedure LineTo (X, Y: integer); – линия из текущей точки в (X, Y); procedure LineRel (Dx, Dy: integer); – линия из текущей точки в точку, смещенную на (Dx, Dy); procedure MoveTo (X, Y: integer); – переход в точку (X, Y); procedure MoveRel (Dx, Dy: integer); – переход из текущей точки в точку, смещенную на (Dx, Dy); procedure Line (x1, y1, x2, y2: integer); – линия из точки (x1, y1) в точку (x2, y2); procedure GetLineSettings (var LineInfo: LineSettingsType); – получить текущие настройки рисования линий; procedure SetLineStyle (LineStyle: word; Pattern: word; Thickness: word); – задать текущие настройки рисования линий.
8) вывод и закраска контуров { *** многоугольники, их закраска и текстуры *** } procedure Rectangle (x1, y1, x2, y2: integer); – построить незакрашенный прямоугольник; procedure Bar (x1, y1, x2, y2: integer); – построить закрашенный прямоугольник; procedure Bar3D (x1, y1, x2, y2: integer; Depth: word; Top: boolean); – построить паралелепипед; procedure DrawPoly (NumPoints: word; var PolyPoints); – построить контур многоугольника из NumPoints точек; procedure FillPoly (NumPoints: word; var PolyPoints); – построить закрашенный многоугольник из NumPoints точек; procedure GetFillSettings (var FillInfo: FillSettingsType); – получить текущие характеристики закраски; procedure GetFillPattern (var FillPattern: FillPatternType); – получить текущие характеристики текстуры; procedure SetFillStyle (Pattern: word; Color: word); – задать характеристики закраски; procedure SetFillPattern (Pattern: FillPatternType; Color: word); – задать характеристики текстуры; procedure FloodFill (X, Y: integer; Border: word); – залить область текущей закраской от заданной точки (X, Y) до границы, заданной цветом (Border).
9) окружности, эллипсы, дуги { *** построение окружностей, эллипсов и их частей *** } procedure Arc (X, Y: integer; StAngle, EndAngle, Radius: word); – построение дуги окружности; procedure GetArcCoords (var ArcCoords: ArcCoordsType); – получение параметров дуги окружности; procedure Circle (X, Y: integer; Radius: word); – построение окружности заданного радиуса и центра; procedure Ellipse (X, Y: integer; StAngle, EndAngle: word; XRadius, YRadius: word); – построение дуги эллипса; procedure FillEllipse (X, Y: integer; XRadius, YRadius: word); – построение закрашенного эллипса.
procedure GetAspectRatio (var Xasp, Yasp: word); – получение относительного разрешения по X и Y; procedure SetAspectRatio (Xasp, Yasp: word); – задание относительного разрешения по X и Y; procedure PieSlice (X, Y: integer; StAngle, EndAngle, Radius: word); – построение закрашенного сектора круга; procedure Sector (X, Y: Integer; StAngle, EndAngle, XRadius, YRadius: word); – построение закрашенного сектора эллипса.
10) вывод текста { константы для процедур Set/GetTextStyle } DefaultFont = 0; { шрифт по-умолчанию }; TriplexFont = 1; { " оттененный" шрифт }; SmallFont = 2; { мелкий шрифт }; SansSerifFont = 3; { шрифт " сан-сериф" }; GothicFont = 4; { готический шрифт }; HorizDir = 0; { текст слева–направо }; VertDir = 1; { текст снизу–вверх };
{ размещение текста относительно заданной точки } LeftText = 0; { текст влево от точки }; CenterText = 1; { точка в центре текста }; RightText = 2; { текст вправо от точки }; BottomText = 0; { текст под точкой };
{ CenterText = 1; уже определено выше } TopText = 2; { текст над точкой }; UserCharSize = 0; { размер шрифта задается программистом }.
{ признаки отсечения фигур при выходе за пределы окна } ClipOn = true; – за границами окна фигура не видна; ClipOff = false; – за границами окна фигура видна;
{ *** процедуры вывода текста *** } procedure GetTextSettings (var TextInfo: TextSettingsType); – получить текущие настройки вывода текста; procedure OutText (TextString: string); – вывести текст относительно текущей точки; procedure OutTextXY (X, Y: integer; TextString: string); – вывести текст относительно точки (X, Y); procedure SetTextJustify (Horiz, Vert: word); – установить параметры центровки (размещения) текста; procedure SetTextStyle (Font, Direction: word; CharSize: word); – выбрать шрифт, его размер и направление вывода текста; procedure SetUserCharSize (MultX, DivX, MultY, DivY: word); – задать размер шрифта программиста; function TextHeight (TextString: string): word; – получить текущую высоту строки текста; function TextWidth (TextString: string): word; – получить текущую ширину строки текста. Разбор контрольного варианта № 31 Задание Построить график функции Y=exp(X) для интервала X от –1 до 2, нанести на график размеченные оси координат и сделать подпись (название функции). Дополнительные требования: график изобразить толстой штриховой линией красного цвета на белом фоне, координатные оси (толстая линия) и разметка (тонкая линия) – черного (темно-серого) цвета, подпись – синего цвета под графиком посередине. Программу составить для EGA и VGA адаптеров (универсальную). Драйвер графического адаптера (с именем EGAVGA.BGI) находится в каталоге D: \TP6\BGI. Условия, принятые из соображений дизайна: График будет занимать 60% ширины и высот ы экрана. Разметку проводим через 0.5 по Х и через 1.0 по Y. График рисуем процедурой LineTo, с шагом 0.2 по оси X. Таблица идентификаторов Таблица 28. Идентификаторы задачи 31-го варианта
Алгоритм 1.Задание констант, стандартных значений; 2.Ввод исходных данных; 3.Печать исходных данных; 4.Расчет характеристик функций; 5.Открытие графики с проверкой правильности срабатывания; 6.Настройка фона; 7.Расчет параметров графика на экране; 8.Расчет масштабных коэффициентов перехода от X к J и от Y к I; 9.Построение графика функции: 9.1.Задание характеристик линии; 9.2.Начальная точка графика; 9.3.Цикл расчета экранных координат графика (X-> J, X-> Y-> I) и проведения отрезков; 10.Построение осей координат: 10.1.Задание характеристик линии; 10.2.Построение осей; 11.Разметка осей: 11.1.Задание характеристик линии; 11.2.Характеристики шрифта для подписи значений; 11.3.Цикл проведения разметки оси X, риски вверх от оси, по 10 пикселов: 11.3.1. от начала координат – вправо; 11.3.1. от начала координат – влево; 11.4. Цикл проведения разметки оси Y, риски вправо от оси, по 10 пикселов: 11.4.1.от начала координат – вверх; 11.4.2.от начала координат - вниз (Для данной функции ниже оси Х разметка не нужна); 12.Подпись графика: 12.1.Характеристики шрифта, цвет; 12.2.Вывод подписи; 13.Задержка графика на экране; 14.Вывод графика на печать - только если подключен принтер; 15.Закрытие графического режима. Блок-схема алгоритма Текст программы 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
Лабораторная работа № 9 Динамические переменные. Списки Задачи лабораторной работы Вопросы, изучаемые в работе
Задание (общее ко всем вариантам) В лабораторной работе требуется сформировать заданный тип списка, заполнить его в соответствии с указаниями варианта задания данными из входного файла (типизированного или текстового) и вывести содержимое списка в виде таблицы в выводной текстовый файл по одной записи в строку. Файл данных Dan.dat находится в каталоге D: \LAB1\ и состоит из записей. Первое поле каждой записи файла данных содержит фамилию и инициалы студента, второе и третье поля - оценки по дисциплинам, четвертое поле - среднюю оценку. Файл Dan.txt расположен там же и содержит ту же информацию, но в форме символьных строк. В таблице вариантов указаны условия, которым должны отвечать записи данных, выбираемые из файла, а также типы списка и файла данных. Поля заглавного (в нульсвязных списках – первого обслуживаемого) звена должны содержать сведения о типе списка и количестве звеньев в нем. В задании для типов списков используются следующие обозначения:
Таблица 30. Обозначения типов списков
Требования к программе
Тип списка: < обозначение> и количество записей с данными (в первом целочисленном поле) Содержание программы
Общие пояснения Переменные, которые описываются в разделе описаний ( VAR ), называются статическими. Память для них выделяется перед началом выполнения программы, и во время выполнения программы не может быть изменена. По окончании программы, эта выделенная память автоматически освобождается. Популярное:
|
Последнее изменение этой страницы: 2016-05-30; Просмотров: 817; Нарушение авторского права страницы