Определение достижимости города в изменяемой системе двусторонних дорог

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

?роверить достижимость;

Ожидаемый результат: вывод сообщения на главную форму о достижимости или не достижимости из указанного города А в указанный город В. (Приложение Г, рисунок 6)

7.Случай использования: достижимости до всех городов из заданного города А.

Предусловие: задана система дорог и городов, заданный город А.

Тестовый случай: нажатие пользователя на кнопку Проверить достижимость;

Ожидаемый результат: вывод результата на главную форму в виде графического решения с цветом дорог:

если дороги зеленые - все города достижимы из города А;

если дороги желтые - не все города достижимы из города А; (Приложение Г, рисунок 7(а,б))

8.Случай использования: задание определенного количества городов через счетчик.

Предусловие: на компоненте Image1 имеется хотя бы 1 город.

Тестовый случай: увеличение или уменьшение счетчика количества городов.

Ожидаемый результат: на компоненте Image1 появится заданное количество город. (Приложение Г, рисунок 8)

9.Случай использования: загрузка графа из файла.

Предусловие: имеется файл формата *.gph с данными матрицы смежности.

Тестовый случай: нажатие пользователя на кнопку Загрузить файл графа с файла и указание файла через проводник.

Ожидаемый результат: заполнение матрицы смежности по данным из файла и графическое отображение городов на компоненте Image1. (Приложение Г, рисунок 9)

10.Случай использования: сохранения текущего графа в файл.

Предусловие: имеется система дорог и городов.

Тестовый случай: нажатие пользователя на кнопку Сохранить текущий граф в файл, указание места сохранения через проводник и имя файла.

Ожидаемый результат: на диске появится файл с именем, который задал пользователь и форматом *.gph, содержащий данные матрицы смежности. (Приложение Г, рисунок 10)

11.Случай использования: удаление всех дорог;

Предусловие: имеется система дорог и городов.

Тестовый случай: нажатие пользователя на кнопку Удалить все дороги;

Ожидаемый результат: в имеющейся системе дорог и городов будут удалены все дороги. (Приложение Г, рисунок 11)

 

Заключение

 

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

 

Список использованных источников

 

1.Круз Р.Л. Структуры данных и проектирование программ / Р.Л. Круз; пер.с англ. - М.: БИНОМ. Лаборатория знаний, 2008 - 765 с.: ил. - (Программисту).

2.Кузнецов А.В., Сакович В.А., Холод Н.И. Высшая математика. Математическое программирование. - Минск: Высшая школа, 2010 г.- С.792.

.Оре О. Теория Графов. - М.: Наука, 2010 г.

.Белов. Теория Графов. - М.: Наука, 2011 г.

.Нефедов В.Н., Осипова В.А. Курс дискретной математики. - М.: МАИ, 2010 г.

 

Приложение А

 

Листинг программы

дорога город достижимость интерфейс

unit Unit1; // модуль формы 1 Проверка достижимости из города А до всех других дорог в изменяемой системе дорог

interface// стандартные модули, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, Grids, ExtCtrls, ComCtrls, Menus, ExtDlgs, Spin, XPMan;

type= class(TForm) // типы объектов графического интерфейса и процедуры модуля

Image1: TImage;: TMainMenu;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;

OpenDialog1: TOpenDialog;: TSaveDialog;: TMenuItem;

PopupMenu1: TPopupMenu;: TMenuItem;: TMenuItem;: TMenuItem;: TGroupBox;: TPageControl;: TTabSheet;: TButton;: TButton;: TButton;: TButton;: TGroupBox;: TButton;: TButton;: TButton;: TXPManifest;: TGroupBox;: TLabel;: TLabel;: TSpinEdit;: TLabel;: TSpinEdit;: TButton;: TMenuItem;: TLabel;: TTabSheet;: TStringGrid;: TButton;: TButton;: TSpinEdit;: TLabel;: TTabSheet;: TLabel;: TStringGrid;: TSpinEdit;: TButton;: TButton;FormCreate(Sender: TObject);Button2Click(Sender: TObject);Image1MouseMove(Sender: TObject; Shift: TShiftState; X,: Integer);Image1MouseUp(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);redrow;Button1Click(Sender: TObject);Button9Click(Sender: TObject);Button5Click(Sender: TObject);Button4Click(Sender: TObject);Button10Click(Sender: TObject);N5Click(Sender: TObject);N2Click(Sender: TObject);N3Click(Sender: TObject);N4Click(Sender: TObject);StringGrid3KeyPress(Sender: TObject; var Key: Char);Edit1Change(Sender: TObject);Image1MouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);N7Click(Sender: TObject);N8Click(Sender: TObject);N9Click(Sender: TObject);Button6Click(Sender: TObject);Button7Click(Sender: TObject);Button8Click(Sender: TObject);N10Click(Sender: TObject);Button11Click(Sender: TObject);StringGrid3KeyUp(Sender: TObject; var Key: Word;: TShiftState);vvChange(Sender: TObject);isvChange(Sender: TObject);N6Click(Sender: TObject);StringGrid3Set(Sender: TObject; ACol,: Integer; const Value: String);Button3Click(Sender: TObject);Button12Click(Sender: TObject);IzverChange(Sender: TObject);

{ Private declarations }

{ Public declarations };= record

x,y:Integer;:Integer;

end;: TForm1;,pos2:Integer;,xx,yy,xb,yb,ugol,doroga,vver,i,j,k:Integer;,reb,reb2,del_ver,result:Boolean;:array[1..100] of vv;:array of array of integer;Math, Unit2, Unit3, Unit4;

{$R *.dfm}findver(x,y,rad:integer):Integer; // находит вершину в графе на которую указали сейчас.

vers[i].x-rad)and(x0 then[i-1,j-1]:=1 else dost[i-1,j-1]:=0;i:=1 to pos doj:=1 to pos dodost[j-1,i-1]=0 then doroga:=doroga+1;

for k:=0 to pos-1 do // ищем можно ли сократить путь через третью вершину К

for i:=0 to pos-1 doj:=0 to pos-1 do[i,j]:= dost[i,j] or (dost[i,k] and dost[k,j]) ;i:=1 to pos doj:=1 to pos dodost[j-1,i-1]=0 then vver:=vver+1;.StringGrid1.Cells[j,i]:=inttostr(dost[i-1,j-1]);

end;;TForm1.redrow; // перерисовка изображения графа на картинкеi,j:Integer; // вспомогательные переменные

0then.Canvas.MoveTo(vers[i].x,vers[i].y);.Canvas.lineTo(vers[j].x,vers[j].y)