Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка 3 курс Pascal.doc
Скачиваний:
6
Добавлен:
18.11.2019
Размер:
825.86 Кб
Скачать

Графика в Pascal

Г рафическое изображение на экране монитора состоит из совокупности светящихся точек – пикселей. Каждый пиксель определяется своими координатами, которые отсчитываются от левого верхнего угла экрана. Разрешающая способность экрана, т.е. количество точек по осям x, y зависит от установки графического режима. Возможны значения 320*200, 640*200, 640*480, 1024*768.

Для построения графических изображений используются специальные процедуры и функции, которые размещены в модуле Graph.tpu. Для использования этих процедур и функций, необходимо после заголовка программы указать Uses Graph;

Основные графические процедуры и функции

1) Initgraph(var driver, mode: integer, path : string); - инициализация графического режима.

driver – код графического драйвера (драйвер – программа, управляющая работой адаптера; адаптер – устройство, управляющее работой экрана),

mode – код графического режима,

path – путь к драйверу. Если код драйвера равен нулю, то драйвер выбирается автоматически и устанавливается режим с максимальным разрешением, т.е. для адаптера VGA устанавливается размер экрана 640х480 пикселов и 16 цветов.

Каждая программа, использующая графические процедуры и функции, должна содержать строки:

uses graph;

Var dr, reg: integer;

begin

dr:=0; Initgraph(dr, reg, 'c:\program files\tpascal.71\bgi');

{ Driver := Detect; InitGraph(Driver, Mode, ''); - из справки паскаля}

2) closegraph; - выход из графического режима.

3) cleardevice; - очистка всего экрана с перемещением курсора в начало координат.

4) setbkcolor(color : word); - установка цвета фона.

5) setcolor(color : word); - установка рисующего цвета.

Коды цветов приведены в таблице.

Констан.

Код

Цвет

Константа

Код

Цвет

Black

0

Черный

Darkgray

8

Темно-серый

Blue

1

Синий

Lightblue

9

Светло-синий

Green

2

Зеленый

Lightgreen

10

Светло-зеленый

Cyan

3

Голубой

Lightcyan

11

Светло-голубой

Red

4

Красный

Lightred

12

Бледно-красный

Magenta

5

Малиновый

Lightmagenta

13

Розовый

Brown

6

Коричневый

Yellow

14

Желтый

Lightgray

7

Светло-серый

Whiet

15

Белый

Blink

16

Мерцание

6) outtextxy(x,y,txt:string); - процедура выводит текст, заданный параметром txt, в точке с координатами x, y. Для вывода значения числовой переменной v необходимо предварительно перевести число в текс процедурой str(v [:w:d]; txt: string), где w – ширина поля для числа, d – число знаков после запятой, txt – строка результата перевода.

7) getmaxx; getmaxy; - функции, определяющие максимальное количество точек по осям x и y.

8) putpixel(x,y:integer; c: word); – закраска пиксела с координатами x, y цветом c.

9) moveto (x, y: integer); - процедура перемещает указатель в точку с координатами x, y.

10) moverel (dx, dy: integer); - процедура смещает указатель на dx пикселей по оси x и dy пикселей – по y.

11) line(x1,y1,x2,y2:integer); – процедура рисует линию из точки с координатами x1, y1 в точку с координатами x2, y2.

12) lineto(x,y:integer); – процедура рисует линию из точки с текущими координатами в точку с координатами x, y.

13) rectangle(x1,y1,x2,y2:integer); – процедура рисует прямоугольник с координатами левого верхнего угла – x1, y1 и координатами правого нижнего угла – x2, y2.

14) circle(x,y:integer; r : word) – процедура рисует окружность, x, y – координаты центра, r – радиус.

15) arc(x, y, r, a1, a2); - процедура рисует дугу окружности, r – радиус, a1, a2 – углы в гадусах, определяющие начало и конец дуги.

16) setfillstyle(s,c: integer); - процедура задает текущий стиль (s) и цвет(c) заливки. S=1 – сплошная заливка.

17) fillellipse(x,y,rx, ry); - процедура рисует закрашенный эллипс, x, y – координаты центра, rx, ry – горизонтальный и вертикальный радиусы эллипса.

18) bar(x1,y1,x2,y2:integer); – процедура рисует закрашенный прямоугольник с координатами левого верхнего угла – x1, y1 и координатами правого нижнего угла – x2, y2.

Пример 1. Отобразить точку красного цвета в центре экрана.

Program pr1;

uses graph;

Var dr, reg: integer;

begin

dr:=0; Initgraph(dr, reg, 'c:\program files\tpascal.71\bgi');

{ Driver := Detect; InitGraph(Driver, Mode, ''); - из справки паскаля}

putpixel(getmaxx div 2, getmaxy div 2, 4);

readln;

end.

Записи

Запись представляет собой совокупность ограниченного числа логически связанных компонент, принадлежащих к разным типам. Компоненты записи называются полями, каждое из которых определяется именем.

Описание записи:

Type

<имя>=record

<список полей>

End;

Type

vedom=record

N: integer;

Fio: string [30];

NZ: integer;

OZ: integer;

End;

После описания типа «Запись», можно в разделе описания переменных объявлять переменную данного типа. Например, Var a: vedom;

После объявления переменной можно вводить и обрабатывать данные, которые могут быть представлены в виде таблицы. Например, тип Vedom описывает данные таблицы вида:

Fio

Nz

Oz

1

Антонов

33153

5

Для всей переменной типа record допустима единственная операция – команда присваивания. Например, b:=a; Обращение к отдельным полям записи осуществляется указанием имени записи и конкретного поля:

a.n:=1;

a.fio:=’Антонов’;

a.nz:=33153;

a.oz:=5;

Для полей записи допустимы все операции, которые определены для данного типа. Поля одного типа можно объединять в секции, перечисляя их имена через запятую.

Например, данные о книгах, хранящихся в библиотеке, можно описать с помощью типа ‘Запись’.

Type

Lib=record

IN:string [6];

Avt, nazv, izd: string [30];

Gi: integer;

End;

in

avt

nazv

izd

Gi

123456

Пушкин

Евгений Онегин

Просвещение

1987


Компонентой записи может быть также запись. В таком случае структура их описания может быть следующей:

Type

student=record

Fio=record

F, I, o: string[20]

End??

Data=record

D, m, g : integer;

End??

End;

Var a:student;

a.fio.f:=’Антонов’;

a.data.d:=7;

Обращение к компонентам записей можно упростить, если воспользоваться оператором присоединения with.

with <имя записи> do <оператор>;

Например, With a do Writeln(n, fio, nz, oz);

Пример 1. Создайте пользовательский тип данных – запись, описывающий данные человека (Фамилия, Имя, Отчество), опишите в программе массив таких записей, состоящий из пяти элементов. В цикле, при помощи оператора read заполните массив данными ваших товарищей.

Program primer;

Type

Chelovek=Record

Fam: String[15];

Ima: String[15];

Otch: String[15];

End;

Var

Klass:Array[1..5] Of Chelovek;

k:Integer;

Begin

For k:=1 To 5 Do

With Klass[k] Do

Begin

Writeln('Введите фамилию’); Readln(Fam);

Writeln('Введите имя’); Readln(Ima);

Writeln('Введите отчество’); Readln(Otch);

End;

Readln;

End.