Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
!!курсач (MoRDa).doc
Скачиваний:
4
Добавлен:
18.09.2019
Размер:
1.33 Mб
Скачать

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

Разработать программу, реализующую алгоритм бинарного дерева (20 элементов). Элементом дерева служит структура факультет. При заполнении дерева элементы должны располагаться в отсортированном порядке согласно ключу. Предусмотреть заполнение дерева из файла (подготовить файл на 20 элементов).

Предусмотреть многоуровневое меню:

1) Заполнение дерева с начала

a) с консоли (циклически)

b) из файла (выбор файла, тек. папка, любая папка)

2) Вставка элемента (с консоли) в дерево вслед за указанным элементом

3) Удаление элемента по ключу

4) Очистка дерева (с выводом удаляемых элементов)

a) безвозвратно

b) с сохранением в файл

5) Вывод дерева

a) на экран

b) в файл

6) Вывод количества элементов

7) Выход

Реализовать алгоритм обработки исключений.

Продемонстрировать работу всех пунктов меню. Продемонстрировать обработку ошибочных ситуаций (ввод данных другого типа, ввод пустых данных, пустое дерево).

Структура “Факультет” имеет следующие поля: “Код факультета” (ключ), “Название факультета”, “Фамилия декана”, ”Количество кафедр” и “ Количество преподавателей”.

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

Для выполнения задачи понадобится структура для бинарного дерева, основная функция-меню, которая будет вызывать соответствующие функции в зависимости от выбора пользователя, и собственно сами функции для добавления, удаления, поиска и вывода.

Описание программы

На рисунке 1 представлен алгоритм работы функции-меню.

Рисунок 1 – Алгоритм работы функции menu().

Функция menu() представляет собой бесконечный цикл, в котором пользователь производит вызов нужной ему функции. При вводе пользователем символа ‘A’ – будет вызвана функция а(), предназначенная для заполнения дерева; ‘F’ – функция f(), предназначенная для поиска; ‘L’ – функция l(), предназначенная для вывода; ‘D’ – функция d(), предназначенная для удаления; ‘K’ – функция k(), предназначенная для отображения количества введённых элементов; при нажатии ‘Q’ происходит выход из программы; при чего-либо иного на экран выведется сообщение об ошибке и цикл повторится.

При вводе пользователем в любом из пунктов меню некорректной строки учитывается только первый введённый символ (Например, если пользователь вместо символа ввёл слово начинающееся с символа ‘a’ будет вызвана функция a().).

Функции используемые в программе:

void main();

void menu();

void a();

void f();

void l();

void d();

void k();

tree*add(tree*,tree*, int);

tree*find(tree*,int);

tree*del(tree*,int, bool);

void view(tree*,bool);

int mist(bool);

void inorder(tree*);

void preorder(tree*);

void postorder(tree*);

void print(tree*,int);

void finorder(tree*);

– функция "main" : вызывает функцию "menu"

– функция "menu" может вызывать функции a(), f(), l(), d() и k()

– функция "a" - предназначена для заполнения дерева, может использовать функции "add", "find" и "mist"

– функция "f" - предназначена для поиска узла дерева, может использовать функции "find", "view" и "mist"

– функция "l" - предназначена для вывода дерева, может использовать функции "print", "inorder", "preorder", "postorder" и "finorder"

– функция "d" - предназначена для удаления, может

использовать функции "find", "del", "finorder" и "mist"

– функция "k" - вывод колличества элементов дерева

– функция "add" - добавление элемента

– функция "find" - поиск элемента по ключу

– функция "del" - удаление узла дерева, может использовать функцию "view"

– функция "view" - вывод на экран содержимого узла дерева

– функция "mist" - проверка ввода на корректность

– функция "inorder" - предназначена для вывода

дерева в симметричном порядке (на экран),

использует функцию "view"

– функция "preorder" - предназначена для вывода дерева в прямом порядке (на экран), использует функцию "view"

– функция "postorder" - предназначена для вывода дерева в обратном порядке (на экран), использует функцию "view"

– функция "print" - предназначена для вывода дерева боком(на экран)

– функция "finorder" - предназначена для записи в файл всего дерева либо его узла