Книжка Хабы (970988), страница 10
Текст из файла (страница 10)
Задача 18. Простые объекты.
Описать объект, включающий заданные поля и методы. Написать программу, которая создает массив объектов и содержит процедуры, работающие с указанными структурами.
Объект - предложение. Параметры: массив слов (n<10) и их количество. Методы: конструктор и процедура, определяющая количество слов, начинающихся с согласных букв. Определить отношение количества слов, начинающихся с согласных букв в заданном тексте, к количеству слов, начинающихся с гласных букв.
Задача 19. Простые объекты.
Описать объект, включающий заданные поля и методы. Написать программу, которая создает массив объектов и содержит процедуры, работающие с указанными структурами.
Объект - предложение. Параметры: массив слов (n<10) и их количество. Методы: конструктор и процедура, определяющая количество слов, начинающихся с гласных букв. Определить отношение количества слов, начинающихся с гласных букв в заданном тексте, к количеству слов, начинающихся с согласных букв.
Задача 20. Простые объекты.
Описать объект, включающий заданные поля и методы. Написать программу, которая создает массив объектов и содержит процедуры, работающие с указанными структурами.
Объект - слово. Параметры: текст, длина, количество согласных букв. Методы: конструктор, определяющий поле текста и длину, и процедура, определяющая количество гласных букв. Определить количество слов в предложении, в которых согласных букв больше, чем гласных.
Задача 21. Простые объекты.
Описать объект, включающий заданные поля и методы. Написать программу, которая создает массив объектов и содержит процедуры, работающие с указанными структурами.
Объект - слово. Параметры: текст, длина, количество гласных букв. Методы: конструктор, определяющий поле текста и длину, и процедура, определяющая количество согласных букв. Определить количество слов в предложении, в которых гласных букв больше, чем согласных.
Задача 22. Простые объекты.
Описать объект, включающий заданные поля и методы. Написать программу, которая создает массив объектов и содержит процедуры, работающие с указанными структурами.
Объект - предложение. Параметры: массив слов (n<10) и их количество. Методы: конструктор и процедура, определяющая количество слов 'Тверь' в предложении. Определить процент таких слов в предложении.
Задача 23. Простые объекты.
Описать объект, включающий заданные поля и методы. Написать программу, которая создает массив объектов и содержит процедуры, работающие с указанными структурами.
Объект - строительство дома. Параметры: объем работ (в денежном отношении) и процент готовности объекта. Методы: конструктор и процедура, определяющая объем невыполненных работ. Определить самое законченное строительство.
Задача 24. Простые объекты.
Описать объект, включающий заданные поля и методы. Написать программу, которая создает массив объектов и содержит процедуры, работающие с указанными структурами.
Объект - адрес. Параметры: массив адресов (n<10) и их количество. Методы: конструктор и процедура, определяющая адресатов, проживающих в каждом городе и их процентное соотношение.
Задача 25. Простые объекты.
Описать объект, включающий заданные поля и методы. Написать программу, которая создает массив объектов и содержит процедуры, работающие с указанными структурами.
Объект - фотообъектив. Параметры: массив фотообъектив (n<10) и их количество. Методы: конструктор и процедура, определяющая объективы, фокусное расстояние которых - 100 и 120 мм, диаметр равен 80 мм, а материал - LiF и их процентное соотношение.
Лабораторная работа №8
Статические объекты
Цель работы – овладение практическими приемами и навыками разработки программ по работе в графическом режиме. Закрепление основных функций и процедур, применяемых в эьлм режиме. Уяснить различия между текстовым и графическим режимами.
-
Теоретическая часть
1.1.Вывод точек и линий
Для высвечивания точки используется процедура PutPixel(x,y:integer; Pixel:word);
x,y - координаты высвечиваемой точки;
Pixel - цвет высвечиваемой точки.
В Турбо-Паскале существует три процедуры построения отрезка прямой.
Процедура LineTo(x,y:integer); рисует отрезок прямой из текущей точки в заданную.
x,y - координаты заданной точки.
Процедура LineRel(Dx,Dy:integer); рисует отрезок прямой из текущей точки в точку, отстоящую на расстояние (Dx,Dy) от текущей.
Dx,Dy - задаваемые расстояния (вдоль оси X и оси Y соответственно) от текущей точки до заданной.
Процедура Line(x1,y1,x2,y2:integer); рисует отрезок прямой, соединяющий точку (x1,y1) с точкой (x2,y2).
x1,y1 - координаты первой точки;
x2,y2 - координаты второй точки.
Образец линии устанавливается процедурой
SetLineStyle(LineStyle:word;Pattern:word;Thickness:word);
Параметр LineStyle задает тип линии. Он может принимать одно из следующих значений, задаваемых константами:
SolidLn=0 - сплошная;
DottedLn=1 - точечная;
CenterLn=2 - штрих пунктирная;
DashedLn=3 - пунктирная;
UserBitLn=4 - тип линии определяется пользователем.
Параметр Pattern определяет тип линии, задаваемый пользователем. Этот параметр игнорируется, если LineStyle не равен UserBitLn. При задании типа линии пользователем используется 16 -битовый шаблон, определяемый параметром Pattern:
биты с нулевыми значениями не вызывают изменения отображения в данной точке, а биты со значениями 1 отображают точку.
Параметр Tickness определяет толщину линии, он может принимать два значения NormWidth=1 и TickWidth=3. В первом случае рисование производится линиями обычной толщины, во втором случае - утолщенными (в 3 раза).
При инициализации графического режима по умолчанию устанавливается сплошной тип линии обычной толщины.
Процедура DrawPoly(NumPoints:word; var PolyPoints); выводит ломаную линию в соответствии с текущим цветом и текущим образцом линии.
NumPoints - число вершин ломаной;
PolyPoints - массив координат ломаной, элементами массива являются записи типа PointType.
type PointType=record
x,y:integer; {координаты вершин ломаной}
end;
Число элементов массива должно быть не меньше NumPoints. Ломаную можно построить также, последовательно рисуя отрезки - звенья ломаной.
1.2.Вывод многоугольников
Процедура Rectangle(x1,y1,x2,y2:integer); рисует прямоугольник, концы диагонали которого имеют координаты (x1,y1) и (x2,y2) соответственно. Рисование производится текущим цветом и в соответствии с текущим образцом линий.
Процедура Bar(x1,y1,x2,y2:integer); штрихует прямоугольник (не очерчивая его границы) в соответствии с текущим образцом и цветом штриховки.
x1,y1 - координаты одного конца диагонали прямоугольника;
x2,y2 - координаты другого конца диагонали прямоугольника.
Нарисовать закрашенный прямоугольник можно и по-другому: сначала нарисовать прямоугольник процедурой Rectangle, а затем закрасить его с помощью процедуры FloodFill.
Процедура FloodFill(x,y:integer;Border:word); закрашивает ограниченную область, внутри которой находится точка с координатами (x,y). Закраска производится в соответствии с текущим цветом и образцом.
Если заданная точка находится внутри области, то область закрашивается; если точка находится вне области, то закрашивается внешняя часть области. Параметр Border задает цвет границы области. Точки внутри области закраски, цвет которых отличается от цвета, заданного в параметре Border, закрашиваются.
Произвольный многоугольник выводится процедурой
FillPoly (NumPoints:word;var PolyPoints);
NumPoints - число вершин многоугольника;
PolyPoints - массив координат вершин многоугольника, элементами массива являются записи типа PointType; число элементов массива должно быть не менее NumPoints.
Закраска осуществляется текущим цветом и в соответствии с текущим образцом.
Цвет и образец закраски устанавливается процедурой
SetFillStyle(Pattern:word; Color:word);
Pattern - параметр, устанавливающий образец закраски;
Color - параметр, устанавливающий цвет закраски.
Виды закраски определяется константами.
Например: SolidFill=1 - сплошная заливка;
HatchFill=7 - редкой штриховкой;
Возможные цвета и соответствующие им константы выбираются из справочной таблицы. По умолчанию выбирается закраска, заполняющая всю область сплошным цветом, а в качестве цвета - максимальный цвет, содержащийся в заданной палитре. Если параметр Pattern имеет значение UserFill, то образец закраски должен быть предварительно установлен процедурой SetFillPattern.
Процедура SetFillPattern(Pattern:FillPatternType; Color:word);
устанавливает образец и цвет закраски.
Параметр Pattern задает битовый шаблон образца закраски. Тип FillPatternType определен следующим образом:
type FillPatternType=array[1..8] of byte;
Образец закраски формируется в соответствии с байтовыми значениями, содержащимися в массиве Pattern. Массив шаблона состоит из 8-ми элементов - 8-ми байтов, причем каждый байт соответствует 8-ми точкам строки экрана. Таким образом, создается образец закраски для прямоугольника размером 8*8 точек, который при закраске повторяется. Если бит в байте шаблона равен 1, то соответствующая точка растра будет высвечена на экране. Образцы, определяемые пользователем, позволяют создавать закраски, отличающиеся от предварительно определенных.
Пример формирования шаблона для образца закраски:
Двоичное значение Шестнадцатеричное значение
11001100 = $CC (1-ый байт)
00110011 = $33 (2-ой байт)
11001100 = $CC (3-ий байт)
00110011 = $33 (4-ый байт)
00110011 = $33 (5-ый байт)
11001100 = $CC (6-ой байт)
00110011 = $33 (7-ой байт)
11001100 = $CC (8-ой байт)
Параметр Color определяет цвет закраски.
1.3.Вывод дуг, окружностей, эллипсов
Процедура Circle(x,y:integer;Radius:word); рисует окружность с центром в точке с координатами (x,y) и радиусом, равным значению Radius.
Процедура Arc(x,y:integer;StAngle,EndAngle,Radius:word); рисует дугу окружности с центром в точке с координатами (x,y), начальным углом, равным StAngle, конечным углом, равным EndAngle и радиусом, равным Radius.
Процедура FillEllipse(x,y:integer;XRadius,YRadius:word); рисует закрашенный эллипс с центром в точке с координатами (x,y), полуосями, равными XRadius (горизонтальная) и YRadius (вертикальная). Закраска осуществляется в соответствии с текущим образцом и цветом.
Процедура Ellipse(x,y:integer;StAngle,EndAngle:word;XRadius,YRadius:word); рисует дугу эллипса с центром в точке с координатами (x,y), начальным углом, равным StAngle, конечным углом EndAngle и полуосями, равными XRadius (горизонтальная) и YRadius (вертикальная).
Процедура PieSlice(x,y:integer;StAngle,EndAngle,Radius:word); рисует закрашенный сектор круга с центром в точке с координатами (x,y), начальным углом, равным StAngle, конечным углом, равным EndAngle и радиусом, равным Radius. Закраска осуществляется в соответствии с текущим образцом и цветом.
Процедура Sector(x,y:integer; StAngle,EndAngle,XRadius, YRadius:word); рисует закрашенный сектор эллипса с центром в точке с координатами (x,y), начальным углом, равным StAngle, конечным углом, равным EndAngle, и полуосями, равными XRadius (горизонтальная) и YRadius (вертикальная). Закраска осуществляется в соответствии с текущим образцом и цветом.
В рассмотренных процедурах отсчет углов производится в направлении против часовой стрелки от положительного направления оси абсцисс (горизонтали). Угловые величины должны задаваться в градусах и иметь целое неотрицательное значение (в соответствии с типом (word)), таким образом, углы задаются с точностью до 0,5°. При рисовании дуг, секторов, если начальный угол равен 0°, а конечный угол - 360°, то рисуется полная дуга (окружность, эллипс) или полный круг (эллипс).
При задании углов надо следить, чтобы конечный угол был больше начального, так как процедуры Arc, Ellipse рисуют нужную дугу (если начальный угол больше конечного), а процедуры PieSlice, Sector - дополняющую дугу.