Хелпикс

Главная

Контакты

Случайная статья





Методы и системы программирования»



 

МИНПРОСВЕЩЕНИЯ РОССИИ Федеральное государственное бюджетное образовательное учреждение высшего образования «Тульский государственный педагогический университет им. Л.Н. Толстого» (ТГПУ им. Л.Н. Толстого)

 

                                                                                                                                    

 

Кафедра информатики и информационных технологий

 

 

ОТЧЕТ

по дисциплине:

«Методы и системы программирования»

Лабораторная работа № 3

ВАРИАНТ № 20

 

 

Выполнил:

студент группы 121591

факультета математики, физики и

информатики

Сидоров М.Д.

 

 

Тула – 2020


 

Общие задания:

1)Построить класс для работы с бинарным деревом, содержащим англо-русский словарь. При решении задачи необходимо описать класс, который используется для представления элементов динамической структуры данных. Затем разрабатывается класс для работы с используемой динамической структурой данных, которая при тестировании класса построена путем ввода данных из файла.

Код программы:

#include <iostream>

#include <fstream>

#include <cstringt.h>

using namespace std;

bool success;

struct node

{

char rusWord[30];

char engWord[30];

node* l, * r;

};

class My

{

public:

void addToFile(char rusWord[], char engWord[])

{

   ofstream of("data.txt", ios::app);

   of << engWord << endl;

   of << rusWord << endl;

   of.close();

}

 

 

void push(char rusWord[], char engWord[], node** t)

{

   if ((*t) == NULL) // создаем узел

   {

       (*t) = new node;

       strcpy((*t)->engWord, engWord);

       strcpy((*t)->rusWord, rusWord);

       (*t)->l = (*t)->r = NULL;

       return;

   }

 

   if (strcmp((*t)->engWord, engWord) > 0)

       push(rusWord, engWord, &(*t)->r); // для ввода английского слова

   else

       push(rusWord, engWord, &(*t)->l);// для ввода русского слова слова

}

 

 

void find(node* t, bool type, char findWord[])

{

   if (t == NULL) return;

   else

   {

 

       if (!success)

           find(t->l, type, findWord);

       else

           return;

       if (type)

       {

           if (strcmp(t->engWord, findWord) == 0)

           {

               cout << t->rusWord << endl;

               success = true;

               return;

           }

       }

       else

           if (strcmp(t->rusWord, findWord) == 0)

           {

               cout << t->engWord << endl;

               success = true;

               return;

           }

   }

   if (!success)

       find(t->r, type, findWord);

   else

       return;

}

void Load(node** t)

{

   char buffer[30];

   char buffer2[30];

   ifstream of("data.txt");

   while (!of.eof())

   {

       of >> buffer;

       of >> buffer2;

       if (strlen(buffer) > 0)

           push(buffer2, buffer, t);

   }

   of.close();

}

node* tree = NULL;

private:

 

 

};

void main()

{

// setlocale(LC_ALL, "Russian");

class My t1;

system("chcp 1251");

bool type = true;

int menu;

char buffer[30], buffer2[30];

t1.Load(&t1.tree);

 

while (true)

{

   if (type)

       cout << "Режим: Англо-русский словарь (поиск осуществляется по английскому слову)" << endl;

   else

       cout << "Режим: Русско-английский словарь(поиск по русскому слову)" << endl;

   cout << "Выберите действие" << endl;

   cout << "1. Добавить слово" << endl;

   cout << "2. Переключить режим работы" << endl;

   cout << "3. Поиск перевода слова" << endl;

   cout << "0. Выход" << endl;

   cin >> menu;

   switch (menu)

   {

   case 1:

       if (type)

       {

           cout << "Введите слово (по-русски)" << endl;

           cin >> buffer2;

           cout << "Введите перевод (по-английски)" << endl;

           cin >> buffer;

       }

       else

       {

           cout << "Введите слово (по-английски)" << endl;

           cin >> buffer;

           cout << "Введите перевод (по-русски)" << endl;

           cin >> buffer2;

       }

       t1.push(buffer2, buffer, &t1.tree);

       t1.addToFile(buffer2, buffer);

       break;

   case 2:

       type = !type;

       break;

   case 3:

       cout << "Введите слово " << endl;

       cin >> buffer;

       success = false;

       t1.find(t1.tree, type, buffer);

       if (!success)

           cout << "Перевод не найден" << endl;

       break;

   case 0:

       break;

   default:

       cout << "Ошибка выбора" << endl;

       break;

   }

   if (menu == 0)

       break;

}

}

Контрольные примеры:

Пример №1

Пример №2

 

Пример №3


 

2)Построить класс для работы с бинарным деревом, который содержит динамическую информацию о наличии автобусов в парке: номер автобуса, фамилию и инициалы водителя, номер маршрута, признак местонахождения автобуса – на маршруте или в парке.

Программа должна обеспечивать: начальное формирование дерева, введение номера автобуса при выезде и установление программой значения признака «автобус на маршруте». Аналогичным образом изменяется информация об автобусе при его возвращении в парк. По запросу выдаются сведения об автобусах, находящихся в парке, или об автобусах, находящихся на маршруте. При тестировании класса ввода данных происходит из файла.

Код программы:

#include <iostream>

#include <fstream>

#include <cstringt.h>

using namespace std;

bool est = 0;

class t1

{

public:

struct tnode {

   char nomeravt[256];

   int nomermar;

   char fio[256];

   bool dom;

   // поле данных

   struct tnode* left; // левый потомок

   struct tnode* right; // правый потомок

};

struct tnode* s;

 

void treeprint(tnode* tree) {

   if (tree != NULL) { //Пока не встретится пустой узел

       treeprint(tree->left); //Рекурсивная функция для левого поддерева

       treeprint(tree->right); //Рекурсивная функция для правого поддерева

       cout << tree->nomeravt << "\t" << tree->nomermar << "\t" << tree->fio << "\t";

       if (tree->dom == 1) cout << "В депо" << "\n"; //Отображаем корень дерева

       else

       {

           cout << "В пути" << "\n";

       }

   }

}

void addtofile(char x[], int y, char f[], bool d, tnode* tree)

{

   ofstream of("data.txt", ios::app);

   of << x << "\t" << y << "\t" << f << "\t" << d << "\n";

 

   of.close();

}

 

struct tnode* addnode(char x[], int y, char f[], bool d, tnode* tree) {

   if (tree == NULL) { // Если дерева нет, то формируем корень

       tree = new tnode; // память под узел

       strcpy(tree->nomeravt, x);

       strcpy(tree->fio, f);

       tree->nomermar = y;

       tree->dom = d;

       // поле данных

       tree->left = NULL;

       tree->right = NULL; // ветви инициализируем пустотой

   }

   else if (x < tree->nomeravt) // условие добавление левого потомка

       tree->left = addnode(x, y, f, d, tree->left);

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

       tree->right = addnode(x, y, f, d, tree->right);

   return(tree);

}

void load(tnode* tree, int g)

{

 

   ifstream of("data.txt");

   char x1[256]; int y1; char f1[256]; bool d1;

   for (int i = 0; i < g; i++)

   {

       of >> x1 >> y1 >> f1 >> d1;

       cout << x1 << "\t" << y1 << "\t" << f1 << "\t" << d1 << "\n";

       s = addnode(x1, y1, f1, d1, s);

   }

 

 

}

void poiskpodom(tnode* tree)

{

   if (tree != NULL) { //Пока не встретится пустой узел

       poiskpodom(tree->left); //Рекурсивная функция для левого поддерева

       poiskpodom(tree->right); //Рекурсивная функция для правого поддерева

       if (tree->dom == 1) { cout << tree->nomeravt << "\t" << tree->nomermar << "\t" << tree->fio << "\t" << "В депо" << "\n"; est = 1; } //Отображаем корень дерева

   }

}

void poisknepodom(tnode* tree)

{

   if (tree != NULL) { //Пока не встретится пустой узел

       poisknepodom(tree->left); //Рекурсивная функция для левого поддерева

       poisknepodom(tree->right); //Рекурсивная функция для правого поддерева

       if (tree->dom == 0) { cout << tree->nomeravt << "\t" << tree->nomermar << "\t" << tree->fio << "\t" << "В пути" << "\n"; est = 1; } //Отображаем корень дерева

   }

}

void zamena(tnode* tree, char a[])

{

   if (tree != NULL) { //Пока не встретится пустой узел

       zamena(tree->left, a); //Рекурсивная функция для левого поддерева

       zamena(tree->right, a); //Рекурсивная функция для правого поддерева

       if (strcmp(tree->nomeravt, a) == 0) {

           cout << "Нашли\n" << tree->nomeravt << "\t" << tree->nomermar << "\t" << tree->fio << "\t" << tree->dom << "\n";

           cout << "Меняем положение\n";

           cin >> tree->dom;

       } //Отображаем корень дерева

   }

}

 

private:

 

};

 

int main()

{

t1 t2;

 

system("chcp 1251");

 

int y;

char f[256], x[256], a[256];

bool d;

t2.s = NULL;

cout << "Введите количество\n";

int g;

cin >> g;

cout << "1) Ввести с клавиатуры и записать в файл\n2) Ввод из файл\n3) Вывести данные\n4) На маршруте\n5) В депо\n6) Изменить\n";

int men;

 

 

do

{

   cout << ">>";

   cin >> men;

   if (men == 1) for (size_t i = 0; i < g; i++)

   {

       cout << "Введите номер автобуса\n";

       cin >> x;

       cout << "Введите номер номер маршрута\n";

       cin >> y;

       cout << "Введите ФИО\n";

       cin >> f;

       cout << "В парке ли автобус\n";

       cin >> d;

       t2.s = t2.addnode(x, y, f, d, t2.s);

       t2.addtofile(x, y, f, d, t2.s);

   }

   if (men == 2)

   {

       cout << "Что загрузили\n";

       t2.load(t2.s, g);

   }

   if (men == 3) {

       cout << "В дереве \n";

       t2.treeprint(t2.s);

   }

   if (men == 4)

   {

       t2.poisknepodom(t2.s);

       if (est == 1)

       {

           est = 0;

       }

       else {

           cout << "Все работники в депо\n";

 

       }

   }

   if (men == 5) {

       t2.poiskpodom(t2.s);

       if (est == 1)

       {

           est = 0;

       }

       else {

           cout << "Все работники в пути\n";

       }

   }

   if (men == 6) {

       cout << "Ищем по номеру\n";

       cin >> a;

       t2.zamena(t2.s, a);

   }

} while (men != 0);

}

 

Контрольные примеры:

 

Пример №1

Пример №2

Пример №3


 

20.Индивидуальное задание

Код: программы:

#include <iostream>

using namespace std;

class MyClass

{

public:

           void vvodva()

           {

 

                          t1->q = 0;

                          t1->next = NULL;

                          begina = t1;

                          cout << "Введите значения до 0\n";

                          do

                          {

                                          t1 = new a;

                                          cin >> t1->q;

                                          t1->next = begina;

                                          begina = t1;

 

                          } while (t1->q != 0);

 

           }

 

           void vvodvb()

           {

                          t2->q = 0;

                          t2->next = NULL;

                          beginb = t2;

                          cout << "Введите значения до 0\n";

                          do

                          {

                                          t2 = new b;

                                          cin >> t2->q;

                                          t2->next = beginb;

                                          beginb = t2;

 

                          } while (t2->q != 0);

 

           }

           void vivoda()

           {

                          cout << "В структуре 'a'\n";

                          t1 = begina;

                          t1 = t1->next;

                          begina = t1;

                          while (t1->next)

                          {

                                          cout << t1->q << "\t";

                                          t1 = t1->next;

                          }

                          cout << "\n";

           }

           void vivodb()

           {

                          cout << "В структуре 'b'\n";

                          t2 = beginb;

                          t2 = t2->next;

                          beginb = t2;

                          while (t2->next)

                          {

                                          cout << t2->q << "\t";

                                          t2 = t2->next;

                          }

                          cout << "\n";

           }

           void sozc()

           {

                          t1 = begina;

                          t2 = beginb;

                          t3->q = 0;

                          t3->next = NULL;

                          beginc = t3;

                          while (t1->next != NULL || t2->next != NULL)

                          {

                                          if (t1->q >= t2->q && t1->next != NULL)

                                          {

                                                          t3 = new c;

                                                          t3->q = t1->q;

                                                          t3->next = beginc;

                                                          beginc = t3;

                                                          t1 = t1->next;

 

                                          }

 

                                          if (t2->q >= t1->q && t2->next != NULL)

                                          {

                                                          t3 = new c;

                                                          t3->q = t2->q;

                                                          t3->next = beginc;

                                                          beginc = t3;

                                                          t2 = t2->next;

 

                                          }

 

                                          if (t1->next == NULL && t2->next != NULL)

                                          {

                                                          t3 = new c;

                                                          t3->q = t2->q;

                                                          t3->next = beginc;

                                                          beginc = t3;

                                                          t2 = t2->next;

                                          }

                                          if (t2->next == NULL && t1->next != NULL)

                                          {

                                                          t3 = new c;

                                                          t3->q = t1->q;

                                                          t3->next = beginc;

                                                          beginc = t3;

                                                          t1 = t1->next;

                                          }

 

                          }

           }

 

           void vivodc()

           {

                          cout << "В 'c'\n";

                          t3 = beginc;

                          //       t3 = t3->next;

                          while (t3->next != NULL)

                          {

                                          cout << t3->q << "\t";

                                          t3 = t3->next;

                          }

                          cout << "\n";

           }

 

private:

 

           struct a

           {

                          float q;

                          a* next;

           };

           struct b

           {

                          float q;

                          b* next;

           };

           struct c

           {

                          float q;

                          c* next;

           };

           a* begina;

           b* beginb;

           c* beginc;

           a* t1 = new a;

 

           b* t2 = new b;

           c* t3 = new c;

};

int main()

{

           system("chcp 1251");

           MyClass g;

           g.vvodva();

           g.vvodvb();

           g.vivoda();

           g.vivodb();

           g.sozc();

           g.vivodc();

}

Контрольные примеры:

Пример №1

Пример №2

Пример №3



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.