Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Звіт С1 - .docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
231.4 Кб
Скачать

4. Програмні реалізації алгоритму

4.1 Загальні характеристики програми

Ім’я програми: Rozraha_RBT

Виконавчий файл: Rozraha_RBT.exe

Програма створює і зчитує файли з розширенням: *.tr

Назви текстових файлів з кодом програми (*.cpp, *.h): Balanse_Fun_Add.cpp, Balanse_Fun_Delete.cpp, ERROES_messages.h, fun_prototupes.h, General_Fun.cpp, Item1_WorTree.cpp, Item2_Disk.cpp, Item3_msTrees.cpp, Item4_Else.cpp, main_many.cpp

Мова програмування: С

Розмір виконавчого файлу: 56 Кб

Розмір текстових файлів з кодом: 38 Кб

Загальна кількість рядків коду програми: 1436

4.2 Призначення програми

Програма призначена для створення і роботи з базами даних. Її особливістю являється те, що організація памяті баз даних у ній здійснюється за допомогою червоно –чорних дерев бінарного пошуку, це забезпечує швидке знаходження даних. Обмеженням являється те, що дана програма не надає можливості приєднувати дані до вузлів, вона оперує тільки з ключами, оскільки створена у формі шаблону бази даних.

4.3 Вхідна інформація

Вхідними даними являються числові дані, які сприймаються як ключі. Користувач отримує можливість введення команд (пунктів меню) і ключів з клавіатури, а також здійснити зчитування ключів з файлу який містить дані про дерево (ключі), з розширенням *.tr. Контроль введення здійснюється за допомогою функції scanf(), яка не дає можливості зчитувати символи, також ведеться контроль діапазонів введення числових даних і очищення потоку введення з метою запобігання зациклень конструкцій, які складаються з двох попередніх пунктів. Інтерфейс програми з користувачем являється консольним, з особливостями середовища.

4.4 Результуюча інформація

У програмі передбачені можливості виведення ключів різними обходами, також запис ключів дерева на диск і ручний обхід дерева, який дає можливість пересуватися по вузлах дерева. При цьому користувачу відображається висота поточного вузла, його ключ, колір і дані про нащадків. Це дає можливість перевіряти структуру дерева. Також передбачене обчислення і виведення максимальної і мінімальної висоти дерева, для контролю вірності балансування і інших потреб.

4.5 Структура програми

main_many.cpp – містить функцію main, а також функцію GetMainMenuItem, яка викликає діалог головного меню і передає у функцію main код вибору користувача, відповідно якому головна функція завершує виконання програми, або викликає головну функцію одного з підменю, яка знаходиться у своєму файлі меню.

fun_prototupes.h – основний заготовочний файл, що підключається до всіх файлів коду і містить оголошення бібліотек, прототипи структур, та макро константи, а також функції доступні усім файлам коду.

У основному заготовочному файлі відображені прототипи функцій з файлій, описано їх призначення, а також функції які являються недоступними для інших файлів і не використовуються ними за коментовані.

Прототипи структур вузла і даних:

struct node;

struct data;

typedef struct data

{

int key;

}DATA;

typedef struct node

{

int colour;

struct data *ddata;

struct node *left, *right;

}NODE;

General_Fun.cpp – файл, що містить загальні функції (вони описані нижче), які доступні усім файлам програми і викликафться їхніми внутрішніми функціями.

void AddNawElem (NODE** kor, NODE *nod, int key); //додає новий елемент з ключем <key>, <kor==nod>

void PrintTree1_Doun (NODE *kor); // видруковує дерево, верхній(прямий) обхід

void PrintTree2_Semetrial (NODE *kor); // видруковує дерево, симетричний обхід

int GetMaxH (NODE *kor); // повертає максимальну висоту

int GetMinH (NODE *kor); // повертає мінімальну висоту

void DeleteLifNode (NODE *kor); // видаляє листок

void DeleteTrea (NODE *kor); // видаляє все дерево, нижній обхід

NODE* FindNode(NODE *kor, int key); // шукає елемент у дереві, повертає адресу структури, //або NULL

int DeliteNode (NODE **mainkor ,NODE *kor, int key); // видаляє елемент з дерева, 0-при провалі, 1-при успіху

//void GetDad1AndDelete (NODE **dad, NODE **delite, NODE *kor, int key); // викликається DeliteNode

//void GetDad2AndChange (NODE **dad, NODE **change, NODE *kor, int key); // викликається DeliteNode

Balanse_Fun_Add.cpp – у цьому файлі знаходяться функції балансування при додаванні вузла до дерева, для інших файлів доступна тільки одна нижче наведена не закоментована функція, вона викликає інші внутрішні функції і викликається загальною функцією додавання елемента AddNawElem.

// функції балансування

void SetBalanseAddInBR (NODE **mainkor, int key); // основна функція що викоонує //балансування при додаванні елемента

////////////////////////////////////////////////////////////////////////

// балансування при додаванні нового елемента

//void RB_BalansIfAdd (NODE **mainkor, NODE *kor, int key, int status); // червоно-чорне //балансування при додаванні нового елемента

//void case_1 (NODE *n, NODE *p, NODE *g, NODE *u); // 1 - випадок, для ч-ч балансування //при додаванні

//void case_2 (NODE *n, NODE *p, NODE *g, NODE *u, NODE *gg); // 2 - випадок, для ч-ч //балансування при додаванні

//void case_3 (NODE *n, NODE *p, NODE *g, NODE *u, NODE *gg); // 3 - випадок, для ч-ч //балансування при додаванні

////////////////////////////////////////////////////////////////////////

// додаткові функції для повної перебудови дерева через впорядкований масив

//void SetBalanseRebildTree (NODE **kor); // 1 - головна

//void GetToMS (NODE *kor); // 2

//void SetMS (NODE **kor, int lp1, int rp2); //3

//void SetAdress (NODE **mainkor, NODE *kor, NODE *nawkor); //4

//////////////////////////////////////////////////////////////////////////

Balanse_Fun_Delete.cpp – аналогічно до попереднього файлу, тільки тут функції балансування при видаленні вузла з дерева, для інших файлів доступна тільки одна нижче наведена не закоментована функція, вона викликає інші внутрішні функції і викликається загальною функцією видалення елемента DeliteNode.

// col - колір вузла що видалили, key_ch - його ключ, key_dad - ключ його батька

void SetBalanseDeleteInBR (NODE **mainkor, int key_dad, int key_ch, int col); // основна //функція що викоонує балансування при відніманні елемента

//void RB_BalansIfDelete (NODE **mainkor, NODE *kor, int key_dad, int key_ch, int col); // //червоно-чорне балансування при відніманні нового елемента

//void case_1 (NODE *p, NODE *v, NODE *s, NODE *sl, NODE *sr, NODE *g);

//void case_2 (NODE *p, NODE *v, NODE *s, NODE *sl, NODE *sr, NODE *g);

//void case_3 (NODE *p, NODE *v, NODE *s, NODE *sl, NODE *sr, NODE *g);

//void case_4 (NODE *p, NODE *v, NODE *s, NODE *sl, NODE *sr, NODE *g);

//void case_5 (NODE *p, NODE *v, NODE *s, NODE *sl, NODE *sr, NODE *g);

Item1_WorTree.cpp – файл першого пункту меню, зовнішня функція Item1_WorTree викликається функцією main, здійснює аналогічні дії до функції main, тільки викликає внутрішні функції файлу, які у свою чергу викликають загальні функції і виконують певні дії. Усі наступні файли містять аналогічні підменю пунктів головного меню і мають одинакову структуру, тому їх опис здійснюватися не буде.

// 1 пункт <робота з деревом> головне меню

void Item1_WorTree (NODE **kor);

//void main ()

//void DialogAddNode (NODE **kor); // діалог введення нового елемента

//void DialogPrintTree (NODE *kor); // діалог роздруку дерева (у порядку зростання, //симетричний обхід)

//void DialogFindNode (NODE *kor); // діалог пошуку елеметта

//void DialogGroopData (NODE **kor); //опрацювання груп даних

Item2_Disk.cpp – дивитись відомості про файл Item1_WorTree.cpp

// 2 пункт <робота з диском> головного меню

void Item2_Disk (NODE **kor);

//int GetDiskMenyItem ();

//void OpenTreaFromDisk (NODE **kor); // відкриває діалог вибору файлу з даними для його //відкриття

//void SaveTreeOnDisk (NODE *kor); // зберігає дерево у файлі

Item3_msTrees.cpp– дивитись відомості про файл Item1_WorTree.cpp

// 3 пункт <робота з декількома деревами> головне меню

void Item3_msTrees ();

//int GetMSTreeManyItem ();

//void DialogCreaateNawTree (); // створення нового дерева

//void DialogChuseCurentTree (int status); // дії з деревами 1 - вибір поточного, 2 - //очищення, 3 - видалення

//void DialoOverVy (); // діалог роздруку дерев

//void DialogTwoTree (int status); // дія з двома деревами 1 - злиття, 2 - віднімання

//void AddTreeToTree (NODE **kor1, NODE *kor2); // додавання двох дерев, викликається //фцією DialogTwoTree

//void DeleteTreeToTree (NODE **kor1, NODE *kor2); // віднімання двох дерев, викликається //фцією DialogTwoTree

Item4_Else.cpp– дивитись відомості про файл Item1_WorTree.cpp

// 4пункт <додаткове> головне меню

void Item4_Else (NODE **kor);

//int GetElseManyItem();

//void DialogGetMaxH (NODE *kor); // діалог отримання максимальної висоти дерева

//void DdialogGetMinH (NODE *kor); // діалог отримання мінімальної висоти дерева

//void DialogVisitTree (NODE *kor, int status); // діалог ручного проходу по дереву 2 - //довідка, 1 - довідка+прохід

//void VisitTree (NODE *kor); // рекурсивна фція ручного проходу по дереве, викликається //фцією DialogVisitTree

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]