Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Расчетно Пояснительная записка_Шаханов.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
2.65 Mб
Скачать
  1. Логическое проектирование

Основные этапы работы программы:

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

Рис 1. Обобщенный алгоритм работы программы

  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. Физическое проектирование

В программе используется 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