Проектирование АИС

Автор: Пользователь скрыл имя, 28 Марта 2013 в 16:34, курсовая работа

Описание работы

Курсовой проект выполняется с целью закрепления знаний и развития навыков самостоятельного проектирования алгоритмов и программ.
Задачами курсового проекта являются:
Исследование графов
изучение основных свойств графов
изучить один алгоритм на грае
написание программы, которая выполняет один из алгоритмов на графе

Содержание

Введение 3
1. Основные сведения о матрицах смежности. 5
2. Математические зависимости для определения заданных свойств графа 6
2.1. Основные определения. 6
2.2. Алгоритм Дейкстры «Нахождение минимального пути» 7
3. Структура программы 14
3.1 Хранение информации о графе 15
3.2 Входные и выходные данные 16
3.3 Анализ программы 16
4. Руководство пользователя 23
Заключение 25
Список литературы 26

Работа содержит 1 файл

KURSOVAYa_RABOTA.docx

— 149.49 Кб (Скачать)

Размещение объектов в Delphi связано с более тесными отношениями между объектами и реальным программным кодом. Объекты помещаются на форму, при этом код, отвечающий объектам, автоматически записывается в исходный файл. Этот код компилируется, обеспечивая существенно более высокую производительность, чем визуальная среда, которая интерпретирует информацию лишь в ходе исполнения программы.

Для удобства пользователя создан визуальный редактор работы с графами. Данный редактор позволяет вводить граф в виде изображения вершин и ребер на плоскости.

Для  изображения  контекстного меню потребовалось обработать нажатие правой кнопки мышки.

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; // по нажатию на кнопку и даже

Shift: TShiftState; X, Y: Integer);

begin

if button <>mbLeft then // если  нажали левой кнопкой

PopupMenu1.Popup(Mouse.CursorPos.X, Mouse.CursorPos.y); // показать  контекстное меню

end;


 

Для размещения ребра или вершины используется следующая схема.

 

3.3 Интерфейс программы 

При запуске программы перед  вами появляется окно графического интерфейса.

 

 

Данное окно позволяет создавать  новые графы ( через матрицу смежности и графический интерфейс). Загружать и сохранять их используя пункты меню. Пример решения задачи

Для сохранения и загрузки используется  стандартный диалог выбора файлов.

На вкладке палитры компонентов Dialogs находятся компонент Delphi OpenDialog и компонент Delphi SaveDialog. Все Delphi диалоги, находящиеся на этой вкладке, в том  числе и Delphi диалоги выбора файла, невизуальные, т.е. при переносе их на Форму в работающей программе  их не видно, они видны только на этапе конструирования. Компонент Delphi OpenDialog позволяет открыть в нашей  программе стандартное Windows-окно диалога  открытия файла, компонент Delphi SaveDialog - окно диалога сохранения. Данные полученные из диалогов передаются в программу  для работы с конкретным файлом графа.

Граф в программе хранится в  виде матрицы смежности. Данная матрица  используется для сохранения весов  дуг. В столбцах находятся вершины  куда направлена дуга, а в строках  откуда.

Для ориентированного графа матрица  может быть не симметрична относительно главной диагонали. Для неориентированного графа она всегда симметрична.

Компонент StringGrid представляет собой  таблицу, содержащую строки. Данные таблицы  могут быть только для чтения или  редактируемыми. Таблица может иметь  полосы прокрутки, причем заданное число  первых строк и столбцов может  быть фиксированным и не прокручиваться. Таким образом, можно задать заголовки  столбцов и строк, постоянно присутствующие в окне компонента. Каждой ячейке таблицы  может быть поставлен в соответствие некоторый объект.

Компонент StringGrid предназначен в первую очередь для отображения таблиц текстовой информации.

Основные свойства компонента, определяющие отображаемый текст:

  • Cells[ACol, ARow: Integer]: string - Строка, содержащаяся в ячейке с индексами столбца и строки ACol и ARow.
  • Cols[Index: Integer]: TStrings - Список строк, содержащихся в столбце с индексом Index.
  • Rows[Index: Integer]: TStrings - Список строк, содержащихся в строке с индексом Index.

 

 

 

Заключение

 

 

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

 

Список  литературы

 

 

1. Абдеев Р.Ф. Философия информационной  цивилизации. - М.: Владос, 1994.

2. Адамар Ж. Исследование психологии  процесса изобретения в области  математики. - М.: Сов. радио, 1970.

3. Болтянский В.Г. Информатика  и преподавание математики// Математика  в школе. 1989. № 4.-С.86-90

4. Вейценбаум Дж. Возможности вычислительных  машин и человеческий разум. - М.: Радио и связь, 1982.

5. Вирт Н. Алгоритмы+Структуры  данных=Программа. - М.:Мир, 1989

6. Вирт Н. Систематическое программирование: Введение. - М.: Мир, 1977.

7. Громов Г.Р. Очерки информационной  технологии. - М.: ИнфоАрт, 1993.

8. Дейкстра Э. Дисциплина программирования. - М.: Мир, 1978.

9. Ильенков Э. В. Философия  и культура. - М.: Полит. лит., 1991.

10. Йодан Э. Структурное проектирование  и конструирование программ. - М.: Мир, 1979.

11. Майерс Г. Надежность программного  обеспечения. - М.: Мир, 1980.

12. Махмутов М.И. Организация  проблемного обучения в школе. - М., 1986.  

 

 

ПРИЛОЖЕНИЕ  А

Модуль реализации алгоритма  Дейкстры

Для упрощения понимания программы  и возможности использовать в  дальнейшем написанного кода было принято  решение разработать модуль для  реализации алгоритма Дейкстры. Работа данного модуля полностью соответсвует описанному алгоритму:

 

unit deikstra; // модуль  реализации алгоритма дейкстры

interface

const max = 100; //  максимальное  количество вершин

 inf =100*100*100; // замена  бесконечности

Type TJarak = Array [1..max,1..max] of Integer; //  матрица смежности (тип)

 

  TPath  = record // запись для хранения дерева решений

    nodeke : byte;

    Arraypath : Array [1..max] of byte;

    Jarak     : Integer;

  end;

Procedure RuteTerpendek(var Data : TJarak; var Closed : TPath;var awal,tujuan : integer;count : byte);

Implementation

Procedure RuteTerpendek(var Data : TJarak; var Closed : TPath;var awal,tujuan : integer;count : byte);

 

Var// локальные  переменные 

  Path : Array [ 1..max] of  TPath;

  Open,Jauh : Array[1..max] of Real ;

 

procedure Initdata(count : byte); //  иницаилизация переменных и выделение памяти

var i,j : byte;

begin

fillchar(Open,sizeof(Open),inf);

fillchar(jauh,sizeof(jauh),inf);

fillchar(Path ,sizeof(Path ),inf);

 

 

  for i := 1 to count do // вносим переданные данные в начало дерева решений

  begin

    open[i] := 0 ;

    path[i].Jarak  := 0;

    jauh[i] := data[awal,i] ;

    path[i].arraypath[1] := awal;


ПРИЛОЖЕНИЕ  А

 

    path[i].nodeke := 1;

    path[i].arraypath[2] := i;

    path[i].nodeke := path[i].nodeke + 1;

    path[i].Jarak  := Data[path[i].arraypath[1],path[i].arraypath[2]]

  end;

  open[awal] := awal ;

end;

procedure update_close(var Closed: TPath); // обновление  последней вершины решшения

begin

  closed := path[Tujuan] ;  // возвращаем  путь

end ;

 

function successor(count : byte) : byte ; // проверка  на достижисомть

var i,j : byte ;

  minimum : Real ;

begin

  minimum := inf;

  for i := 1 to count do

    if (jauh[i] < minimum) and (open[i] = 0) then // если путь лежащий через И меньше минимума и до этой вершины можно добраться то этот путь лучше

  begin

    minimum := jauh[i] ;

    j := i ;

  end ;

  successor := j ;

end ;

 

procedure lessthen(count,x : byte) ; //

var i : byte ;

  a,b : Real ;

begin

  for i := 1 to count do

  begin

    a := jauh[x] + data[x,i] ;

    b := jauh[i] ;

    if a < b then

    begin

      jauh[i] := a ;

      path[i] := path[x];

      path[i].nodeke := path[i].nodeke + 1;

      path[i].arraypath[path[i].nodeke] := i;

      path[i].Jarak  := path[i].Jarak + Data[path[i].arraypath[path[i].nodeke-1],path[i].arraypath[path[i].nodeke]]

    end;

  end ;

end ;


ПРИЛОЖЕНИЕ  А

 

 

procedure disktra(count : byte) ; // вызов процедуры поиска  пути 

var i,j : byte ;

begin

  for i := 1 to count do //  для всех вершин  графа

  begin

    lessthen(count,successor(count)) ; // начали  строить дерево решений  

    update_close(closed); // заменили последний достигнутый пунтк

    open[successor(count)] := successor(count) ; // теперь кратчайший путь лежит через него

  end ;end ;

begin

  initdata(count);

  disktra(count);

end;

 

end.


 


Информация о работе Проектирование АИС