Количество компонент связности в дополнении заданного графа

Автор: Пользователь скрыл имя, 13 Сентября 2011 в 01:00, курсовая работа

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

В программе используются следующие определения.
Граф представляет собой множество точек (вершин, узлов) вместе с линиями, соединяющими некоторые или все пары точек. Направленные линии со стрелками называют дугами, не имеющие направления – ребрами.

Содержание

1. ЗАДАНИЕ.

2. ОПИСАНИЕ ПРИМЕНЕНИЯ.

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

2.2. Обращение к программе.

2.3. Входные данные.

2.4. Выходные данные.

2.5. Сообщения.

2.5.1. Информационные сообщения.

2.5.2. Сообщения об ошибках.

3. ОПИСАНИЕ ПРОГРАММЫ.

3.1. Структура программы.

3.2. Описание модулей.

3.2.1. main – главный модуль.

3.2.2. vvod – функция ввода данных.

3.2.3. vivod– функция вывода матрицы.

3.2.4. matrica_dopolnenii– функция получения дополнения графа.

3.2.5. matrica_sviaznosti – функция матрицы связности графа.

3.2.6. comp_sv– функция количества компонент связности.

4. ОТЛАДКА ПРОГРАММЫ.

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

4.2. Проектирование тестов программы.

4.2.1. Тесты черного ящика.

4.2.2. Тесты белого ящика.

4.3 Отладочные средства.

4.4 Отладка программы.

ЗАКЛЮЧЕНИЕ

СПИСОК ЛИТЕРАТУРЫ

ПРИЛОЖЕНИЯ

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

Курсовая работа по программированию.doc

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

    ВХОДНЫЕ ДАННЫЕ:    n – количество вершин в графе, матрица связности графа.

    ВЫХОДНЫЕ  ДАННЫЕ: количество компонент связности.

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

    i – номер вершины, с которой начинается ребро.

    j – номер вершины,  которой заканчивается  ребро.

    kol – количество компонент связности.

    vp[NMAX] –  вектор посещения. 

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

    Алгоритм 3.7. Алгоритм модуля  int  comp_sv(int n, int mtrsv[NMAX][NMAX])

                                                 

    int  comp_sv(int n, int mtrsv[NMAX][NMAX])

        {   объявление переменных i, j, kol и vp[NMAX];

    обнуление в цикле  kol и vp;

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

                {  if (vp[i]==0)

                   {      vp[i]=1;

                 for (j=0;j<n;j++)

                  if (mtrsv[i][j]==1)

                      vp[j]=1;  kol++;

                   }

                }возврат  kol;} 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

4. ПОДГОТОВКА К ОТЛАДКЕ ПРОГРАММЫ 

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

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

  1. Тестирование модуля vvod, при этом создавалась специальная программа, которая выводила матрицу смежности.
  2. Тестирование модуля vivod совместно с функцией vvod и matrica_dopolnenii и главной функцией main.
  3. Совместное тестирование всех модулей программы на “правильных” тестах.
  4. Совместное тестирование всех модулей программы на “неправильных” тестах.
 

4.2. Проектирование тестов программы 

    4.2.1. Тесты черного ящика 

    Для проектирования тестов программы методами черного ящика с помощью эквивалентного разбиения входных/выходных данных на области (классы) эквивалентности составлен список ситуаций, каждая, из которых должна создаваться хотя бы одним тестом. Тестовые ситуации приведены в таблице 4.1., в скобках указаны их номера. 

   Таблица 4.1. 

   Области входных/выходных данных тестов программы 

Входное/выходное условие (значение) «Правильные»  классы эквивалентности «Неправильные»  классы эквивалентности
Количество  вершин n 2..NMAX            (1) n<2            (2),     n>NMAX              (3)
Номера  вершин ребер 0..n-1                   (4) i<0 (5), i>=n (6), j<0 (7), j>=n  (8), i=j (9)

gr[i][j]==1 (10)

Сообщения программы 1 (11), 2(12), 3(13), 4(14), 5(15), 6(16) 7(17), 8(18), 9(19)

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

Таблица 4.2. 

Тесты чёрного ящика для отладки программы 

№ теста Вход Выход Ситуации
Н е п р а в и л ь н ы е    т е с т ы
    1.
n =0 Сообщения: 1, 2, 7 2, 11, 17
    2.
n=-1 Сообщения: 1, 2, 7 2, 11, 17
    3.
n =160 Сообщения: 1, 2, 7 3, 11, 17
    4.
n =2

Ребра: 0-2

Сообщения: 1, 2, 3, 8 1, 8, 11, 12, 13, 18
    5.
n =2

Ребра: 0-4

Сообщения: 1, 2, 3, 8 1, 8, 11, 12, 13, 18
    6.
n =4

Ребра: 2-3  1-5

Сообщения: 1, 2, 3, 8 1, 8, 11, 12, 13, 18
    7.
n =4

Ребра: 1-(-2

Сообщения: 1, 2, 3, 8 1, 7, 11, 12, 13, 18
    8.
n =4

Ребра: 1-2 2-(-3)

Сообщения: 1, 2, 3, 8 1, 7, 11, 12, 13, 18
    9.
n =2

Ребра: 2-0

Сообщения: 1, 2, 3, 8 1, 6, 11, 12, 13, 18
10. n =2

Ребра: 4-0

Сообщения: 1, 2, 3, 8 1, 6, 11, 12, 13, 18
11. n =4

Ребра: 3-2 5-1

Сообщения: 1, 2, 3, 8 1, 6, 11, 12, 13, 18
12. n=4

Рёбра:  (-1)-2

Сообщения: 1, 2, 3, 8 1, 5, 11, 12, 13, 18
13. n=4

Рёбра: 0-1 (-1)-2

Сообщения: 1, 2, 3, 8 1, 5, 11, 12, 13, 18
14. n=4

Рёбра: 1-1

Сообщения: 1, 2, 3, 8 1, 9, 11, 12, 13, 18
15. n=4

Рёбра: 0-1 2-2

Сообщения: 1, 2, 3, 8 1, 9, 11, 12, 13, 18
16. n=4

Рёбра: 0-1 0-1

Сообщения: 1, 2, 3, 9 1, 10, 11, 12, 13, 19
17. n=4

Рёбра: 0-1 1-2 1-2

Сообщения: 1, 2, 3, 9 1, 10, 11, 12, 13, 19
П р а в и л  ь н ы е      т е с т ы
18. n=2

Рёбра: 0-1 <Ctrl+Z>

Сообщения: 1, 2, 3, 4, 5, 6

Количество  компонент связности :  2

1, 4, 11, 12, 13, 14, 15, 16
19. n=4

Рёбра: 0-1 0-3 1-2

 2-3 <Ctrl+Z>

Сообщения: 1, 2, 3, 4, 5, 6

Количество  компонент связности :  2

1, 4, 11, 12, 13, 14, 15, 16
20. n=12

Рёбра: 0-1  0-3 1-6

3-6 3-5 5-8 7-10 10-9 9-2 2-7 12-4<Ctrl+Z>

Сообщения: 1, 2, 3, 4, 5, 6 

Количество  компонент связности :  2

1, 4, 11, 12, 13, 14, 15, 16

           В ребрах вершины обозначаются через тире для наглядности.  

    4.2.2. Тесты белого ящика 

    Разработанные тесты проверены методами белого ящика по критериям охвата основных путей выполнения алгоритмов модулей. В программе имеются составные условия. Поэтому использован метод комбинаторного покрытия условий (см. таблицу 4.3.).

Таблица 4.3. 

    Комбинаторное покрытие условий  тестами белого ящика. 

Модуль Элементарное  условие Номера  тестов
Истина Ложь
main n<2 1, 2 3, 4, 5, 6, 7, 8, 9, 10 и др.
main n> NMAX 3 4, 5, 6, 7, 8, 9, 10 и  др.
main While (n<2||n>NMAX) 1, 2, 3 4, 5, 6, 7, 8, 9, 10 и  др.
vvod i<n 4, 5, 6, 7, 8, 12, 13, 14, 15, 16, 17, 18, 19, 20 9, 10, 11
vvod j<n 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 4, 5, 6
vvod i==j 14, 15 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, 17, 18, 19, 20
vvod i<0 12, 13 4, 5, 6, 7, 8, 9, 10, 11, 14, 15, 16, 17, 18, 19, 20
vvod j<0 7, 8 4, 5, 6, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20
vvod i>=n 9, 10, 11  4, 5, 6, 7, 8, 12, 13, 14, 15, 16, 17, 18, 19, 20
vvod j>=n 4, 5, 6 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20
vvod gr[i][j]==1 16, 17 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 18, 19, 20
vivod i<n 4, 5, 6, 7, 8, 12, 13, 14, 15, 16, 17, 18, 19, 20 9, 10, 11
vivod i<n 4, 5, 6, 7, 8, 12, 13, 14, 15, 16, 17, 18, 19, 20 9, 10, 11
vivod j<n 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 4, 5, 6
vivod i<n 4, 5, 6, 7, 8, 12, 13, 14, 15, 16, 17, 18, 19, 20 9, 10, 11
matrica_ dopolnenii i<n 4, 5, 6, 7, 8, 12, 13, 14, 15, 16, 17, 18, 19, 20 9, 10, 11
matrica_ dopolnenii j<n 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 4, 5, 6
matrica_ dopolnenii gr[i][j]==0 18, 19, 20 18, 19, 20
matrica_ dopolnenii i<n 4, 5, 6, 7, 8, 12, 13, 14, 15, 16, 17, 18, 19, 20 9, 10, 11
matrica_ sviaznosti i<n 4, 5, 6, 7, 8, 12, 13, 14, 15, 16, 17, 18, 19, 20 9, 10, 11
matrica_ sviaznosti j<n 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 4, 5, 6
matrica_ sviaznosti k<n 18, 19, 20 18, 19, 20
matrica_ sviaznosti i<n 4, 5, 6, 7, 8, 12, 13, 14, 15, 16, 17, 18, 19, 20 9, 10, 11
matrica_ sviaznosti mtrsv[i][k]==1 18, 19, 20 18, 19, 20
matrica_ sviaznosti j<n 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 4, 5, 6
comp_sv i<n 4, 5, 6, 7, 8, 12, 13, 14, 15, 16, 17, 18, 19, 20 9, 10, 11
comp_sv i<n 4, 5, 6, 7, 8, 12, 13, 14, 15, 16, 17, 18, 19, 20 9, 10, 11
comp_sv vp[i]==0 18, 19, 20 18, 19, 20
comp_sv j<n 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 4, 5, 6
comp_sv mtrsv[i][j]==1 18, 19, 20 18, 19, 20
 

4.3. Отладочные средства 

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

4.4. Отладка программы 

    Программа отлажена по плану на всех предусмотренных  в нем тестах. Результаты тестирования приведены в приложении 7.

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

  1. В алгоритме Уоршела написано mtrsv[i][j]=mtrsv[i][j]||mtrsv[i][j] вместо mtrsv[i][j]=mtrsv[i][j]||mtrsv[k][j];
  2. Добавлена проверка на дублирование ребер.
  3. В модуле comp_sv возникала ошибка неправильного подсчета компонент связности  за счет неверного входного параметра. Не подавалась полученная из модуля matrica_sviaznosti матрица связности, так как данный параметр был объявлен в самой подпрограмме    matrica_sviaznosti и поступал в модуль comp_sv с неверными значениями.
  4. Неверный тип модуля  comp_sv.
 
 

Заключение 

    Курсовая  работа выполнена в соответствии с требованиями и в полном объеме.

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

  1. Хохлов Д.Г.  Структуры данных и комбинаторные алгоритмы: Учебное пособие. – Казань: КГТУ, кафедра АСОИУ, 2000. – 102 с.
  2. Хохлов Д.Г., Захарова З.Х. Практикум по структурам данных и комбинаторным алгоритмам: Учебное пособие. – Казань: КГТУ, кафедра АСОИУ, 2000. – 46 с.
  3. Хохлов Д.Г.  Основы технологии модульного программирования: Учебное пособие – Казань: КГТУ, кафедра АСОИУ, 2003. – 64 с.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

   Приложение 1. Системные файлы проекта 

    
  1. Файл TROFIMOVA.prj - перечень модулей и библиотек проекта (указывается как имя проекта системе Turbo-C).

    vvod.c

    vivod.c

    matrica_dopolnenii.c

    matrica_sviaznost.c

    comp_sv.c

    main.c

  1. Файл graph.h-определения для библиотеки graf.lib

    #ifndef _GRAFH

    #define _GRAFH

    #ifndef NMAX

    #define NMAX 150  /* максимальное количество вершин графа*/

    #endif  

    /*    Прототиты библиотечных функций    */

    vvod (int n,int gr[][NMAX]);

    vivod(int n,int gr[][NMAX]);

    void matrica_dopolnenii(int n,int gr[NMAX][NMAX]);

     void matrica_sviaznosti(int n, int gr[NMAX][NMAX],int mtrsv[NMAX][NMAX]);

      int  comp_sv(int n, int mtrsv[NMAX][NMAX]);

       #endif

  1. Файл graf.lib – библиотека функций над графами.

Библиотека создана после компиляции подпрограмм командой вызова библиотекаря.

         
 
 
 
 
 
 
 
 
 
 
 
 
 
 

   Приложение 2. Текст программы модуля main 

   /***********************************************************/

   /*          Курсовая работа                                                    */

   /*                 по программированию на языке высокого уровня          */

   /* Количество компонент связности в дополнении заданного графа*/

   /*                                    Группа 28203  С.Н. Трофимова                         */

   /***********************************************************/

#include <stdio.h>

#include "graf.h"

#define NMAX 150

    void main()

    {  int n;                                               /* количество вершин в графе    */

        int i, j;                                              /* номера вершин в ребре         */

Информация о работе Количество компонент связности в дополнении заданного графа