Автор: Пользователь скрыл имя, 17 Октября 2012 в 05:26, курсовая работа
Целью данного курсового проекта является разработка шаблона класса для работы с двоичными деревьями.
Для разработки программы была выбрана среда Turbo C++ фирмы Borland.
Введение 3
1.Выбор технологии, языка и среды программирования 4
2.Анализ и уточнение требований к программному продукту 5
Анализ процесса обработки информации и выбор структур данных для ее хранения 5
Выбор методов и разработка основных алгоритмов решения задачи 11
3.Проектирование интерфейса пользователя 12
Разработка форм ввода-вывода информации 12
1.Построение классов предметной области 13
Уточнение структуры классов предметной области и разработка алгоритмов методов 13
4.Выбор стратегии тестирования и разработка тестов 15
Заключение 16
Список использованных источников 17
Приложение А. Техническое задание 18
Приложение Б. Руководство пользователя 19
Приложение В. Код программы 20
ТИТУЛЬНИК
Оглавление
В последнее время значительно возрос объём и оборот информации во всех сферах жизнедеятельности человека. И процесс накопления, обработки и использования знаний постоянно ускоряется. В связи с этим возникает необходимость использования средств, позволяющих эффективно хранить, обрабатывать и распределять накопленные данные.
Компьютерный учет имеет свои особенности и радикально отличается от обычного. Компьютер не только облегчает учет, сокращая время, требующееся на оформление и обобщение накопленных данных.
Целью данного курсового проекта является разработка шаблона класса для работы с двоичными деревьями.
Для разработки программы была выбрана среда Turbo C++ фирмы Borland.
Вначале разработки нового проекта перед каждым программистом стоит непростая задача — выбор системы программирования. От ее успешного решения зависит то, насколько просто и быстро можно будет реализовать поставленную задачу и насколько эффективным получится конечный результат. Более того, неудачный выбор системы программирования может поставить под сомнение возможность завершения проекта из-за несоответствия возможностей системы программирования и требований к решаемой задаче.
На сегодняшний день на рынке существует много различных систем программирования от разных производителей, которые конкурируют между собой. Наиболее крупные из производителей — это Microsoft и Borland. При выборе системы программирования в данной работе был выбран продукт Turbo C++ фирмы Borland.
Для работы с
одномерными массивами был
template <class T> class TreeNode
{
public:
TreeNode *_lchild;
TreeNode *_rchild;
T val;
TreeNode(T);
virtual ~TreeNode(void);
};
template<class T> TreeNode<T>::TreeNode(int v) :
val(v), _lchild(NULL), _rchild (NULL)
{
}
template<class T> TreeNode<T>::~TreeNode(void)
{
if (_lchild) delete _lchild;
if (_rchild) delete _rchild;
}
template<class T> class BinTree
{
private:
TreeNode<T> *root;
TreeNode<T> *_findMin(TreeNode<T> *);
void _remove(T, TreeNode<T> * &);
void _inorder(TreeNode<T> *, int);
public:
BinTree (void);
~BinTree (void);
int isEmpty (void);
T find(T);
T findMin(void);
void inorder (int);
void insert(T);
void remove(T);
T removeMin (void);
};
template<class T> BinTree<T>::BinTree() :
root (NULL)
{
}
template<class T> int BinTree<T>::isEmpty (void)
{
return (root == NULL);
}
template<class T> BinTree<T>::~BinTree (void)
{
if (root) delete root;
}
template<class T> T BinTree<T>::find (T val)
{
TreeNode<T> *n = root;
while (n)
{
int result = val - n->val;
if (result < 0)
n = n->_lchild;
else if (result > 0)
n = n->_rchild;
else
return n->val;
}
return NULL;
}
template<class T> T BinTree<T>::findMin (void)
{
TreeNode<T> *n = _findMin (root);
return (n ? n->val : NULL);
}
template<class T>
TreeNode<T> *BinTree<T>::_findMin (TreeNode<T> *n)
{
if (n == NULL)
return NULL;
while (n->_lchild)
n = n->_lchild;
return n;
}
template<class T> void BinTree<T>::inorder (int l)
{
_inorder(root, l);
}
template<class T>
void BinTree<T>::_inorder (TreeNode<T> *n, int l)
{
if (n == NULL) return;
_inorder(n->_lchild, l);
cout << n->val << endl;
_inorder(n->_rchild, l + 1);
}
template<class T> void BinTree<T>::insert(T val)
{
if (root == NULL) {
root = new TreeNode<T>(val);
return;
} else {
int result;
TreeNode<T> *p, *n = root;
while (n) {
p = n;
result = val - n->val;
if (result < 0)
n = p->_lchild;
else if (result > 0)
n = p->_rchild;
else
return;
}
if (result < 0)
p->_lchild = new TreeNode<T>(val);
else
p->_rchild = new TreeNode<T>(val);
}
}
template<class T> void BinTree<T>::remove(T val)
{
_remove(val, root);
}
template<class T>
void BinTree<T>::_remove(T val, TreeNode<T> * &n)
{
if (n == NULL) return;
int result = val - n->val;
if (result < 0)
_remove(val, n->_lchild);
else if (result > 0)
_remove (val, n->_rchild);
else
{
if (n->_lchild == NULL)
{
TreeNode<T> *old = n;
n = old->_rchild;
delete old;
}
else
if (n->_rchild == NULL)
{
TreeNode<T> *old = n;
n = old->_lchild;
delete old;
}
else
{
TreeNode<T> *m = _findMin(n->_rchild);
n->val = m->val;
_remove(m->val, n->_rchild);
}
}
}
template<class T> T BinTree<T>::removeMin (void)
{
T v = findMin();
remove (v);
return v;
}
Для реализации
одномерного массива был
При запуске программы на экране появляется меню для работы с двоичным деревом (рисунок 1.).
Рисунок 1. Меню программы
Структура класса TreeNode представлена ниже.
template <class T> class TreeNode
{
public:
TreeNode *_lchild;
TreeNode *_rchild;
T val;
TreeNode(T);
virtual ~TreeNode(void);
};
Данный класс содержит указатели на правое и левое поддерево (_lchild и _rchild), элемент val, содержащий данные, конструктор и деструктор для создания и удаления узла.
Структура класса BinTtree представлена ниже.
template<class T> class BinTree
{
private:
TreeNode<T> *root;
TreeNode<T> *_findMin(TreeNode<T> *);
void _remove(T, TreeNode<T> * &);
void _inorder(TreeNode<T> *, int);
public:
BinTree (void);
~BinTree (void);
int isEmpty (void);
T find(T);
T findMin(void);
void inorder (int);
void insert(T);
void remove(T);
T removeMin (void);
};
Данный класс содержит указатель на корень дерева (root).
Метод isEmpty используется для того, чтобы узнать, пусто ли дерево.
Конструктор BinTree и деструктор ~BinTree служат для создания и удаления дерева.
Методы find и findMin служат для поиска заданного элемента и минимального элемента в дереве.
Метод inorder служит для вывода элементов дерева.
Метод insert служит для вставки элемента.
Методы remove и removeMin служит для удаления заданного элемента и минимального элемента из дерева.
Для тестирования написанного класса была написана программа, в которой в качестве элементов дереваются целые числа типа int.
Были последовательно введены 3 числа 12, 13, 5.
После выбора четвертого пункта меню, на экран были выведены числа в порядке возрастания (рис. 2).
Рисунок 2. Результаты тестирования
В результате тестирования ошибок выявлено не было.
Таким образом, в данной работе разработан шаблон класса для работы с двоичными деревьями.
В качестве элементов дерева могут выступать любые типы данных.
В ходе выполнения работы были изучены принципы объектно-ориентированного программирования, создания шаблонов класса, динамические структуры.
Создать шаблон класса для работы с двоичными деревьями. Предусмотреть возможность добавления элемента в дерево, удаление элемента, вывод элементов в дереве, поиск элемента, поиск и удаление минимального элемента.
Написать программу, использующую созданный шаблон для создания дерева.
Для работы с предметным указателем необходимо запустить на выполнении программу demoarr.exe.
Для работы с созданным классом, необходимо объявить переменную необходимого типа:
DynArray<int, 1, 3> A;
DynArray<int, 1, 3> B;
DynArray<int, 1, 3> C;
DynArray<double, 1, 3> F;
Для вывода массива можно использовать стандартные потоки:
Информация о работе Разработка шаблона класса для работы с двоичными деревьями