Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2011 / 2011 / UP_MODPR_.RTF
Скачиваний:
38
Добавлен:
12.03.2015
Размер:
541.34 Кб
Скачать

3.3.3. Vvodg - ввод графа

ЗАГОЛОВОК: int vvodg (int *n, char g[][NMAX])

ФУНКЦИЯ: Ввод графа из файла stdin в виде перечня ребер, перед которым указывается количество вершин n, и его преобразование в матрицу смежности g. NMAX - максимальное количество вершин.

ВХОДНЫЕ ДАННЫЕ: Нет.

ВЫХОДНЫЕ ДАННЫЕ:

n - количество вершин графа;

g - матрицa смежности графа (первые n строк и n столбцов матрицы NMAX * NMAX).

ЗНАЧЕНИЕ:

0 - ввод завершен без ошибок;

1 - ввод завершен, но было повторение ребер (игнорировалось);

2 - ошибка: входной файл пуст (ввод прекращен);

3 - ошибка: недопустимое количество вершин (ввод прекращен);

4 - ошибка: недопустимый номер вершины (ввод прекращен);

5 - ошибка: только одна вершина в ребре (ввод прекращен);

РАБОЧИЕ ДАННЫЕ:

i, j - номера вершин ребра;

pr - было повторение ребер.

АЛГОРИТМ: см. алгоритм 3.4.

Алгоритм 3.4. Алгоритм модуля vvodg

/* ввод списка ребер в матрицу смежности */

if (конец входного файла)

return 2; /* входной файл пуст */

ввод n;

if (n не допустимо)

return 3; /* недопустимое количество вершин */

обнуление матрицы g;

pr = 0;

while (не конец входного файла)

{ ввод i;

if (i не допустимо)

return 4; /* недопустимый номер вершины */

if (конец входного файла)

return 5; /* только одна вершина в ребре */

ввод j;

if (j не допустимо)

return 4; /* недопустимый номер вершины */

if (было ребро i-j) pr = 1; /* повторение ребер */

g[i][j] = g[j][i] = 1;

}

return pr; /* 0 - успех или 1 - было повторение ребер */

3.3.4. Vyvodp - вывод пути

ЗАГОЛОВОК: void vyvodp (int kvp, int p[])

ФУНКЦИЯ: Вывод в файл stdout kvp чисел (номеров вершин пути графа) из массива p.

ВХОДНЫЕ ДАННЫЕ:

p - номера вершин выводимого пути;

kvp - количество вершин выводимого пути.

ВЫХОДНЫЕ ДАННЫЕ: Нет.

ЗНАЧЕНИЕ: Нет.

РАБОЧИЕ ДАННЫЕ:

i - индекс текущей вершины пути.

АЛГОРИТМ: см. алгоритм 3.5.

Алгоритм 3.5. Алгоритм модуля vyvodp

for (i=0; i<kvp; i++)

вывод p[i];

перевод строки;

4. Подготовка к отладке программы

4.1. План отладки

Особенности данной программы затрудняют применение для нее в чистом виде традиционной стратегии тестирования: возможно более быстрого подключения к программе модулей ввода/вывода и сложных модулей с их предварительной автономной отладкой [3, 4]. Дело в том, что наиболее сложный модуль pminc имеет довольно громоздкие входные и выходные данные. Для его автономной отладки эти данные пришлось бы передавать с помощью имитаторов и драйверов, близких по функциям и сложности к модулям main, vvodg и vyvodp. Поэтому pminc удобно отлаживать после модулей main, vvodg и vyvodp или совместно с ними.

Работа модулей main и vvodg тесно переплетена: main сообщает об ошибках, обнаруженных модулем vvodg. При автономной отладке каждого из них, особенно при вводе ошибочных данных, драйвер или имитатор практически должен дублировать работу другого модуля. Поэтому их удобно отлаживать совместно. Модуль vyvodp прост и не требует автономной отладки.

Из приведенных соображений принят следующий план отладки в три этапа.

1. Тестирование модуля vvodg с драйвером dvvodg для тестов с правильными входными данными. Для проверки правильности ввода требуется модуль вывода матрицы смежности, который полезно использовать на всех этапах отладки.

2. Совместное тестирование модулей pminc, vyvodp и main с модулем vvodg (т. е. всей программы) на "правильных" тестах.

3. Тестирование всей программы для совместной отладки модулей main и vvodg на "неправильных" тестах.