Программирование. Модуль GRAPH. Модульное и объектное программирование. Учебно-методическое пособие
.pdfМИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ АМУРСКИЙ ГУМАНИТАРНО-ПЕДАГОГИЧЕСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ПРОГРАММИРОВАНИЕ.
Модуль GRAPH. Модульное и объектное программирование
Учебно-методическое пособие
Комсомольск-на-Амуре Издательство АмГПГУ
2009
2
УДК 372.851 ББК 74.262
Ж
Рецензенты:
Тачалов А.Н., к.т.н., доцент кафедры информатики ФГОУ ВПО АмГПГУ;
Кангин В.В., д.т.н., профессор кафедры автоматизации производства ГОУ ВПО АПИ НГУ
ПРОГРАММИРОВАНИЕ. Модуль GRAPH. Модульное и объектное программирование: учебно-методическое
Ж пособие /сост. Г.П. Жиганова. – Комсомольск-на-Амуре: Изд-во АмГПГУ, 2009. – 93 с.
ISBN 978-5-85094-370-7
В учебно-методическом пособии рассмотрены основные возможности языка Pascal для реализации модульного и объектноориентированного программирования. Приведены примеры решения задач, сформулированы задания для контроля знаний.
Учебно-методическое пособие предназначено для студентов факультета информационных технологий, математики и физики, изучающих курс «Программирование». Пособие может быть также использовано для самостоятельного изучения языка программирования
Pascal.
УДК 372.851 ББК 74.262.
ISBN 978-5-85094-370-7 |
© Жиганова Г.П., 2009 |
|
© Издательство АмГПГУ, 2009 |
|
3 |
|
|
Оглавление |
|
|
Предисловие ................................................................................ |
4 |
1. |
Библиотечный модуль Graph ...................................................... |
5 |
1.1. |
Характеристика графических режимов работы адаптера ........ |
5 |
1.2. |
Основные процедуры и функции графического модуля ........... |
5 |
1.3. |
Изображение линий и точек ......................................................... |
8 |
1.4. |
Изображение многоугольников ................................................... |
9 |
1.5. |
Изображение дуг, окружностей, эллипсов ................................. |
11 |
1.6. |
Краски, палитры, заполнения ...................................................... |
13 |
1.7. |
Вывод текста .................................................................................. |
26 |
1.8. |
Координаты, окна, страницы........................................................ |
31 |
1.9. |
Сохранение и выдача изображений............................................. |
36 |
2. |
Пользовательские модули ............................................................ |
39 |
2.1. |
Структура модулей........................................................................ |
39 |
2.2. |
Интерфейсная часть модуля ......................................................... |
40 |
2.3. |
Исполняемая часть модуля........................................................... |
40 |
2.4. |
Инициирующая часть модуля ...................................................... |
41 |
2.5. |
Компиляция и подключение модулей ......................................... |
41 |
3. |
Объектно-ориентированное программирование........................ |
43 |
3.1. |
Основные принципы ООП............................................................ |
44 |
3.2. |
Создание объектов......................................................................... |
46 |
3.3. |
Наследование, правила наследования ......................................... |
50 |
3.4. |
Виртуальные и динамические методы ........................................ |
54 |
3.5. |
Отличие виртуальных и динамических методов ....................... |
58 |
3.6. |
Деструкторы................................................................................... |
59 |
|
Расчетно-графическое задание..................................................... |
64 |
|
Примерный перечень тем курсовых работ ................................. |
91 |
|
Библиографический список.......................................................... |
92 |
4
ПРЕДИСЛОВИЕ
Среди современных языков язык Pascal занимает одно из первых мест для обучения начинающих программистов.
Изначально язык Pascal был создан для обучения процедурному программированию, но начиная с версии 5.5 фирма Borland ввела объектное расширение, что позволило применять объектноориентированную методологию проектирования программ. Использование объектно-ориентированной технологии разработки программ позволяет повысить качество разработок и сократить время.
Настоящее учебное пособие состоит из двух частей, описывающих соответственно модульное и объектное программирование. Задачи из расчетно-графического задания, приведенные в конце учебного пособия, имеют различную степень сложности и значительно облегчают понимание материала при их выполнении.
Учебно-методическое пособие предназначено для студентов 1-2 курса специальностей 050201 «Математика» с дополнительной специальностью «Информатика», 050202 «Информатика», 050203 «Физика» с дополнительной специальностью «Информатика», изучающих дисциплину «Программирование», а также может быть использовано для самостоятельного изучения модульного и объектно-ориентированного программирования.
5
1. БИБЛИОТЕЧНЫЙ МОДУЛЬ GRAF
Стандартное состояние ПК после его включения соответствует работе экрана в текстовом режиме, поэтому любая программа, использующая графические средства компьютера, должна определенным образом инициировать графический режим работы дисплейного адаптера. После завершения работы программы ПК автоматически возвращается в текстовый режим.
1.1. Характеристика графических режимов работы адаптера
Настройка графических процедур на работу с конкретным адаптером достигается за счет подключения нужного графического драйвера.
Драйвер –это специальная программа, осуществляющая управление теми или иными техническими средствами ПК. Графический драйвер управляет дисплейным адаптером в графическом режиме. Графические драйверы разработаны фирмой Borland практически для всех типов адаптеров. Обычно они располагаются на диске в определенном подкаталоге BGI в виде файлов с расширением BGI . Например, CGA. BGI
– драйвер для CGA адаптера, EGAVGA. BGI – драйвер для адаптеров EGA и VGA и т.д.
Выпускаемые в настоящее время ПК оснащаются адаптерами, разработанными фирмой IBM или совместимыми с ним. Все они имеют возможность работы в графическом режиме. В этом режиме экран дисплея рассматривается как совокупность очень близко расположенных точекпиксел, совместимостью которых можно управлять с помощью программы. Графические возможности конкретного адаптера определяются разрешением экрана (количеством пиксел и количеством цветов, которыми может светиться каждая пиксела) и количеством графических страниц.
У нас используются адаптеры (так называемые SVGA) с разрешением 800х600, использующие 256 цветовых оттенков. Но в библиотеке Graf для них нет драйвера. Поскольку SVGA совместимы с VGA, для управления современными графическими адаптерами приходится использовать драйвер EGAVGA.BGI и довольствоваться его скромными возможностями.
1.2. Основные процедуры и функции графического модуля
Процедура InitGraf.
Инициирует графический режим видеоадаптера.
Заголовок процедуры: Procedure InitGraf (var GrDriver, GrMode Integer; Path: String);
6
Здесь, GrDriver – переменная типа Integer, определяет типизированная графического драйвера;
GrMode – переменная того же типа, задающая режим работы графического адаптера;
Path – выражение типа String, содержащее имя файла драйвера и, возможно, маршрут его поиска.
Тип драйвера должен соответствовать типу графического адаптера. Для указания типа драйвера в модуле предусмотрены следующие константы:
Const
Detect =0; {режим автоопределения типа}
CGA=1;
MCGA=2;
EGA=3;
EGA64=4;
EGAMono=5;
IBM8514=6;
HercMono=7;
ATT400=8;
VGA=9;
PC3270=10;
Большинство адаптеров могут работать в различных режимах. Для выбора режима работы используется переменная Mode, значением которой в момент обращения к процедуре могут быть так же константы.
Например,
{Адаптер EGA:}
EGA Lo=0; |
(640х200, 16 цветов) |
EGA Hi=1; |
(640х350, 16 цветов) |
EGAMonoHi=3; (640х350, 2 цвета) {Адаптер VGA:}
VGA Lo=0; |
(640х200) |
VGA Med=1; |
(640х350) |
VGAHi=2; |
(640х480) |
{Адаптер IBM8514:} IBM8514Lo=0; (640x480, 256 цветов) IBM8514Hi=1; (1024x768, 256 цветов)
На наших машинах обращение к процедуре имеет вид:
Program DemoGraph; Uses
Graph;
Var
GrDriver:= 9;
GrMode:= 1;
7
InitGraph (GrDriver, GrMode, ‘C: \Bp\BGI’);
. . . . . . . . . . . . . . . . . . .
Если тип адаптера неизвестен или если программа рассчитана на работу с любым адаптером, используется обращение к процедуре с требованием автоматического определения типа драйвера:
Driver: =Detect;
InitGraph (GrDriver, GrMode, ‘C: \Bp\BGI’ );
После такого обращения устанавливается графический режим работы экрана, а переменные GrDriver и GrMode содержат целочисленные значения, определяющие тип драйвера и режим его работы.
При этом для адаптеров, способных работать в нескольких режимах, выбирается старший режим, т.е. тот, что закодирован максимальной цифрой. Так, в нашем случае выберется режим с разрешением 640х480.
Чаще всего причиной возникновения ошибки при обращении к процедуре InitGraph является неправильное указание местоположения файла с драйвером графического адаптера. В цепочке вызова необходимо указать точное местоположение EGA VGA.B6I.
Процедура CloseGraph
Завершает работу адаптера в графическом режиме и восстанавливает текстовый режим работы экрана.
При использовании графического модуля наиболее часто используют конструкции:
Program…;
Uses
Graph,Crt;
Var
GrDriver, GrMode: integer;
Begin
Driver:= Detect;
InitGraph (GrDriver, GrMode, ‘C: \Bp\BGI’);
. . . . .
. . . . . тело программы
Delay (5000);
CloseGraph;
End.
Здесь используется Delay, поскольку процедура CloseGraph не только закрывает работу адаптера, но и стирает изображение на экране монитора.
8
1.3. Изображение линий и точек
Процедура PutPixel
Выводит заданным цветом точку по указанным координатам.
Заголовок: Procedure PutPixel (X, Y: Integer: Color: word);
Здесь, X, Y – координаты точки; Color – цвет точки.
Координаты задаются относительно левого верхнего угла экрана, либо текущего окна.
Процедура Line
Вычерчивает линию с указанными координатами начала и конца.
Заголовок: Procedure Line (X1,Y1,X2,Y2: Integer);
Здесь, X1 и Y1 – координаты начала, X2 и Y2 – координаты конца линии. Линия вычерчивается текущим стилем и текущим цветом.
Процедура LineTo
Вычерчивает линию от текущего положения указателя до положения, заданного его новыми координатами.
Заголовок: Procedure LineTo (X, Y: Integer);
Здесь, X и Y – координаты нового положения указателя или координаты второго конца линии.
Процедура LineRel
Вычерчивает линию от текущего положения указателя до положения, заданного приращениями его координат
Заголовок: Procedure LineRel (Dx, Dy: Integer);
Здесь, Dx и Dy – приращение координат нового положения указателя.
Впроцедурах LineTo и LineRel линия вычерчивается текущим стилем
итекущим цветом.
Процедура SetLineStyle
Устанавливает новый стиль вычерчиваемых линий Заголовок: Procedure SetLineStyle (Type, Pattern, thick:Word);
Здесь, Type, Pattern, thick –соответственно тип, образец и толщина линии.
Тип линии может быть задан с помощью одной из следующих констант:
const
SolidLn =0; (сплошная линия) DottedLn =1; (точечная линия)
CenterLn =2; (штрих пунктирная линия)
9
DashedLn=3; (пунктирная линия)
UsesBitLn=4; (узор линии определяется пользователем)
Параметр PATTERN учитывается только для линий, вид которых определяется пользователем. При этом два байта параметра PATTERN определяют образец линии: каждый установленный в единицу бит этого слова соответствует светящемуся пикселу в линии, нулевой бит – несветящемуся пикселу.
Таким образом, параметр PATTERN устанавливает отрезок линии длиной в 16 пиксел. Этот образец периодически повторяется по всей длине линии.
Параметр THICK может принимать одно из двух значений:
const
NormWidth =1; (толщина в один пиксел) ThickWidth =3; (толщина в три пиксела)
Для выбора типа линии удобно использовать программу:
Program DemoPattern; Uses
CRT, Graph:
Var
GrDriver, GpMode, i, j: Integer;
Begin
GrDriver: Detect;
InitGraph (GrDriver, GrMode, ‘C :\Bp\ BGI’);
Line (0, 0, 350, 0); For i: =1 To 465 Do
Begin
SetLineStyle (4, i, 1); j: =j+3;
Line (0, j, 350, j);
End;
Delay (10000); CloseGraph;
End.
1.4. Изображение многоугольников
Процедура Rectangle
Вычерчивает прямоугольник с указанными координатами углов.
Заголовок: Procedure Rectangle (X1, Y1, X2, Y2: integer);
Здесь, X1 и Y1 – координаты левого верхнего угла прямоугольника; X2 и Y2 – координаты нижнего правого угла прямоугольника.
10
Прямоугольник вычерчивается с использованием текущего цвета и текущего стиля линий.
Процедура DrawPoly
Вычерчивает произвольную ломаную линию, заданную координатами точек излома.
Заголовок: Procedure DrawPoly (N: Word, Var Points);
Здесь, N – количество точек излома, включая обе крайние точки; Points – переменная типа PointType, содержащая координаты точек излома.
Координаты точек излома задаются парой значений типа Word: первое значение определяет горизонтальную координату, второе значение
– вертикальную.
При работе с процедурой DrawPoly удобно использовать типизированные константы для задания точек излома.
Пример: Изобразить в центре экрана пятиконечную звезду. Координаты точек излома и направление построения звезды имеют вид:
(300, 70)
(150,150) |
(450,150) |
(200,300) (400,300)
Program DemoDrawPoly: Uses
CRT, Graph;
Type
Cs =Array [1..6, 1..2] of Integer;
Const
ass:Cs = ((300, 70), (200, 300), (450, 150), (150, 150), (400,300), (300, 70));
Var
GrDriver, GrMode, x: Integer;
Begin
GrDriver: =Detect;
InitGraph (GrDriver, GrMode, 'C: \Bp\BGI');
