
- •Оглавление
- •Введение
- •Основная часть
- •1.1 Выбор структур данных для решения поставленной задачи
- •1.2 Описание методов и алгоритмов
- •Логическое проектирование
- •Физическое проектирование
- •Проектирование интерфейса
- •Вызов и загрузка
- •Тестирование
- •Заключение
- •Список используемой литературы
- •Приложение 1
- •Приложение 2
- •Приложение 3 Листинг программы:
- •Приложение 4
Логическое проектирование
Основные этапы работы программы:
При запуске программы открывается вкладка с вводом размерности матрицы смежности, при подтверждении ввода открывается следующая вкладка, где можно определить характеристику графа и построить его графически.
Рис 1. Обобщенный алгоритм работы программы
Таблица идентификаторов, используемых в данном программном обеспечении.
Выбор следующих структур данных обоснован тем, что граф (для построения) представляет собой матрицу смежности и 2 массива координат Х и Y положения его вершин при визуализации. Для того чтобы определить его характеристики, задействованы специальные массивы, хранящие в себе информацию о его вершинах, а для визуализации использованы как целочисленные переменные, хранящие информацию о построении, так и массивы, хранящие информацию о том как и в какой форме будет визуализирован граф пользователю.
Таким образом, чтобы обеспечить работу в программе функций и процедур между собой, использованы следующие идентификаторы:
Таблица 1
Наименование |
Обозначение |
Тип данных |
Состояние построения графа |
ShowGraf |
Логический(Boolean) |
Координаты выделенной вершины (X,Y) |
RSel,CSel |
Целочисленный (integer) |
Делитель |
CountDel |
Целочисленный (integer) |
Цент окружности построения (X,Y) |
CenterX, CenterY |
Целочисленный (integer) |
Количество вершин, не больше 255 |
Vershina |
Целочисленный (Byte) |
Массивы координат вершин |
masX,MasY |
Array of integer |
Продолжение Таблица 1.
Нажата ли клавиша мыши и перемещается ли курсор |
MouseDowning,MouseMoving |
Boolean |
Вершина, которую можно переместить |
UsingPoint |
Byte |
Массив для проверки на связность |
R1 |
Array [1..255] of array[1..255] of integer |
Глобальные переменные для обхода в ширину |
mark,Emark |
Array of byte |
Счётчик количества компонент связности |
KountKS |
Byte |
Прохождения вершин для нахождения компонент связности. |
GroupKS |
Array of byte |
Вершина, проверяемая на точку сочленения |
ExceptionV |
Byte |
Массив для прохода в глубину |
Mark1 |
Array [byte] of boolean |
Счетчики |
K,S,c |
Boolean |
Точки сочленения |
PS |
Array of byte |
Массив цветов для компонентов связности\двусвязности |
clrOfP |
Array[0..256] of TColor |
Тип построения вершины |
_TypeOV
|
Byte |
Физическое проектирование
В программе используется 1 главный модуль MainGraf - модуль с вкладками ввода, параметров, настроек и небольшой справки.
Рассмотрим процедуры и функции основного модуля MainGraf:
Таблица 2
Заголовок процедуры или функции |
Формальные параметры |
Выполняемые действия |
function TmainGraf.FindKS(_Type: byte): byte; |
- |
Функция нахождения количества компонент связности и их вывода |
procedure TMainGraf.Depth(v:byte;_Type:byte); |
u,z:byte; |
Обходит граф в глубину и выводит результат обхода |
Procedure TMainGraf.Recursiya(ii: integer); |
a,b: integer; |
Обходит граф в ширину и выводит результат |
procedure Reach(); |
S,T:set of 1..255; i,j,l:integer; |
Проверка графа на связность |
procedure TMainGraf.SpeedButton1Click(Sender: TObject); |
i,j,a: integer; |
Авто заполнение матрицы смежности (таблицы) |
Продолжение Таблица 2.
procedure TMainGraf.DrawArrow(Canvas: TCanvas;x0, y0,x1,y1: Integer; __type,penwidth: byte); |
XB, YB, XE, YE, XM, YM,x11,y11: Integer; Angle_Line, Angle_Arrow: Extended; Length_Line, Length_Arrow: integer; |
Процедура построения линии двух вариантов: направленную (1) или нет (2) с настройкой ширины и цвета линии
|
Procedure TMainGraf.Visualization(Canvas: TCanvas;_Type: byte); |
i,j: integer; //cчетчики a,b,c: integer; //переменный для дополниельных вычислений Xx,Yy :integer; //переменные для хранения координаты вершины cosS,SinS: real; // син и косинус угла наклона Ugol: real; // угол наклона прямой alpha: real; // угол наклона стрелки у прямой Step: integer; //шаг для построения квадрата s1,s2: string; //строки для записи в лейбл |
Визуализация графа |
procedure TMainGraf.SpeedButton2Click(Sender: TObject); |
- |
Визуализация графа |
Продолжение таблица 2.
procedure TMainGraf.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); |
Xpos, Ypos,i: integer; |
Нажатие по изображению графа, выделяется вершина |
procedure TMainGraf.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); |
- |
Передвижение курсора по изображению графа |
procedure TMainGraf.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); |
- |
Отпустить нажатие по изображению графа, строиться граф |
procedure TMainGraf.Button1Click(Sender: TObject); |
i,j: integer; |
Задает граф, настраивает начальное состояние программы |
procedure TMainGraf.FormCreate(Sender: TObject); |
i,j: integer; a,b,c: byte; F: textFile; S: string; |
Настраивает программу при запуске. |
procedure TMainGraf.SpeedButton5Click(Sender: TObject); |
TypeG: boolean; |
Вызывает процедуру проверки графа на связность и выводит результат |
procedure TMainGraf.SpeedButton7Click(Sender: TObject); |
z: integer; |
Вызывает процедуру обхода в ширину и выводит полученный результат |
procedure TMainGraf.SpeedButton4Click(Sender: TObject); |
i: integer; |
Вызывает процедуру построения графа |
procedure TMainGraf.SpeedButton3Click(Sender: TObject); |
a,b: integer; k: integer; b1: boolean; |
Вызывает процедуру поиска точек сочленения и анализирует данные |
Продолжение Таблица 2.
procedure TMainGraf.SpeedButton6Click(Sender: TObject); |
TypeG: boolean; a,k,b: integer; PSP: array of integer; //масси тпа вершины (со связями или нет) empty: boolean; //относится к массиву выше. MAXGroups: byte; //число компонент связности, без точек сочленения consist: boolean; //есть ли дуги из вершины colKD: byte; //Число компонент двусвязнсти |
Вызывает необходимые процедуры для определения двусвязных компонент графа, анализирует данные и выводит полученный результат |
procedure TMainGraf.SpeedButton8Click(Sender: TObject); |
s: integer; |
Вызывает процедуру для обхода графа в глубину |
procedure TMainGraf.FormResize(Sender: TObject); |
x,y: integer; |
Изменение размера формы |
procedure TMainGraf.BitBtn1Click(Sender: TObject); |
a,b,c: byte; |
Задает массив цветов, для визуализации компонентов двусвязности и связности |
procedure TMainGraf.Timer1Timer(Sender: TObject); |
- |
Процедура задержки конечной визуализации графа, если выделить вершину |
Продолжение Таблица 2.
procedure TMainGraf.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); |
CSel:=ACol; RSel:=ARow; |
Выделение дуги графа |
procedure TMainGraf.StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer; const Value: String); |
- |
Ввод данных в таблицу |
procedure TMainGraf.StringGrid1KeyPress(Sender: TObject; var Key: Char); |
- |
Запрет на ввод в таблицу символов кроме 0 и 1 |