Ім'я файлу: Звіт_Лабораторна_9_Левеовець_Д_О.docx
Розширення: docx
Розмір: 97кб.
Дата: 14.11.2021
скачати
Пов'язані файли:
Звіт_Лабораторна_8_Левковець_Д_О.docx
Звіт_Лабораторна_7_Левковець_Д_О.docx

Національний університет

Біоресурсів та природокористування

Факультету інформаційних технологій

Лабораторна робота №9

Студента групи ІПЗ-21011бск

Виконав: Левковець Д.О.

Дата виконання: 06.11.21

Перевірив: Міловідов Ю.О.

Звіт

По лабораторній роботі №9

Варіант -10

Тема: НЕЛІНІЙНІ СТРУКТУРИ ДАНИХ. СТРУКТУРА ДАНИХ ТИПУ «БІНАРНЕ ДЕРЕВО»

Мета: вивчити поняття, формування, особливості доступу до даних і роботи з пам'яттю в бінарних деревах, навчитися вирішувати завдання з використанням рекурсивних функцій і алгоритмів обходу бінарних дерев на мові C++.

Завдання:

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

Завдання за варіантом:

Автоматизована інформаційна система на залізничному вокзалі містить відомості про відправлення поїздів далекого прямування.

Для кожного поїзда вказується:

номер поїзда;

станція призначення;

час відправлення.

Дані в інформаційну систему організовані у вигляді бінарного дерева. Скласти програму, яка:

забезпечує початковий введення даних в інформаційну систему і формування двійкового дерева;

забезпечує вивід всього дерева;

вводить номер поїзда і виводить всі дані про цей потяг;

вводить назву станції призначення і виводить дані про всі поїзда, що прямують до цієї станції

Виконання завдання.

#include

#include

#include

#include

#include
using namespace std;
struct Train {

Train* left;

Train* right;

char stantion[50];
int number_train;

int arrival_time_h;

int arrival_time_m;

int Start;

};
int for_train = 1;

int launch(int Start);

void push_train(Train new_train, Train** t);

void print_train(Train* t, int u, int long_wood);

void search_train(Train* t, Train* parent, Train new_train);

void search_stantion(Train* t, Train* p, Train new_train);

int long_wood(Train* g, int u);

Train* Left_most(Train* t);

Train* Right_most(Train* t);
Train* wood = NULL; //Оголошуємо змiну (Дерео структура).
int main() {

SetConsoleCP(1251);

SetConsoleOutputCP(1251);
int menu;
//Додаємо стартовий список потягiв.
Train new_train;

new_train.number_train = 25; new_train.arrival_time_h = 12; new_train.arrival_time_m = 30;

strcpy_s(new_train.stantion, "Марiуполь");

push_train(new_train, &wood);
new_train.number_train = 85; new_train.arrival_time_h = 15; new_train.arrival_time_m = 45;

strcpy_s(new_train.stantion, "Одеса");

push_train(new_train, &wood);
new_train.number_train = 42; new_train.arrival_time_h = 21; new_train.arrival_time_m = 15;

strcpy_s(new_train.stantion, "Рахiв");

push_train(new_train, &wood);
new_train.number_train = 36; new_train.arrival_time_h = 18; new_train.arrival_time_m = 10;

strcpy_s(new_train.stantion, "Львiв");

push_train(new_train, &wood);
new_train.number_train = 29; new_train.arrival_time_h = 14; new_train.arrival_time_m = 50;

strcpy_s(new_train.stantion, "Київ");

push_train(new_train, &wood);

int Start = 0;

launch(Start);
for (;;) {

cout << endl;

cout << "\t\t________________Меню програми________________\n" << endl;

cout << "1) - Виести список потягiв " << endl;

cout << "2) - Додати потяг в базу " << endl;

cout << "3) - Пошук потяга в базi за номером" << endl;

cout << "4) - Вихiд iз програми " << endl;

cout << endl;

cout << "Виконання дiй # ";
cin >> menu;
switch (menu) //Меню програми.

{

case 1:

print_train(wood, 0, long_wood(wood, 0));
break;

case 2:

cout << "Додаємо новий потяг..." << endl;
int n; //К-ть елементiв.

cout << "Кiлькiсть потягiв, яких хочете додати = ";

cin >> n;
for (int i = 0; i < n; i++) {

//Створюємо новий потяг.

Train new_train;

//Зчитуємо його данi i записуємо.

cout << "Введiть номер потяга № " << i + 1 << " ";

cin >> new_train.number_train;

cout << "Введiть станцiю № " << i + 1 << " ";

cin >> new_train.stantion;

cout << "Введiть час вiдправлення (година)№ " << i + 1 << " ";

cin >> new_train.arrival_time_h;

cout << "Ввкдiть час вiдправлення (хвилини)№ " << i + 1 << " ";

cin >> new_train.arrival_time_m;
printf("Потяг успiшно додан в базу даних...");

push_train(new_train, &wood);

}

break;

case 3:

cout << "Пошук потяга..." << endl;

//Пошук потяга.

Train enter_train;

//Зчитуємо його номер для пошуку.

cout << "Введiть номер потяга ";

cin >> enter_train.number_train;
search_train(wood, NULL, enter_train);

break;

case 4:

exit(0);

break;

default:

cout << "Немає таких дiй" << endl;

cout << endl;

break;

}

}

system("pause");

return 0;

}
int launch(int Start) {

return Start;

}
//Пошук глибини дерева.

int long_wood(Train* g, int u) {

int current_wood = u,

left_wood = u,

right_wood = u;

if (g == NULL) {

return 0; //Якщо дерево пусте, то вiдображати нiчого, виходячи.

}

else {

u++;

left_wood = long_wood(g->left, u);

if (left_wood >= current_wood) {

current_wood = left_wood;

}

u--;

}

u++;
//За допомогою рекурсiї навiдуємо праве пiддерео.

right_wood = long_wood(g->right, u);

if (right_wood >= current_wood) {

current_wood = right_wood;

}
return current_wood;

}
//Функцiя запису елемента в бiнарне дерево

void push_train(Train new_train, Train** t){

if ((*t) == NULL) //Якщо дерево не iснує.

{

(*t) = new Train; //Видiляємо пам'ять.

(*t)->number_train = new_train.number_train;

(*t)->arrival_time_h = new_train.arrival_time_h;

(*t)->arrival_time_m = new_train.arrival_time_m;

strcpy_s((*t)->stantion, new_train.stantion);

(*t)->left = NULL; //Очищюємо пам'ять для наступного росту.

(*t)->right = NULL;

return;

}
//Дерево iснує.

if (new_train.number_train > (*t)->number_train) {

push_train(new_train, &(*t)->right); //Якщо аргумент бiльше чим нинiшнiй елемент, кладемо вправо.

}

else {

push_train(new_train, &(*t)->left); //iнакше кладемо влiво.

}

}
//Функцiя вiдображення дерева на екранi

void print_train(Train* t, int u, int long_wood) {

if (t == NULL) {

return; //Якщо дерево пусте, то вiдображати нiчого, виходячи.

}

else {

u++;

print_train(t->left, u, long_wood); //За допомогою рекурсiї iдемо в лiве пiддерево.

for (int i = 0; i < u; i++) {

cout << ">\t";

}

for (int i = u - 1; i < long_wood; i++) {

cout << " ";

}

//i показуємо елемент.

cout << "Номер потяга = " << t->number_train

<< " / Час вiдправлення = " << t->arrival_time_h << ":" << t->arrival_time_m

<< " / Станцiя = " << t->stantion << endl;
u--;

}

u++;

print_train(t->right, u, long_wood); //За допомогою рекурсiї iдемо в праве пiддерево.

}
//Пошук потяга за номером

void search_train(Train* t, Train* parent, Train new_train) {

if (t == NULL) {

cout << endl;

cout << "Немає такого потяга" << endl;

cout << "Повторiть запис..." << endl;

}

else {

if (new_train.number_train < t->number_train) {

return search_train(t->right, t, new_train);

}

else if (new_train.number_train > t->number_train) {

return search_train(t->right, t, new_train);

}

else {

if (t->left == NULL && t->right == NULL && strcmp(new_train.stantion, t->stantion) == 0) {

if (parent->left == t) {

parent->left == NULL;

}

else {

parent->right == NULL;

}

delete t;

}

else if (t->left == NULL && t->right == NULL && strcmp(new_train.stantion, t->stantion) != 0) {
}

t->right = NULL;

t->left = NULL;
cout << "Потяг успiшно знайдено...\n" << endl;

cout << "Номер потяга = " << t->number_train

<< " / Час вiдправлення = " << t->arrival_time_h << ":" << t->arrival_time_m

<< " / Станцiя = " << t->stantion << endl;

}

}

}
Train* Left_most(Train* t) {

if (t == NULL)

return NULL;

if (t->left != NULL) {

return Left_most(t->left);

}

return t;

}
Train* Right_most(Train* t) {

if (t == NULL)

return NULL;

if (t->right != NULL) {

return Right_most(t->right);

}

return t;

}

Запуск програми.



На початку ми бачимо меню програми в якому вибираємо пункт, для виведення списку потягів у вигляді двійкового бінарного дерева.



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



Тепер ми здійснюємо пошук потяга за його номером.



І виходимо з програми.

Київ - 2021

скачати

© Усі права захищені
написати до нас