- •Лабораторный практикум по информатике
- •Часть II программирование в системе турбо паскаль
- •Введение
- •Лабораторная работа №1 Создание простейшей программы
- •Начало работы с новой программой
- •Задание 1
- •Сохранение текстового файла программы на диске:
- •Задание 2
- •Задание 3
- •Задание 4
- •Лабораторная работа №2 Ввод данных и вывод результатов
- •Задания
- •Лабораторная работа №3 Программирование линейных алгоритмов
- •Задание
- •Лабораторная работа №4 Программирование разветвляющихся алгоритмов
- •Задание 1
- •Задание 2
- •Лабораторная работа № 5 Программирование циклических алгоритмов с известным числом повторений
- •Задание
- •Лабораторная работа №6 Программирование циклических алгоритмов с неизвестным числом повторений
- •Задания
- •Вариант 1
- •Вариант 2
- •Вариант 3
- •Вариант 4
- •Вариант 5
- •Вариант 6
- •Вариант 7
- •Вариант 8
- •Вариант 9
- •Вариант 10
- •Лабораторная работа №7 Программирование алгоритмов итерационной циклической структуры
- •Задание
- •Лабораторная работа №8 Массивы
- •Лабораторная работа №9 Процедуры и функции пользователя в языке Паскаль
- •Задание
- •Лабораторная работа №10 Записи
- •Задания
- •Лабораторная работа №11 Работа с файлами
- •Лабораторная работа №12 Графический режим в языке Паскаль
- •Лабораторная работа №13 Построение графика функции
- •Задания
- •Лабораторная работа №14 Создание движущихся изображений
- •Задание 1
- •Задание 2
- •Лабораторная работа №15 Вычисление определённого интеграла численными методами
- •Метод прямоугольников
- •Метод трапеций
- •Метод Симпсона
- •Задания
- •Лабораторная работа №16 Решение нелинейных уравнений численными методами
- •Метод половинного деления
- •Метод Ньютона
- •Метод хорд
- •Задания
- •Лабораторная работа №17 Решение обыкновенных дифференциальных уравнений численными методами
- •Метод Эйлера
- •Модифицированный метод Эйлера
- •Метод Рунге-Кутта
- •Задание
- •Приложение
- •Список литературы
- •Оглавление
- •Лабораторный практикум по информатике
- •Часть II программирование в системе турбо паскаль
- •Архангельск
Лабораторная работа №12 Графический режим в языке Паскаль
При выводе на экран графической информации (линии, эллипсы, многоугольники, растровые изображения и др.) используется графический режим работы монитора, в котором изображение строится из пикселей (pixel) – точек на экране, каждая из которых может иметь свой цвет.
Для разработки программ, работающих в графическом режиме, в системе программирования Turbo Pascal существует стандартный модуль Graph.tpu, содержащий константы, типы, процедуры и функции (более 50).
Кроме файла Graph.tpu для разработки программ в графическом режиме требуется графический драйвер Egavga.bgi (для адаптеров EGA и VGA), расположенные в папке ..\BGI системы. Там же, в файлах *.chr находятся векторные шрифты для графического режима. Следует отметить, что в дистрибутивном пакете системы Turbo Pascal эти шрифты не имеют русских букв, однако можно найти и русифицированные *.chr файлы, например в системе Quattro Pro.
Для работы в графическом режиме следует выполнить действия:
скопировать в каталог с файлом программы драйвер egavga.bgi;
в разделе описания используемых модулей указать Uses Graph;
описать две переменные целого типа Gd, Gm: Var Gd,Dm:integer;
задать автоматический режим настройки графического драйвера: Gd:=Detect;
для переключения в графический режим вызвать процедуру InitGraph: InitGraph(Gd,Gm,'');
выполнить вывод на экран графической информации;
для выхода из графического режима вызвать процедуру ClоseGraph;.
После переключения в графический режим вместо текстового курсора используется невидимый текущий указатель, который может быть установлен в определённой точке экрана с помощью задания графических координат. Для режима VGA 640480 верхний левый угол экрана будет иметь координаты (0,0), а правый нижний угол (639,479).
Пример. Наберите текст программы, рисующей 5 концентрических окружностей в центре экрана:
Program Krug2;
Uses Graph;
Var
Gd,Gm,rad,xc,yc:integer;
begin
Gd:=Detect; { Функция InitGraph должна выполнить } { автоопределение типа монитора (Gd) и его } { максимального разрешения (Gm)}
InitGraph(Gd,Gm,''); { Инициализация графического режима }
if GraphResult <> 0 then { В случае ошибки инициализации }
begin
Writeln('Ошибка инициализации графического режима');
Writeln('В каталоге программы должен присутствовать драйвер egavga.bgi');
Writeln('или укажите путь к нему в IniGraph(Gd,Gm,<путь>)');
Halt(1);
end;
Case Gd of { Анализируем тип дисплея }
{ и вычисляем координаты центра экрана }
9: begin { VGA монитор }
xc:=(640-1) div 2; yc:=(480-1) div 2;
end;
3: begin { EGA монитор }
xc:=(640-1) div 2; yc:=(350-1) div 2;
end;
end;
for rad:=1 to 5 do
Circle(xc,yc,rad*20); { Рисуем окружности }
Readln;
CloseGraph; { Возврат в текстовый режим }
end.
Ниже приведён перечень наиболее часто используемых процедур и функций для работы в графическом режиме.
Function GetMaxX:Integer; Возвращает максимальную x-координату (разрешение по горизонтали) текущего графического режима.
Function GetMaxY:Integer; Возвращает максимальную y-координату (разрешение по вертикали) текущего графического режима.
Function GetX:Integer; Возвращает текущую x-координату указателя.
Function GetY:Integer; Возвращает текущую y-координату указателя.
Procedure PutPixel(x,y,color:Word); Выводит на экран точку с координатами (x,y) и цветом color.
Procedure SetColor(color:Word); Устанавливает цвет рисуемых далее линий.
Procedure SetBkColor(color : Word); Устанавливает цвет фона.
Procedure Line(xStart,yStart,xEnd,yEnd:Integer); Проводит прямую линию из точки (xStart,yStart) в точку (xEnd,yEnd).
Procedure LineTo(xEnd,yEnd:Integer); Проводит прямую линию из текущего положения указателя в точку с координатами (xEnd,yEnd).
Procedure MoveTo(x,y : Integer); Перемещает указатель в точку с координатами (x,y).
Procedure Circle(x,y,Radius : Integer); Рисует окружность с центром в точке (x,y) и радиусом Radius.
Procedure Rectangle(x1,y1,x2,y2 : Integer); Рисует прямоугольник с координатами левого верхнего и правого нижнего угла (x1,y1) и (x2,y2) соответственно.
Procedure Bar(x1,y1,x2,y2 : Integer); Рисует закрашенный прямоугольник с координатами левого верхнего и правого нижнего угла (x1,y1) и (x2,y2) соответственно.
Procedure Ellipse(x,y, a1,a2, xRad,yRad : Integer); Рисует эллиптическую дугу с центром в точке (x,y), начальным и конечным углами a1 и a2 и радиусами по осям xRad, yRad; углы отсчитываются от положительного направления оси х в градусах.
Procedure FloodFill(x,y:integer; border:word); Закрашивает замкнутую область, внутри которой расположена точка (x,y), согласно текущему стилю заполнения. Параметр border задаёт цвет границы.
Procedure SetFillPattern(parttern:byte; color:word); Устанавливает тип закраски и её цвет. Тип закраски выбирается из списка: EmptyFill – сплошное заполнение цветом фона; SolidFill – сплошное заполнение заданным цветом; LineFill – заполнение горизонтальными линиями; LtSlashFill –диагональное заполнение (/ / /); LtBkSlashFill – обратное диагональное заполнение (\ \ \); XhatchFill – косое клетчатое заполнение.
Procedure SetLineStyle(Style,Pattern,color:word); задаёт стиль, палитру и толщину линий. Стили: Solidln – сплошная; Dotted – точечная; Dashed – пунктирная; Centerln – штрихпунктирная. Толщина линий: NormWidth – нормальная; ThickWidth – толстая. Параметр Pattern=0.
Procedure OutTextXY(x,y:Integer; s:string); Выводит текстовую строку s начиная с точки с координатами (x,y).
Простейшие примеры работы с процедурами и функциями графического режима содержатся в справочной системе Turbo Pascal. Полный список констант, типов, процедур и функций модуля Graph содержится также в файле Graph.int в папке ..\DOC.
Задания
№ |
Задание |
Результат |
1 |
Получить в центре экрана изображение, состоящее из 10 вложенных квадратов. Каждый квадрат нарисовать своим цветом и пронумеровать |
|
2 |
Начертить произвольный отрезок на экране синим цветом. Координаты концов получить с помощью генератора случайных чисел. Построить красный отрезок, симметричный синему относительно точки, расположенной в центре экрана |
|
3 |
Получить в центре экрана изображение циферблата часов, стрелки должны показывать время 9.00 |
|
4 |
Вывести на экран два прямоугольника – желтый и зелёный с одинаковыми размерами. Желтый заштриховать вертикальными линиями, зелёный – горизонтальными (без использования встроенных стилей заполнения) |
|
5 |
Построить оси координат. Начало координат поместить вблизи левого нижнего угла экрана. Подписать оси. Число делений на осях ввести с клавиатуры |
|
6 |
Начертить произвольный треугольник в левой верхней четверти экрана. Координаты вершин получить с помощью генератора случайных чисел. Построить треугольник, симметричный исходному относительно точки, расположенной в центре экрана |
|
7 |
Построить в центре экрана прямоугольник, в нём – ромб, в ромбе – окружность, в окружности – квадрат. Длину стороны квадрата ввести с клавиатуры |
|
8 |
Начертить на экране лестницу, идущую из левого верхнего в правый нижний угол экрана. Количество ступеней ввести с клавиатуры |
|
9 |
Построить в центре экрана изображение. Большая окружность имеет радиус R. Малые окружности располагаются внутри большой и имеют радиусы, равные 1/5 R. Длины вертикального и горизонтального отрезков равны и составляют 2/3 R |
|
10 |
Обвести экран рамкой зелёного цвета. Заштриховать экран сеткой, составленной из линий, идущих под углом 45. Расстояние между линиями задать с помощью переменной |
|