- •Принципы модульного программирования
- •1. Процедуры
- •1.1.Пример программы с процедурой
- •1.2. Расположение процедур в программе
- •2. Функции
- •2.1. Пример программы с функцией
- •3. Внешние процедуры и функции
- •3.1. Модули пользователей
- •Сложные типы данных, применяемые в Паскале
- •1. Множества
- •1.1. Примеры программ с использованием множеств
- •2. Записи
- •2.1.Пример программы обработки записей
- •Файлы и наборы данных
- •1.Текстовые файлы
- •1.1. Создание текстового файла
- •1.2. Работа с существующим текстовым файлом
- •2. Последовательные файлы
- •2.1.Примеры программ с файлами, содержащими данные простого типа
- •2.2.Работа с файлами, содержащими данные сложного типа
- •2.2.1. Создание последовательного файла
- •2.2.2. Работа с файлом filan
- •3. Файлы с произвольным (прямым) доступом
- •3.1. Создание файла с прямым доступом
- •3.2. Работа с файлом: поиск и коррекция записей
- •3.3. Упорядочение записей в файле
- •3.4. Удаление записей из файла
- •3.5. Вставка записей в файл
- •Динамическое распределение памяти. Указатели и списки
- •1. Использование указателей. Списки
- •2. Очереди
- •2.1. Очередь типа Lifo
- •2.2. Очередь Fifo
- •Стандартные модули Турбо Паскаля
- •Модуль Crt
- •Модуль dos
- •Модуль Graph
- •1. Инициирование графического режима
- •2. Вывод текста (надписей) в графическом режиме
- •3. Вывод точек на экран
- •4. Построение графических изображений
- •5. Запоминание и вывод изображений
- •Библиографический список
- •Содержание
- •Процедуры 3
- •2. Функции 12
4. Построение графических изображений
Модуль Graph используется, в основном, для построения графиков и вычерчивания простейших изображений: линий, окружностей, эллипсов, прямоугольников и т.д. Линии могут быть сплошные, штриховые и т.д. Замкнутые области можно закрашивать сплошной заливкой, штриховкой и пр. Для рисования графических изображений используется большинство процедур модуля Graph.
SetLineStyle(тип:Word;образец:Word;толщина:Word);
Типы линий :
0 - непрерывная;
1 - из точек;
2 - из точек и тире (штрихпунктирная);
3 - пунктирная;
4 - определяется пользователем.
Образец равен 0 - если линия стандартная и отличен от 0, если пользователь задает свой образец.
Толщина:
1 - нормальная,
3 - жирная (тройная).
2) Построение линий выполняется процедурами:
Line (X1,Y1,X2,Y2); Строит линию между точками с координатами (X1,Y1) и (X2,Y2);
Lineto(X,Y); Строит линию из текущего положения курсора до точки с координатами (X,Y).
3) Circle(X,Y:integer;R:Word); Строит окружность радиусом R с центром в точке (X,Y).
4) Rectangle(X1,Y1,X2,Y2); Строит прямоугольник с координатами:
(X1,Y1) - верхний левый,
(X2,Y2) - нижний правый угол.
Другие сведения о примитивах приводятся в справочниках по Турбо Паскалю.
Все фигуры рисуются текущим типом и цветом линии. Цвет линии задается из имеющегося активного набора цветов – палитры. У драйверов EGA и VGA в палитре 15 цветов. Палитра устанавливается при инициировании графического режима. Ее можно изменять с помощью процедуры SetAllPalette. В палитре можно заменить один цвет на другой с помощью процедуры SetPalette.
Рассмотрим фрагмент программы, которая строит график функции Y=f(x) для X, изменяющегося от Xn до Xk с шагом dX. Масштабы:
Mx = (GetMaxX-20) Div (Xk-Xn);
My = (GetMaxY-10) Div (Ymax-Ymin);
Будем считать, что масштабы определены к моменту построения графика. Для его построения воспользуемся процедурой LineTo, которая будет проводить линию от точки к точке. Сам график поместим в прямоугольник с координатами (5,5) в верхнем левом углу и (300,190) – в нижнем правом. Считаем, что F(x)- функция, описанная в данной программе.
Программа построения графика может быть представлена в виде:
Program probaGraph;
Uses
crt,graph;
Var
Gd,Gmode,Er:Integer;
x,xh,xk,y,dx,mx,my:Integer;
Begin
xh:=0;
dx:=1;
xk:=10;
mx:20;
my:=8;
{Инициирование графического режима}
Gd:=detect;
{ Графический драйвер находится в текущем каталоге }
InitGraph(Gd,Gm,``);
Er:=Graphresult;
If Er=Grok then
Begin
{Графический режим}
Cleardevice;
{Прямоугольник}
Setcolor(2); { цвет линий }
SetLineStyle(0,0,1);
Rectangle (5,5,300,190);
{ цвет надписи }
Setcolor(3);
Settextstyle(0,0,1);
OuttextXY(280,20,`Y=F(X)`);
{ Построение графика }
SetColor(1);
SetLinestyle(3,0,3);
x:=Xn;
y:=F(x);
{ Начальная точка графика }
MoveTo(x*Mx+5,GetMaxY-y*My-10);
While x<= Xk do
Begin
x:=x+dX;
y:=F(x);
{ Линия к следующей точке графика }
LineTo(x*Mx+5,GetMaxY-y*My-10);
End;
Repeat
Until KeyPressed; { Останов вывода изображения }
CloseGraph;
End
Else
Writeln('Ошибка графики, код ошибки - ',Er);
End.
Заливка рисунка (замкнутой области) выполняется процедурами:
5) SetFillStyle (Pattern,Color:Word); которая определяет тип заливки.
Здесь Pattern - тип заливки,
Pattern = 0 - нет штриховки
1 - сплошная
2 - ‘- - - ‘
3 - `///'
4 `///`- толстые
. . . . . . .
11 - частые точки
12 - пользовательская
Color - цвет заливки ( из палитры ).
Пример.
SetFillStyle(4,1);
6) FloodFill(x,y,Border:Word); которая выполняет заливку ( штриховку) до границы цвета Border от точки рисунка с координатами (X,Y).
Например, программа, которая рисует концентрические окружности из точки с координатами (150, 100) всеми 15-ю цветами и закрашивает получившиеся кольца всеми типами заливки и цветом, отличным от цвета контура будет иметь вид.
Program All_Colors;
uses
Crt, Graph;
var
Er,GraphDriver, GraphMode: Integer;
X, Y: Integer;
Radius,Color:Integer;
begin
graphdriver:=Vga;
Graphmode:=VgaHi;
InitGraph(Graphdriver,GraphMode,'');
Er:=GraphResult;
If Er=Grok then
begin
ClearDevice;
For Color:=0 to MaxColors do
Begin
SetColor(Color);
for Radius := 1 to 11 do
Begin
Circle(150, 100, Radius * 10);
SetFillStyle(Radius,MaxColors -Color);
Floodfill(150-Radius*10+5,100, Color);
End;
readln;
End;
CloseGraph;
end
Else
Writeln('Ошибка графики ',Er);
Readln;
end.
