У вас вопросы?
У нас ответы:) SamZan.net

Контрольная работа Вариант по Студент

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

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

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 28.12.2024

Поволжский государственный университет телекоммуникаций и

Информатики

Заочный факультет

РЕГИСТРАЦИОННЫЙ № ______

Контрольная работа № _______               Вариант _______

по _____________________________________________________

Студент _________________________________________________

________________________________________________________

Факультет _________ курс ________ шифр __________ гр.______

Работа выслана «_____»_________________ 201__г.

Оценка _______________  Дата _______________201___г.

Подпись преподавателя ___________________

Самара 2013


Задание

Рассматривается   граф программы – дерево. Граф программы не задается, а строится в процессе выполнения этой работы по исходным данным, приведенным в индивидуальном задании.

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

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

Правила построения графа ПО приводятся по вариантам ниже.

Варианты 10А-21А

Число ребер выходящих из каждого узла случайно и определяется с помощью датчика случайных чисел. Максимальное число ребер, выходящих из узла равно m-1(кроме висячих, для которых это число всегда равно 0).

Таким образом, число ребер, выходящих из узла распределено по равномерному закону в диапазоне 0 – (m-1). Правило остановки построения графа – по достижению числа узлов графа значения N, приведенного в задании.

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

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

   Данная таблица, таблица вершин и таблица висячих вершин для одного из полученных случайных графов, а так же гистограмма полученных при построении графа значении числа исходящих из узлов ребер (m-1) предоставляются в отчете по выполнению работы.

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

Таблица 1. Исходные данные для выполнения контрольной работы

Вариант

15А

m

4

Число

узлов

в графе N

100

Число

графов R

100


Листинг программы

//

//  main.cpp

//  RegularGraph

//

#include <iostream>

#include <vector>

#include <ctime>

#include <cstdlib>

#include <vector>

#include <cmath>

#include <fstream>

#include <clocale>

#include <iomanip>

#include <conio.h>

// параметры для варианта 15A

const int m = 4;

const int N = 100;

const int R = 100;

// правило останова - достижение заданного числа вершин в графе

static std::ofstream ver_f;

static std::ofstream vis_ver_f;

// функция для вычисления структурного параметра

double alpha(int B, int P)

{

   return static_cast<double>(P) / B;

}

//////////////// Классы для получения числа потомков для вершины //////////////////

// рандомное получение числа потоков

class RandChild

{

public:

   int operator()(void) const

   {

       return std::rand() % m;

   }

   void printHist() const

   { }

};

// рандомное получение числа потоков накоплением гистограммы

class WriteRandChild

{

public:

   // конструктор по умолчанию для класса

   WriteRandChild() :

   hist(m, 0)

   {

   }

   // печать гистграммы

   void printHist() const

   {

       // вывод значений гистограммы

 std::cout << "\tZnacheniya dlya gistigrammy 1-ogo grafa: " << std::endl;

       for (int i = 0; i < m; ++i)

           std::cout << i << "-" << hist[i] << std::endl;

 std::cout << "\tMatematicheskoe ojidanie dlya gistogrammy: " << std::endl;

 double mo = 0.0;

       int s = 0;

       for (int i = 0; i < m; ++i)

       {

           mo += i * hist[i];

           s += hist[i];

       }

       mo /= s;

       std::cout << mo << std::endl;

   }

   int operator()(void) const

   {

       int value = std::rand() % m;

       ++hist[value];

       return value;

   }

private:

   // гистограмма

   mutable std::vector<int> hist;

};

// детерминированное получение числа потоков (то есть получаем регулярное дерево)

class RegularChild

{

public:

   int operator()(void) const

   {

       return m - 1;

   }

   void printHist() const

   { }

};

///////////////////////// Функция построения дерева ////////////////////////////////

// элемент выходного массива

struct name

{

   // номер узла

   int index;

   // номер родительского узла

   int parent;

   // конструктор для класса по умолчанию

   name() :

   index(), parent()

   {

   }

};

// в массиве a от родителя с индексом [i-1][uj] порождает mx потомков присваивая

// каждому порядковый номер count и занося их в массив a на строку i

bool input(name (&a)[300][300], int i, int& j, int& uj, int& count, int mx)

{

   for (int x = 0; x < mx; ++x, ++j)

   {

       if (count - 1 == N)

           return true;

       a[i][j].index = count++;

       a[i][j].parent = a[i-1][uj].index;

   }

   ++uj;

   return false;

}

template <typename GetChild>

bool CreateTree(int &P, int &B, bool print = false)

{

   GetChild childGetter;

   // массив вершин

   name ver[300][300];

   // массив висячих вершин

   std::vector<name> vis_ver;

   // высота текущего дерева

   P = 2u;

   // корень дерева имеет порядковый номер 1 и номер родителя 1

   ver[0][0].index = ver[0][0].parent = 1u;

   // дерево не выродилось

   bool tree_end = false;

   int i;

   for (i = 1u; i < 300; i++)

   {

       int uj = 0; // столбец верхней строки

       int j = 0; // столбец текущей строки

       // цикл до тех пор, пока все вершины текущего уровня не будут пройдены

       do

       {

           int mx = childGetter();

           if (mx == 0)

           {

               // если у корня 0 потомков, такое дерево не считаем

               if (i == 1u)

                   continue;

               // поскольку у вершины нет потомков, то по определению она считается

               // висячей

               vis_ver.push_back(ver[i - 1][uj]);

               // переходим на следующую вершину верхнего уровня

               ++uj;

               // если дерево выродилось

               if (ver[i][0].index == 0 && ver[i-1][uj].index == 0)

                   tree_end = true;

           }

           else

           {

               // заполнение вершин текущего уровня

               tree_end = input(ver, i, j, uj, P, mx);

               // если достигнуто правило останова, то все

               if (tree_end)

               {

                   // все вершины остальные вершины предыдущего уровня остаются висячими

                   while (ver[i - 1][uj].parent != 0)

                   {

                       vis_ver.push_back(ver[i - 1][uj]);

                       ++uj;

                   }

                   break;

               }

           }

       } while (ver[i - 1][uj].parent != 0);

       // если вершин = N или дерево выродилось - прекращаем работу с текущим деревом

       if (tree_end)

       {

           if (P - 1 < N)

           {

               // сгенерировалось маленькое дерево

               // значит генерируем другое

               return false;

           }

           // все вершины последнего уровня считаются висячеми

           for (int x = 0; x < 300; ++x)

               if (ver[i][x].index != 0)

                   vis_ver.push_back(ver[i][x]);

           break;

       }

   }

   if (print)

   {

       // выводим в файл массив вершин

       bool printed = true;

       for (int x = 0, end = i + 1; x < end && printed; x++)

       {

           printed = false;

           for (int y = 0; y < 300; y++)

               if (ver[x][y].parent != 0)

               {

                   ver_f << ver[x][y].index << "-" << ver[x][y].parent << " ";

                   printed = true;

               }

           ver_f << std::endl;

 }

 // выводим в файл массив висячих вершин

 for (int x = 0, end = static_cast<int>(vis_ver.size()); x < end; x++)

  vis_ver_f << vis_ver[x].index << "-" << vis_ver[x].parent << " ";

}

--P;

B = static_cast<int>(vis_ver.size());

// вывод гистограммы

 childGetter.printHist();

return true;

}

// главная функция программы

int main(int argc, const char * argv[])

{

   // установка русского языка

   setlocale(LC_ALL, "Russian");

   // процесс рандомизации теперь зависит от времени

   srand(static_cast<int>(std::time(NULL)));

   // построение R случайных деревьев

   {

       // таблица значений alpha

       double alphaTable[R];

       // таблица значений P

       int PTable[R];

       // таблица значений B

       int BTable[R];

       // открытие выходных файлов

       ver_f.open("массив_вершин.txt", std::ios::trunc);

       vis_ver_f.open("массив_висячих_вершин.txt", std::ios::trunc);

       // построение графа, для которого будет выведена таблица вершин

       // таблица висячих вершин, а также гистограмма значения числа вершин

       while (!CreateTree<WriteRandChild>(PTable[0], BTable[0], true))

           ;

       // закрытие файлов

       ver_f.close();

       vis_ver_f.close();

       for (int i = 1u; i < R; ++i)

       {

           // построение дерева с номером i

           while (!CreateTree<RandChild>(PTable[i], BTable[i]))

               ;

       }

       // вычисление структурного параметра

       for (int i = 0; i < R; ++i)

           alphaTable[i] = alpha(BTable[i], PTable[i]);

       // вывод таблицы значений

       std::cout << std::setw(4) << "N";

       std::cout << std::setw(4) << "P";

       std::cout << std::setw(4) << "B";

       std::cout << std::setw(10) << "alpha" << std::endl;

       for (int i = 0; i < R; ++i)

       {

           std::cout << std::setw(4) << i << ".";

           std::cout << std::setw(4) << PTable[i];

           std::cout << std::setw(4) << BTable[i];

           std::cout << std::setw(10) << std::setprecision(3) << alphaTable[i] << std::endl;

       }

       // определение математического ожидания параметра альфа

       double M = 0.0;

       for (int i = 0; i < R; ++i)

           M += alphaTable[i];

 M /= R;

 std::cout << "Matematicheskoe ojidanie alpha: " << M << std::endl;

       // определени дисперсии

       double D = 0.0;

       for (int i = 0; i < R; ++i)

  D += std::pow(M - alphaTable[i], 2.0);

 D /= R;

 std::cout << "Dispersiya alpha: " << D << std::endl;

 std::cout << std::endl << std::endl;

 std::cout << "Dannye dlya sluchaino postroennogo grafa (kotoryi vyveden v fail): " << std::endl;

       std::cout << "P = " << PTable[0] << std::endl;

 std::cout << "B = " << BTable[0] << std::endl;

 std::cout << "alpha = " << alphaTable[0] << std::endl;

 }

   // построение детерминированного графа

   {

       int P = 0, B = 0;

       // открытие выходных файлов

       ver_f.open("детер_массив_вершин.txt", std::ios::trunc);

       vis_ver_f.open("детер_массив_висячих_вершин.txt", std::ios::trunc);

       // генерация графа

       CreateTree<RegularChild>(P, B, true);

       // закрытие файлов

       vis_ver_f.close();

       ver_f.close();

       std::cout << std::endl << std::endl;

 std::cout << "Dannye dlya determinirovannogo grafa (kotoryi vyveden v fail): " << std::endl;

       std::cout << "P = " << P << std::endl;

       std::cout << "B = " << B << std::endl;

 std::cout << "alpha = " << alpha(B, P) << std::endl;

}

_getch();

   return EXIT_SUCCESS;

}


Результаты выполнения программы

Рис. 1 – «Результат построения случайных графов»

Рис. 2 – «Результат вычисления, структурного параметра, математического ожидания и дисперсии структурного параметра»

Результат построение графа, для которого выведена таблица вершин в файл «массив_вершин.txt»:

1-1

2-1 3-1 4-1

5-2 6-3 7-4

8-7

9-8

10-9 11-9 12-9

13-11 14-12 15-12

16-13 17-13 18-15 19-15 20-15

21-17 22-17 23-18 24-18 25-19 26-19 27-19 28-20 29-20 30-20

31-21 32-21 33-22 34-24 35-25 36-25 37-25 38-26 39-26 40-26 41-27 42-28 43-28 44-30 45-30 46-30

47-32 48-32 49-33 50-33 51-33 52-34 53-34 54-36 55-36 56-36 57-39 58-41 59-41 60-42 61-43 62-43 63-45 64-45 65-45 66-46 67-46

68-47 69-47 70-48 71-48 72-48 73-49 74-50 75-50 76-51 77-51 78-51 79-52 80-53 81-53 82-55 83-55 84-57 85-57 86-57 87-58 88-58 89-59 90-59 91-60 92-60 93-60 94-62 95-62 96-63 97-63 98-63 99-65 100-65

Результат построение графа, для которого выведена таблица висячих вершин в файл «массив_висячих_вершин.txt»:

5-2 6-3 10-9 14-12 16-13 23-18 29-20 31-21 35-25 37-25 38-26 40-26 44-30 54-36 56-36 61-43 64-45 66-46 67-46 68-47 69-47 70-48 71-48 72-48 73-49 74-50 75-50 76-51 77-51 78-51 79-52 80-53 81-53 82-55 83-55 84-57 85-57 86-57 87-58 88-58 89-59 90-59 91-60 92-60 93-60 94-62 95-62 96-63 97-63 98-63 99-65 100-65

Результат построение детерминированного графа, для которого выведена таблица вершин в файл «детер_массив_вершин.txt»:

1-1

2-1 3-1 4-1

5-2 6-2 7-2 8-3 9-3 10-3 11-4 12-4 13-4

14-5 15-5 16-5 17-6 18-6 19-6 20-7 21-7 22-7 23-8 24-8 25-8 26-9 27-9 28-9 29-10 30-10 31-10 32-11 33-11 34-11 35-12 36-12 37-12 38-13 39-13 40-13

41-14 42-14 43-14 44-15 45-15 46-15 47-16 48-16 49-16 50-17 51-17 52-17 53-18 54-18 55-18 56-19 57-19 58-19 59-20 60-20 61-20 62-21 63-21 64-21 65-22 66-22 67-22 68-23 69-23 70-23 71-24 72-24 73-24 74-25 75-25 76-25 77-26 78-26 79-26 80-27 81-27 82-27 83-28 84-28 85-28 86-29 87-29 88-29 89-30 90-30 91-30 92-31 93-31 94-31 95-32 96-32 97-32 98-33 99-33 100-33

Результат построение детерминированного графа, для которого выведена таблица висячих вершин в файл «детер_массив_висячих_вершин.txt»:

34-11 35-12 36-12 37-12 38-13 39-13 40-13 41-14 42-14 43-14 44-15 45-15 46-15 47-16 48-16 49-16 50-17 51-17 52-17 53-18 54-18 55-18 56-19 57-19 58-19 59-20 60-20 61-20 62-21 63-21 64-21 65-22 66-22 67-22 68-23 69-23 70-23 71-24 72-24 73-24 74-25 75-25 76-25 77-26 78-26 79-26 80-27 81-27 82-27 83-28 84-28 85-28 86-29 87-29 88-29 89-30 90-30 91-30 92-31 93-31 94-31 95-32 96-32 97-32 98-33 99-33 100-33




1. плана работы поточной линии и расчет величины межоперационных заделов
2. Теория и практика производства накопителей на гибких магнитных дисках
3. спектор является одним из ведущих предприятий не только в Кемерово но и за ребежом
4. тема норм і вимог до поведінки і морального обличчя лікаря і всього медичного персоналу а також моральні поч
5. Пояснительная записка Планирование составлено в соответствии с программой общеобразовательных учреждени
6. политическим руководством и в последние годы жизни Сталина
7. www.spishy.ru2 www.slovo.wsreshindex
8. Социально-экологическое взаимодействие
9. 60 стали Преимущественное распространение имеют каркасы из сборного железобетона
10. а 1620002024 40703810401080000019
11. Молодежная политика в России
12. Тема 1 Международные стандарты и универсальный механизм защиты прав человека и гражданина
13. Реферат- Лексикализация внутренней формы слова
14. 1.Содержание финансовой политики
15. экономических результатов а следовательно их реструктуризация способствующая улучшению управления на пр
16. Организационная структура образец организационной структуры в прил
17. Испытание феромонных ловушек сосновых лубоедов
18. Рекреационные ресурсы Кипра
19. Краткая характеристика звуковой системы индоевропейского языка
20. РЕФЕРАТ дисертації на здобуття наукового ступеня кандидата біологічних наук КИЇВ 1999 Ди