
- •Курсовая работа
- •Казань 2009 содержание
- •1. Задание
- •2. Описание применения
- •2.1. Постановка задачи
- •В программе используются следующие определения [1].
- •2.2. Обращение к программе
- •2.3. Входные данные
- •2.4. Выходные данные
- •2.5. Сообщения
- •2.5.1. Информационные сообщения
- •2.5.2. Сообщения об ошибках
- •3. Описание программы
- •3.1. Метод решения задачи
- •3.2. Структура программы
- •3.3. Описание модулей
- •3.3.1. Main - главный модуль
- •3.3.2. Calc_distances – вычисление расстояний до заданной вершины
- •3.3.3. Input_graph - ввод графа
- •3.3.4. Output_message - вывод сообщения
- •3.3.5. Trans_graph - преобразование графа
- •3.3.6. Get_edges_count - вычисление количества ребер
- •4. Подготовка к отладке программы
- •4.1. План отладки
- •4.2. Проектирование тестов
- •4.2.2. Тесты белого ящика
- •5. Заключение
- •Литература
- •Приложение Текст программы
3.2. Структура программы
Структура программы показана на рисунке
main- главная
программа
3
1
calc_distances-
вычисление расстояний от заданной
вершины до остальных вершин графа
2
input_graph-
ввод графа
trans_graph-преобразование
графа
4
5
get_edges_count-подсчет
количества ребер
output_message
- вывод сообщений
Рис.2.2. Модульная структура программы
Программа состоит из шести функционально-прочных модулей: main - главная программа, input_graph - ввод графа, trans_graph – преобразование графа, get_edges_count – подсчет количества ребер, output_message - вывод сообщений, calc_distances – вычисление расстояний от заданной вершины до остальных вершин графа.
Сопряжения модулей программы описаны в табл. 3.1. Все данные между модулями передаются только в виде параметров, глобальных переменных в программе нет.
Таблица 3.1 Сопряжение модулей.
N |
Вход |
Выход |
|
1 |
|
Количество вершин начального графа, матрица смежности начального графа, код завершения |
|
2 |
Количество вершин начального графа, матрица смежности начального графа |
Количество вершин конечного графа, матрица смежности конечного графа |
|
3 |
Количество, матрица смежности, номер вершины |
Расстояния до вершины |
|
4 |
Количество вершин, матрица смежности |
Количество ребер |
|
5 |
Номер сообщения |
- |
3.3. Описание модулей
3.3.1. Main - главный модуль
ОБРАЩЕНИЕ ИЗ MS DOS: Kurs
ЗАГОЛОВОК: void main ()
ФУНКЦИЯ: Ввод графа из стандартного входного файла stdin, поиск в нем заданного пути от заданной вершины, вывод результата и сообщений об ошибках в стандартный выходной файл stdout.
ВХОДНЫЕ ДАННЫЕ: Нет.
ВЫХОДНЫЕ ДАННЫЕ: Нет.
ЗНАЧЕНИЕ: Нет.
РАБОЧИЕ ДАННЫЕ:
gr_vertex_count – количество вершин в начальном графе;
gr_adj_matrix – матрица смежности начального графа;
gr1_vertex_count – количество вершин в конечном графе;
gr1_adj_matrix – матрица смежности конечного графа;
i,j – номера вершины;
kz – код завершения подпрограммы;
dest_vertex – заданная вершина.
АЛГОРИТМ: см. алгоритм 3.1.
Алгоритм 3.1. Алгоритм модуля main
kz = input_graph (&gr_vertex_count, &gr_adj_matrix); /* ввод графа */
if (kz != 0)
{
goto exit
}
Преобразование графа;
Ввод номер вершины;
Вычисление расстояний до введенной вершины;
Вывод вершин, расстояние до которых равно 2;
3.3.2. Calc_distances – вычисление расстояний до заданной вершины
ЗАГОЛОВОК:
void calc_distances(int vertex_count, int* adj_matrix, int** distances, int dest_vertex)
ФУНКЦИЯ: Вычисление расстояний.
ВХОДНЫЕ ДАННЫЕ:
vertex_count - количество вершин;
adj_matrix - матрицa смежности графа.
dest_vertex – номер заданной вершины.
ВЫХОДНЫЕ ДАННЫЕ:
distances – расстояния
ЗНАЧЕНИЕ: Нет
РАБОЧИЕ ДАННЫЕ:
i,j – номера вершин;
flag – признак завершения.
АЛГОРИТМ: см. алгоритм 3.2.
Алгоритм 3.2. Вычисление расстояний от заданной вершины до остальных вершин графа
Устанавливаем все расстояния равными -1;
distances[dest_vertex]=0;
flag=1;
while (flag)
{
flag=0;
for (i=0;i<vertex_count;i++)
{
if (distances[i]>=0)
{
for (j=0; j<vertex_count; j++)
{
if ((вершины i и j смежны) &&
(расстояние до j равно -1 или больше (расстояние до i)+1))
{
flag = 1;
distances[j] = distances[i]+1;
}
}
}