Разработка программы, при помощи которой можно задать граф с любым количеством вершин и ребер

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    134,22 Кб
  • Опубликовано:
    2015-11-21
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Разработка программы, при помощи которой можно задать граф с любым количеством вершин и ребер

Введение

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

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

В теории графов дополнением или обратным к графу G называется такой граф H, имеющий то же множество вершин, что и G, но в котором две несовпадающие вершины смежны тогда и только тогда, когда они не смежны в G. Чтобы найти обратный граф, необходимо дополнить данный граф до полного и удалить все ребра, которые уже были до этого.

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

Для хранения исходных данных была выбрана база данных Access, структура которой будет рассмотрена в разделе «исходные данные».

Чтобы построить интерфейс пользователя для взаимодействия с исходными данными, а также для построения изображений был выбран язык программирования АВС-Паскаль.

1. Разработка проекта приложения

граф пользователь программный ребро

1.1 Постановка задачи


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

<{a,b,c,d},{u,v,w,x}; {(u,a),(u,b),(v,b),(v,c),(w,c),(w,a),(x,c), (x,d)}>. Граф нам определим как модель, носителем которой является множество вершин, а отношение - бинарное отношение смежности вершин. Тогда данный граф запишется как <{a,b,c,d}; {(a,b), (b,a),(b,c),(c,b),(a,c),(c,a),(c,d),(d,c)}>. В таком представлении ребру соответствуют две пары вершин (v1,v2) и (v2,v1), инцидентных данному ребру. Чтобы задать такое представление, достаточно для каждого ребра указать двухэлементное множество вершин - его мы и будем отождествлять с ребром. Для данного графа рёбра задаются множеством {{a,b},{b,c},{a,c},{c,d}} и граф мы будем записывать как пару (V,E), где V - множество вершин, а E - множество рёбер.

При составлении программы необходимо разработать следующие модули:

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

Ø  аналитический модуль: модуль построения полного графа и дополнительного графа.

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

Основной задачей работы является составить программу, которая:

.        Задает исходный граф;

.        Рассчитывает полный и дополнительный граф;

.        Строит изображения трех графов.

1.2 Организация входных и выходных данных


Входным данным является количество вершин графа N, двумерный массив ребер графа Gr[1..2,1..100].

Выходными данными являются построенные изображения графа, полного графа, дополнительного графа.

Промежуточными данными являются построенные массивы FullGr[1..2,1..100], AddGr[1..2,1..100]

 

.3 Выбор состава технических и программных средств

ABC 3.0.1 - Система предназначена для обучения программированию на языке Паскаль и ориентирована на школьников и студентов младших курсов.

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

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

Простейшие событийные программы можно писать, пользуясь лишь процедурными переменными. В консольных программах можно создавать таймеры и звуки, которые реализованы без использования объектов. В модулях может отсутствовать разделение на секцию интерфейса и секцию реализации; в этом случае модули устроены практически так же, как и основная программа, что проще на ранних этапах обучения. Тела методов можно определять непосредственно внутри классов, что позволяет создавать классы практически сразу после изучения записей, процедур и функций. Имеется модуль контейнерных классов (динамические массивы, стеки, очереди, множества), а также библиотека визуальных компонентов.

Компилятор Pascal ABC не генерирует исполняемый код в виде.exe-файла, а создает в результате компиляции дерево программы в памяти, которое затем выполняется с помощью встроенного интерпретатора.

В программе решаются независимые друг от друга подзадачи:

1.      Ввод данных;

.        Построение полного графа;

.        Построение дополнительного графа;

.        Построение графического изображения графов.

Алгоритм работы программы представлен на рисунке 1.























Рисунок 1 -- Модель работы программы

2. Описание приложения

Входное данное N - количество вершин.

Массив gr:array[1..100,1..100] of integer - двумерный массив ребер графа. Каждая строка массива задает ребро графа, где первый элемент - первая вершина графа, второй элемент - вторая вершина графа.

Массив FullGr:array[1..100,1..100] of integer - двумерный массив ребер полного графа. Каждая строка массива задает ребро графа, где первый элемент - первая вершина графа, второй элемент - вторая вершина графа.

Массив AddGr:array[1..100,1..100] of integer - двумерный массив ребер полного графа. Каждая строка массива задает ребро графа, где первый элемент - первая вершина графа, второй элемент - вторая вершина графа.

Массив KoordV:array[1..100,1..100] of integer; -- используется при построении графа и задает координаты вершины графа на графическом полотне (асбцисса - первое число в строке, ордината - второе число в строке).

Остальные данные являются промежуточными.

Используем основные приемы обработки массивов для программирования задачи - ввод массива, заполнение массива, проверка элементов массива на какое-либо условие.

Изображение графа строим с помощью графических примитивов.

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

 

.1 Руководство пользователя


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

Рисунок 2 - Задание графа

Программа выдает заданный граф:


Рассчитывает полный граф:

Рисунок 3 - Расчет полного графа и дополнительного графа

После этого программа выводит изображения графов.

Приведем примеры результатов работы программы.

Рисунок 4 - Исходный заданный граф

Рисунок 5 - Изображение полного графа

Рисунок 7 - Изображение дополнительного графа

Рисунок 8 - Исходный граф

Рисунок 9 - Полный граф

Рисунок 10 - Дополнительный граф

2.2 Вызов и загрузка


Вызов программы производится открытием среды программирования АВС-Паскаль и загрузкой программного файла (с расширением pas). запуск программы проводится клавишей F9.

Заключение

В процессе выполнения курсовой работы был проведен следующий комплекс работ:

.        Проведена формализация задачи;

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

.        Подготовлены контрольные примеры для контроля правильности вычислений. В соответствии с контрольными примерами программа была отлажена.

.        Подготовлена пояснительная записка.

Цели, поставленные в начале выполнения курсовой работы, выполнены.

Библиография

1.      Йенсен К., Вирт Н. Паскаль. Руководство для пользователя и описание языка - М.: Финансы и статистика, 1982. - С. 151.

.        Вирт Н. Алгоритмы + структуры данных = программы - М.: Мир, 1985. - С. 406.

.        Грогоно П. Программирование на языке Паскаль - М.: Мир, 1982. - С. 384.

.        Перминов О. Н. Язык программирования Паскаль : Справочник - М.: Радио и связь, 1989. - С. 128. - ISBN 5-256-00311-9.

.        Культин Н.Б. Delphi 6. Программирование на Object Pascal - СПб.: БХВ-Петербург, 2001. - С. 528. - ISBN 5-94157-112-7.

.        Моргун А. Н. Программирование на языке Паскаль (Pascal). Основы обработки структур данных - М.: Диалектика, 2005. - С. 576. - ISBN 5-8459-0935-X.

.        Рубенкинг Н.Дж. Турбо Паскаль для Windows: в 2-х томах. Пер. с англ. - М.: Мир, 1993.

Приложения

ЛИСТИНГ ПРОГРАММЫ

Листинг 1 - Код программы на Паскаль.

program graf;graphabc, crt;N:integer;:array[1..100,1..100] of integer;:array[1..100,1..100] of integer;:array[1..100,1..100] of integer;:array[1..100,1..100] of integer;,j,k,Nv,M,l,R,AR:integer;,Y,Xc,Yc:integer;,pr1,pr2:boolean;,Ug:real;,YcFrom,XcTo, YcTo:integer;

begin;('Введите количество вершин графа');(N);

{Ввод графа}:=1;

i:=0;k<>0 do:=i+1;

writeln('Введите ребро графа');('Введите номер первой вершины');

readln(Nv);[1,i]:=Nv;

writeln('Введите номер второй вершины');

readln(Nv);[2,i]:=Nv;

writeln('Eще одну вершину? (1/0)');(k);;:=i; {количество ребер};('Заданный граф');

for i:=1 to M do(Gr[1,i], ' ', Gr[2,i]);

readln;

{задать полный граф}('Полный граф');

k:=0;i:=1 to N-1 doj:=i+1 to N do:=k+1;[1,k]:=i;[2,k]:=j;(FullGr[1,k], ' ', FullGr[2,k]);

end;();

{задать дополнительный граф}:=0;:=0;('Дополнительный граф');

for j:=1 to k do

{берем j-ое ребро полного графа и проверяем, входит ли оно в граф}

pr:=false;i:=1 to M do:=(FullGr[1,j]=gr[1,i]) and (FullGr[2,j]=gr[2,i]);:=(FullGr[2,j]=gr[1,i]) and (FullGr[1,j]=gr[2,i]);(pr1 or pr2) then pr:=true

end;not(pr) then

{добавляем ребро в дополнительный граф}

begin:=l+1;[1,l]:=FullGr[1,j];[2,l]:=FullGr[2,j];(AddGr[1,l], ' ', AddGr[2,l]);;;:=l;;

{Построить изображение графа}();(0,0,'Заданный граф');

SetPenWidth(3);(clBlue);:=320;:=200;:=2*Pi/N;:=0;i:=1 to N do:=X+trunc(150*cos(Ug));:=Y-trunc(150*sin(Ug));:=25;[1,i]:=Xc;[2,i]:=Yc;(Xc - R, Yc - R, Xc + R, Yc + R);(xc,yc,inttostr(i));:=Ug+Alf;;(1);(clred);j:=1 to M do:=KoordV[1,gr[1,j]];:=KoordV[2,gr[1,j]];:=KoordV[1,gr[2,j]];:=KoordV[2,gr[2,j]];(XcFrom,YcFrom);

LineTo(XcTo,YcTo);;

{изображение графа построено};

{Построить изображение полного графа}();(0,0,'Полный граф');(3);

SetPenColor(clBlue);:=320;:=200;:=2*Pi/N;:=0;i:=1 to N do:=X+trunc(150*cos(Ug));:=Y-trunc(150*sin(Ug));:=25;[1,i]:=Xc;[2,i]:=Yc;(Xc - R, Yc - R, Xc + R, Yc + R);(xc,yc,inttostr(i));:=Ug+Alf;;(1);(clred);j:=1 to k do:=KoordV[1,Fullgr[1,j]];:=KoordV[2,Fullgr[1,j]];:=KoordV[1,Fullgr[2,j]];:=KoordV[2,Fullgr[2,j]];(XcFrom,YcFrom);

LineTo(XcTo,YcTo);;

{изображение полного графа построено};

{Построить изображение дополнительного графа}();(0,0,'Дополнительный граф');(3);

SetPenColor(clBlue);:=320;:=200;:=2*Pi/N;:=0;i:=1 to N do:=X+trunc(150*cos(Ug));:=Y-trunc(150*sin(Ug));:=25;[1,i]:=Xc;[2,i]:=Yc;(Xc - R, Yc - R, Xc + R, Yc + R);(xc,yc,inttostr(i));:=Ug+Alf;;(1);(clred);j:=1 to AR do:=KoordV[1,addgr[1,j]];:=KoordV[2,addgr[1,j]];:=KoordV[1,addgr[2,j]];:=KoordV[2,addgr[2,j]];(XcFrom,YcFrom);(XcTo,YcTo);;

{изображение дополнительного графа построено}.

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

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!