- •Конспект лекций
- •1.4 Общая структура программы
- •1.5 Стандартные процедуры и функции
- •1.6 Процедуры ввода/вывода
- •2. Простые типы данных
- •2.1 Целые типы
- •2.2 Вещественные типы
- •2.3 Cимвольный тип данных
- •2.4 Логический тип данных.
- •2.5 Ограниченные типы
- •2.6 Перечислимые типы
- •2.7 Описание типов
- •2.8 Преобразование типов
- •2.9 Порядок вычисления выражений
- •3. Операторы языка Паскаль
- •3.1 Оператор присваивания
- •3.2 Составной оператор
- •3.3 Условный оператор
- •3.4 Оператор выбора case
- •3.5 Оператор цикла с параметром (цикл for)
- •3.6 Оператор цикла с предусловием (цикл while)
- •1 Вариант:
- •2 Вариант:
- •3 Вариант:
- •3.7 Оператор цикла с постусловием (цикл repeat)
- •3.8 Вложенные циклы
- •3.9 Оператор перехода goto
- •4. Массивы
- •4.2 Сортировка элементов массива
- •4.3 Многомерные массивы
- •5. Подпрограммы (процедуры и функции)
- •5.1 Процедуры
- •5.2 Функции
- •5.3 Области действия имен
- •5.4 Параметры процедур и функций
- •5.5 Побочные эффекты при использовании подпрограмм
- •5.6 Передача массивов в подпрограммы
- •5.7 Параметры-костанты
- •5.8 Массивы открытого типа
- •5.9 Рекурсия в подпрограммах
- •6. Строковый тип данных
- •6.1 Описание строк
- •6.2 Операции со строками
- •6.3 Процедуры и функции для работы со строками
- •7. Стандартные модули Турбо-Паскаля
- •7.1 Модули турбо3 и graph3
- •7.2 Модуль overlay
- •7.3 Модуль dos
- •7.4 Модуль system
- •7.5 Модуль printer
- •7.6 Модуль crt
- •7.7 Модуль graph
- •8. Записи
- •8.1 Определение записи
- •8.2 Оператор над записями
- •8.3 Вложенные записи
- •8.4 Массив записей
- •8.5 Записи с вариантами
- •9. Файлы
- •9.1 Определение файла
- •9.2 Процедуры и функции для работы с файлами
- •9.3 Нетипизированные файлы
- •10. Интегрированная среда Турбо Паскаля
- •10.1 Как начать работу с Турбо Паскалем
- •10.2 Ваша первая программа
7.7 Модуль graph
Cодержит процедуры и функции, обеспечивающие работу с экраном в графическом режиме (создание изображений).
В графическом режиме весь экран разбивается на точки (пиксели – от англ. pixel). Каждую точку можно закрасить в любой цвет, таким образом из различных комбинаций точек создается изображение.
Каждая точка имеет координаты (х, у), х увеличивается по горизонтали слева направо, у – по вертикали сверху вниз. Верхний левый угол имеет координаты (0, 0), количество пикселей зависит от типа видеоадаптера и режима его работы. Для адаптера VGA – 640х480 (стандартный режим). Чем больше пикселей (точек), тем выше качество изображения.
{Драйвер устройства – программа управления устройством.
Видеоадаптер – системное устройство, непосредственно управляющее монитором и выводом информации на экран. Основные части – видеоконтроллер, видеоBIOS, видеопамять и т.д.}
В графическом режиме можно выделить на экране графическое окно, тогда координаты отсчитываются внутри окна, верхний левый угол считается точкой (0,0).
В графическом режиме, в отличие от текстового, курсор невидим на экране, но также можно переместить его в любую точку экрана, получить его текущие координаты.
Процедуры и функции управления графическими режимами.
initgraph (gd, gm, path); - процедура инициализации графического режима.
gd – код драйвер графического адаптера:
для CGA gd=1 или CGA
для EGA gd=3 или EGA
для VGA gd=9 или VGA
для автоматического определения драйвера gd=0 или Detect;
gm – код графического режима, устанавливается процедурой.
gd, gm – переменные целого типа!
path – строка, содержащая путь к драйверу: ‘c:\tp6\bgi’, т.е. вам надо сначала найти файл GRAPH.TPU и
здесь указать путь до этого файла.
closegraph; - процедура завершения графического режима и перехода в текстовый режим.
graphresult: integer; - возвращает код ошибки последней графической операции (0 – успешное выполнение).
grapherrormsg (cool: intrger):string; - возвращает сообщение об ошибке для заданного кода ошибки.
restorecrtmode; - процедура восстановления текстового режима.
setgraphmode (gm); - процедура установления графического режима.
Пример 1.
uses crt, graph;
var gd, gm: integer;
begin
gd:=detect;
initgraph (gd, gm, ‘c:\tp6\bgi’); {укажите правильный путь до bgi}
if graphresult <> 0 then
begin
write (‘ошибка графики:’, grapherrormsg (graphresult));
halt;
end;
…
closegraph;
end.
Процедуры управления экраном и окном.
cleardevice; - процедура очистки графического экрана, заполнения его цветом фона, установления курсора в (0,0).
setviewport (x1, y1, x2, y2: integer; clip: boolean); - процедура установки графического окна.
x1, y1 – верхний левый угол,
x2, y2 – нижний правый угол,
clip – ограничитель фигур. Если clip=true, то построение фигур происходит только в пределах окна, в противном случае фигуры могут выходить за пределы окна.
clearviewport; - процедура очистки графического окна (заполняет цаетом фона, курсор в (0,0)).
Процедуры и функции работы с точками.
GetmaxX: integer; - возвращает максимальное значение координаты x экрана.
GetmaxY: integer; - возвращает максимальное значение координаты y экрана.
GetX: integer; - возвращает координату x текущей позиции на экране.
GetY: integer; - возвращает координату y текущей позиции на экране.
GetPixel (x,y): word; - возвращает цвет точки с заданными координатами.
PutPixel (x,y,color); - процедура закрашивает точки с координатами (x,y) в цвет color.
Процедуры работы с линиями
line (x1, y1, x2, y2); - проводит прямую между точками (x1,y1) и (x2,y2).
moveto (x,y); - перемещает курсор в точку (х,у).
lineto (x,y); - проводит прямую из текущей точки в точку с координатами (x,y).
linerel (dx,dy); - проводят прямую из текущей точки в точку, сдвинутую на dx и dy: (x+dx, y+dy).
moverel (dx,dy); - перемещает курсор в точку, сдвинутую на dx, dy.
Процедуры построения фигур из линий.
bar (x1, y1, x2, y2); - построение закрашенного прямоугольника
(x1,y1)
(x2,y2)
bar3d (x1, y1, x2, y2, gr, top); - построение закрашенного параллелепипеда, gr – ширина боковой грани (отсчитывается по горизонтали), top = true – рисовать верхнюю грань
gr
(x1, y1)
(x2, y2)
rectangle (x1, y1, x2, y2); - построение контура прямоугольника
arc (x, y, st, end, r); - построение дуги окружности, (х,у) – координаты центра, st – угол начала, end – угол конца дуги, r – радиус. Отсчет идет против часовой стрелки от горизонтальной оси справа от центра.
circle (x, y, r); - построение окружности, (х,у) – центр, r – радиус.
ellipse (x, y, st, end, xr, yr); - построение дуги эллипса, (x,y) – центр, st, end – углы начала и конца, xr, yr – радиусы по оси х и у.
fillellipse (x, y, xr, yr); - построение закрашенного эллипса.
pieslice (x, y, st, end, r); - построение закрашенного сектора круга.
sector (x, y, st, end, xr, yr); - построение закрашенного сектора эллипса.
Пример:
x1:=10; y1:=10; x2:=100; y2:=50; dx:=40; dy:=20;
for i:=1 to 10 do
begin
bar(x1, y1, x2, y2);
x1:=x1+dx; x2:=x2+dx;
y1:=y1+dy; y2:=y2+dy;
end;
Процедуры установки цветов и стилей.
setcolor (color); - устанавливает текущий цвет рисования (для линий и текста).
setbkcolor (color); - устанавливает цвет фона экрана.
setlinestyle (sl, p,t); - установка стиля и толщины линии (sl – стиль, p – шаблон при sl=4, t – толщина линии).
sl = 0 – сплошная t = 1 – нормальная
sl = 1 – пунктирная t = 3 – толстая
sl = 2 – штрихпунктирная
sl = 3 – штриховая
sl = 4 – задается пользователем (р – шаблон из 11100110101…) p: word;
setfillstyle (sl, color); - установка стиля и цвета заполнения фигур.
sl = 0 – цвет фона (нет заполнения) sl = 7 – клетка
sl = 1 – заполнение цветом sl = 8 – косая клетка
sl = 2 – заполнение пунктиром sl = 9 – частая сетка
sl = 3 – sl = 10 – редкие точки
sl = 4 – толстыеsl = 11 – частые точки
sl = 5 – толстыеsl = 12 – задается пользователем
sl = 6 –
floodfill (x, y, colline); - закрашивает замкнутую область, ограниченную непрерывной линией. (х,у) – координаты любой точки внутри области, colline – цвет линии, до которой закрашивается.
Пример: Построить спираль с начальной точкой (хс,ус), n витками и начальным углом α.
uses crt, graph;
const n=10; alf=pi; dt=pi/45;
var gd, gm, x, y, xc, yc, i, j: integer;
procedure Spi(xc,yc,n: integer; dt,alf: real);
begin
moveto(xc,yc);
t:=alf;
for i:=1 to n do
for j:=1 to 90 do
begin
t:=t+dt; r:=2*t;
x:=round(r*cos(t)+xc); x=r*cos(t)окружность, t-угол.
y:=round(r*sin(t)+yc); y=r*sin(t) r увеличиваем, получаем
lineto(x,y); спираль.
end;
end;
begin
gd:=detect;
initgraph (gd, gm, ‘L:\tp6\bgi’);
if graphresult <> 0 then
begin
write (‘ошибка графики:’, grapherrormsg (graphresult));
halt;
end;
xc:=getmxx div 2;
yc:=getmaxy div 2;
spi(xc,yc,n,dt,alf);
readln;
closegraph;
end.
Процедуры работы с текстом.
outtext (text: string); - выводит на экран текстовую строку, начиная с текущей позиции.
outtext(‘hello’);
outtextxy (x, y, text); - выводит на экран текстовую строку, начиная с заданных координат (х,у).
outtextxy(100,100,‘hello’);
settextstyle (font, dir, size); - устанавливает стиль текста
font – шрифт dir – направление size – размер символов
0 – стандартный 0 – слева направо (0-30)
1 – утроенный 1 – сверху вниз
2 – маленький
3 – прямой
4 – готический
settextjustify (horiz, vert); - устанавливает выравнивание текста на экране (horiz-горизонтальное, vert-вертикальное).
0 – слева (снизу)
1 – по центру
2 – справа (сверху)
Процедуры обмена с памятью
getimage (x1, y1, x2, y2, M); - копирует в массив М прямоугольную область экрана, заданную координатами (х1,у1) и (х2,у2).
putimage (x, y, M, bit); - выводит изображение из массива М на экран. (х,у) – координаты точки, в которой будет левый верхний угол изображения, М – массив, в котором было сохранено изображение, bit – операция объединения выводимого изображения с имеющимся на экране.
0 – mov экран + массив→- старое изображение исчезает
1 – xor +→- стираются точки пересечения
2 – or +→- оба изображения
3 – and +→- остаются точки пересечения
Пример1: Программа перемещения по экрану графического объекта
uses crt, graph;
var gd, gm, x, y: integer;
m: array [1..1500] of byte;
begin
gd:=detect;
initgraph (gd, gm, ‘c:\tp6\bgi’);
if graphresult <> 0 then
begin
write (‘ошибка графики:’, grapherrormsg (graphresult));
halt;
end;
circle(20,20,20);
getimage(0,0,40,40,m);
x:=0; y:=0;
readln;
while x<600 do
begin
putimage(x,y,m,1);
x:=x+2; y:=y+1;
putimage(x,y,m,1);
delay(100);
end;
closegraph;
end.