50215 (588698), страница 4
Текст из файла (страница 4)
Каждый пиксель имеет две координаты: x и y. Количество пикселей зависит от типа адаптера и режима его работы (рисунок 3). Значения xmax и ymax зависят от текущего графического видеорежима. В случае адаптера VGA и режима VGAHi xmax = 639, а ymax = 479.
В модуле Graph определены две функции GetMaxx и GetMaxy, возвращающие текущие значения параметров xmax и ymax, соответственно.
Рис. 3. Система координат
«Текущий указатель» (CP – Current Pointer) или, как его еще называют, графический курсор выполняет те же функции, что и курсор в текстовом режиме, однако является при этом невидимым. Положение графического курсора указывает на начальные координаты изображения графического примитива, выводимого «от текущей позиции». Текущий указатель перемещается специальными процедурами. В частности, процедура MoveTo (x, y); перемещает его в точку экрана, с координатами (x, y). Другая процедура – MoveRel (dx, dy); перемещает текущий указатель на dx пикселов по горизонтали и на dy пикселов по вертикали относительно последнего положения текущего указателя.
Какие бы изображения не выводились на экран, все они построены из точек. Имея средство построения точки определенного цвета в нужном месте экрана теоретически можно создать изображение любой сложности.
Вывод точки осуществляется процедурой PutPixel (x, y, Color), где x и y– экранные координаты точки, а Color – ее цвет.
Пример:
x := GetMaxx div 2; {Вывод красной точки в центр экрана}
y := GetMaxy div 2;
PutPixel (x, y, Red );
При выводе на экран точки ее цвет указывается непосредственно в процедуре PutPixel. Во всех остальных случаях, при построении графических примитивов (линий, прямоугольников, окружностей и т.п.), а также при выводе текста, цвет их контуров (цвет пера) задается специальной процедурой: SetColor (Color), где Color – цвет.
Для установки цвета фона графического экрана имеется процедура: SetBkColor (Color). При выполнении процедуры SetBkColor экран сразу же окрашивается в заданный цвет.
Для построения отрезков прямых имеется специальная процедура Line (x1, y1, x2, y2), где x1, y1 – координаты начала, а x2, y2 – координаты конца отрезка.
Пример программы. Изобразить треугольник с разноцветными краями.
Program Primer_2;
Uses Graph;
Var Gd,Gm: Integer;
Begin
Gd:=VGA; Gm:=VGAHi; InitGraph (Gd,Gm,'..\bgi');
If GraphResult=grOk
Then begin
SetColor (LightMagenta); {Цвет - светло-сиреневый}
Line (120,210,520,210); {Горизонтальный отрезок}
SetColor (LightCyan); {Цвет - светло-циановый}
Line (120, 210, 320, 10); {Левый катет}
Set Color (Green); {Цвет - зеленый}
Line (320, 10,520,210); {Правый катет}
ReadLn;
CloseGraph;
End
End.
Процедура LineTo (x, y) строит отрезок прямой из точки текущего положения указателя в точку с координатами x, y.
Turbo Pascal 7.0 позволяет вычерчивать линии самого различного стиля:
тонкие, широкие, пунктирные.
Установка стиля производится процедурой SetLineStyle (Style, Pattern, Thickness), где Style – параметр, определяющий стиль линии. Возможные значения этого параметра приведены в «таблице 1» [23, с. 143].
Таблица 1.
Стили линии
Описание стиля | Константа |
сплошная линия | SolidLn = 0 |
точечная линия | DottedLn = 1 |
штрих-пунктирная линия | CenterLn = 2 |
пунктирная линия | DashedLn = 3 |
стиль, определяемый пользователем | UserBitLn = 4 |
Pattern – образец; Thickness – толщина линии. Если применяется один из стандартных стилей, значение параметра Pattern должно быть равно 0.
Параметр Thickness может принимать всего два значения:
NormWidth = 1 – линия толщиной в один пиксел;
ThickWidth = 3 – линия толщиной в три пиксела.
Далее будут приведены процедуры, с помощью которых можно строить различные геометрические фигуры (окружности, прямоугольники, дуги). При этом стиль линии, которой вычерчивается контур той или иной фигуры также устанавливается процедурой SetLineStyle.
Для построения прямоугольных фигур имеется несколько процедур. Первая из них – процедура вычерчивания одномерного прямоугольника: Rectangle (x1, y1, x2, y2), где x1, y1 – координаты верхнего левого угла, x2, y2 – координаты правого нижнего угла прямоугольника.
Пример программы:
Program Primer_3;
Uses Graph;
Var grDriver: Integer;
grMode: Integer;
i,x,y: Integer;
Procedure Rect (x,y,x1,y1: Integer);
{Рисует прямоугольник, у которого левый нижний угол}
{имеет координаты (x,y), а правый верхний – (x1,y1)}
Begin
Line (x,y,x,y1); {Левая сторона}
Line (x1,y,x1,y1); {Правая сторона}
Line (x,y1,x1,y1); {Верхняя сторона}
Line (x,y,x1,y) {Нижняя сторона}
End;
Begin
GrDriver:=VGA; GrMode:=VGAHi;
InitGraph (grDriver,grMode,'..\bgi');
If GraphResult=grOk
Then begin
For i:=1 to 15 do
Begin
x:=i*30; y:=i*25; SetColor (i);
Rect (x,y,x+50,y+60)
End;
ReadLn;
CloseGraph;
End;
End.
Для построения закрашенных прямоугольников используется процедура: Bar (x1, y1, x2, y2), где параметры x1, y1, x2 и y2 имеют то же смысл, что и в процедуре Rectangle.
Цвет и стиль закраски устанавливается процедурой SetFillStyle (Pattern, Color), где параметр Pattern определяет стиль (шаблон) заливки, а параметр Color – ее цвет.
Для построения «объемных» закрашенных прямоугольников используется процедура: Bar3D ( x1, y1, x2, y2, Depth, Top ).
Тип и цвет заливки устанавливается процедурой SetFillStyle. Параметр Depth определяет глубину трехмерного контура. Чаще всего его значение равно четверти ширины прямоугольника: Depth := (x2-x1) div 4;
Параметр Top определяет, строить над прямоугольником вершину (True) или нет (False). Например:
SetFillStyle (XhatchFill, Red );
Bar3D (10, 10, 50, 100, 10, True);
Процедура вычерчивания окружностей текущим цветом имеет вид: Circle ( x, y, Radius ), где x, y – координаты центра окружности, а Radius – ее радиус. Например, следующий фрагмент выводит ярко-зеленую окружность c радиусом 50 пикселов и центром в точке 450, 100:
SetColor (LightGreen);
Circle (450, 100, 50);
Для вычерчивания дуг используется процедура Arc (x, y, StartAngle, EndAngle, Radius), где x, y – координаты центра дуги, StartAngle и EndAngle – начальный и конечный угол (в градусах), Radius – радиус. Очевидно, что если StartAngle = 0, а EndAngle = 359, то вычерчивается полная окружность.
Для заполнения внутренней или внешней области фигуры определенным образцом закраски используется процедура: FloodFill (X, Y, Border), где x, y – координаты точки внутри или вне фигуры, Border – цвет контура фигуры. Если точка (x, y) находится внутри замкнутой области, то заполняется внутренняя область. Если эта точка находится вне замкнутой области, то заполняется ее внешняя часть [23, с. 222].
Пример: красная окружность, заполненная зеленой штриховкой
SetColor (Red); Circle (450, 100, 50);
SetFillStyle (SlashFill, Green);
FloodFill (450, 100, Red);
В графическом режиме стандартные процедуры вывода Write и Writeln не работают. Для вывода текстовой информации на графический экран используют две процедуры OutText и OutTextxy.
Процедура: OutText (TextString) выводит на экран строку текста, начиная с текущего положения графического курсора.
Например: OutText (‘Добро пожаловать!’);
Явный недостаток этой процедуры – нельзя указать произвольную точку начала вывода. Его можно устранить с помощью процедуры MoveTo, которая перемещает указатель в нужную позицию, но лучше воспользоваться процедурой: OutTextxy (x, y, TextString),где x, y – координаты точки начала вывода текста, TextString – константа или переменная строкового типа string. Например, чтобы вывести сообщение «Для продолжения нажмите любую клавишу ...», начиная с точки 20, 400 надо записать:
OutTextxy (20, 400, ‘Для продолжения нажмите любую клавишу ...’);
Для начинающих проблемой является вывод числовых данных на графический экран, ибо в модуле Graph нет предназначенных для этого процедур. Выход прост: преобразовать числовое значение в строковое с помощью процедуры Str.
Пример:
x:= 12.5;
Str (x:4:1, S) {преобразование числа x в строку S }
OutTextxy (10, 10, S); {вывод строки S}
max:= 345.55;
Str (max:6:2, S) {преобразование числа max в строку S}
OutTextxy (10, 50, ‘Максимальное значение = ’ + S );
{ вывод суммы двух строк}.
Таким образом, модуль Graph содержит обширный набор процедур и функций, позволяющий управлять графическим режимом работы экрана: создавать разнооборазные графические изображения и выводить на экран текстовые надписи. Как уже говорилось раннее, особенностями языка Pascal, является строгая типизация и наличие средств структурного (процедурного) программирования. Язык Pascal относительно прост в изучении, довольно ясен и логичен и , будучи первым изучаемым языком программирования, приучает к хорошему стилю, воспитывает дисциплину структурного программирования. Начинающему программисту целесообразно начать изучение языка среды именно с этого пакета. На сегодняшний день Pascal практически повсеместно применяется как учебный язык программирования.
1.3 Графические возможности языка Basic
Язык Basic был разработан преподавателями Дартмутского колледжа Джоном Кемени и Томасом Курцом в 1965 году как средство обучения и работы непрофессиональных программистов. Его назначение определено в самом названии, которое является аббревиатурой слов Beginner's All-purpose Symbolic Instruction Code (многоцелевой язык символических инструкций для начинающих) и при этом в дословном переводе означает «базовый» [13, c. 54].
Новый язык быстро завоевал популярность благодаря своей простоте в изучении, особенно среди начинающих. Собственно, как и Pascal, Basic был предназначен для обучения.
Изначально разработка была по большей части теоретической. Но уже в середине 70-х годов появились первые персональные компьютеры, язык Basic подошел для них наилучшим образом – ведь он тогда занимал всего 4 Кб памяти.
В 1975 году два молодых программиста – Пол Аллен и Уильям Гейтс начали разрабатывать интерпретатор Бейсика для персонального компьютера Altair 8800. Вскоре родилась и компания Microsoft, а Basic оказался первым продуктом, выпущенным ею.
Basic был успешно перенесен на другие модели компьютеров, такие как Apple, Commodore и Atari. Затем интерпретатор был написан для только что появившегося IBM PC.
Будучи действительно весьма простым средством программирования,
совершенно непригодным в те времена для решения серьезных задач, Basic представлял собой качественно новую технологию создания программ в режиме интерактивного диалога между разработчиком и компьютером. То есть представлял собой прообраз современных систем программирования. Другое дело, что решение подобной задачи на технике тех лет было возможно только за счет максимального упрощения языка программирования и использования транслятора типа «интерпретатор».
Писать программы на ранних версиях Basic осложняли нумерованные строки, отсутствие структурных конструкций и типизации, а также интерпретируемость.
В середине 80-х годов компанией Microsoft был разработан QuickBasic (последняя версия 4.5). Это уже был полностью компилируемый язык, с структурными конструкциями, пользовательскими типами данных, причем еще и совместимый со старыми версиями (Basic и GW Basic). В конце 80-х годов насчитывалось около десятка систем Basic различных фирм-разработчиков [13, с. 57].
QBasic, в отличие от более ранних версий языка Basic, уже поддерживал современные средства модульного программирования. Это свойство поднимает его до современных языков программирования. К достоинствам этого языка также следует отнести то, что он: содержит хороший экранный редактор; не ограничивает длину программы; отменяет необходимость нумерации строк; предлагает операторы, позволяющие организовывать структуры внутри программ; поддерживает программные процедуры, вызываемые из основной программы; позволяет использовать локальные переменные.
С появлением Windows новая версия Basic названа Visual Basic.