Автор: Пользователь скрыл имя, 20 Марта 2012 в 08:37, курсовая работа
Компьютерный учет имеет свои особенности и радикально отличается от обычного. Компьютер не только облегчает учет, сокращая время, требующееся на оформление и обобщение накопленных данных.
Целью данного курсового проекта является разработка шаблона класса для работы с двоичными деревьями.
Для разработки программы была выбрана среда Turbo C++ фирмы Borland.
Введение
1. Выбор технологии, языка и среды программирования
2. Анализ и уточнение требований к программному продукту
2.1. Анализ процесса обработки информации и выбор структур данных для ее хранения
2.2. Выбор методов и разработка основных алгоритмов решения задачи
3. Проектирование интерфейса пользователя
3.1. Разработка форм ввода-вывода информации
1. Построение классов предметной области
1.1. Уточнение структуры классов предметной области и разработка алгоритмов методов
4. Выбор стратегии тестирования и разработка тестов
Заключение
Список использованных источников
ТИТУЛЬНИК
2
Оглавление
Введение
1. Выбор технологии, языка и среды программирования
2. Анализ и уточнение требований к программному продукту
2.1. Анализ процесса обработки информации и выбор структур данных для ее хранения
2.2. Выбор методов и разработка основных алгоритмов решения задачи
3. Проектирование интерфейса пользователя
3.1. Разработка форм ввода-вывода информации
1. Построение классов предметной области
1.1. Уточнение структуры классов предметной области и разработка алгоритмов методов
4. Выбор стратегии тестирования и разработка тестов
Заключение
Список использованных источников
Приложение А. Техническое задание
Приложение Б. Руководство пользователя
Приложение В. Код программы
2
В последнее время значительно возрос объём и оборот информации во всех сферах жизнедеятельности человека. И процесс накопления, обработки и использования знаний постоянно ускоряется. В связи с этим возникает необходимость использования средств, позволяющих эффективно хранить, обрабатывать и распределять накопленные данные.
Компьютерный учет имеет свои особенности и радикально отличается от обычного. Компьютер не только облегчает учет, сокращая время, требующееся на оформление и обобщение накопленных данных.
Целью данного курсового проекта является разработка шаблона класса для работы с двоичными деревьями.
Для разработки программы была выбрана среда Turbo C++ фирмы Borland.
2
Вначале разработки нового проекта перед каждым программистом стоит непростая задача — выбор системы программирования. От ее успешного решения зависит то, насколько просто и быстро можно будет реализовать поставленную задачу и насколько эффективным получится конечный результат. Более того, неудачный выбор системы программирования может поставить под сомнение возможность завершения проекта из-за несоответствия возможностей системы программирования и требований к решаемой задаче.
На сегодняшний день на рынке существует много различных систем программирования от разных производителей, которые конкурируют между собой. Наиболее крупные из производителей — это Microsoft и Borland. При выборе системы программирования в данной работе был выбран продукт Turbo C++ фирмы Borland.
2
Для работы с одномерными массивами был разработан шаблонный класс BinTree и вспомогательный класс TreeNode, представляющий собой узлы дерева:
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. Добавлять элементы;
2. Удалять элементы и минимальные элементы;
3. Находить элементы и минимальные улементы;
4. Выводить элементы на экран;
2
При запуске программы на экране появляется меню для работы с двоичным деревом (рисунок 1.).
Рисунок 1. Меню программы
2
Структура класса 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 служит для удаления заданного элемента и минимального элемента из дерева.
2
Для тестирования написанного класса была написана программа, в которой в качестве элементов дереваются целые числа типа int.
Были последовательно введены 3 числа 12, 13, 5.
После выбора четвертого пункта меню, на экран были выведены числа в порядке возрастания (рис. 2).
Рисунок 2. Результаты тестирования
В результате тестирования ошибок выявлено не было.
2
Таким образом, в данной работе разработан шаблон класса для работы с двоичными деревьями.
В качестве элементов дерева могут выступать любые типы данных.
В ходе выполнения работы были изучены принципы объектно-ориентированного программирования, создания шаблонов класса, динамические структуры.
2
1. Буч, Г. Объектно-ориентированный анализ и проектирование с примерами приложений на С++: пер. с англ./ Г. Буч. – М.: БИНОМ, СПб.: Невский диалект, 1999. – 560 с.
2. Давыдов, В. Г. Технологии программирования С++ : учеб. пособие / В. Г. Давыдов. – СПб.: БХВ-Петербург, 2005. – 672 с.
3. Дейтел, Х. М. Как программировать на С++ : пер. с англ. / Х. М. Дейтел, П. Дж. Дейтел. – М.: Бином-Пресс, 2005. – 1248 с.
4. Кубенский, А. А. Структуры и алгоритмы обработки данных: объектно-ориентированный подход и реализация на С++ : учеб. пособие / А. А. Кубенский. – СПб.: БХВ-Петербург, 2004. – 464 с.
5. Павловская, Т. А. С/C++. Программирование на языке высокого уровня : учебник / Т. А. Павловская. – СПб.: Питер, 2009. – 461 с.
6. Павловская, Т. А. С++. Объектно-ориентированное программирование : практикум / Т. А. Павловская, Ю. А. Щупак. – СПб.: Питер, 2004. – 265 с.
7. Страуструп, Б. Язык программирования С++ : пер. с англ. / Б. Страуструп. – СПб.; М.: Невский диалект, БИНОМ, 1999. – 991 с.
8. Шилдт, Г. Искусство программирования на С++ / Г. Шилдт. – СПб.: БХВ-Петербург, 2005. – 496 с.
Информация о работе Работа со структурами данных: программирование бинарных деревьев на языке C /C++