Англо русский словарь
Англо-русский словарь построен как дерево. Каждая компонента содержит английское слово, соответствующее ему русское слово и счетчик количества обращений к данной компоненте. Первоначально дерево формируется согласно английскому алфавиту. В процессе эксплуатации словаря при каждом обращении к компоненте в счетчик обраще¬ний добавляется единица.
Составить программу, которая:
• обеспечивает начальный ввод словаря с конкретными значениями счетчиков обращений;
• формирует новое представление словаря в виде дерева по следую¬щему алгоритму: а) в старом словаре ищется компонента с наибольшим зна¬чением счетчика обращений; б) найденная компонента заносится в новый словарь и удаляется из старого; в) переход к п. а) до исчерпания исходного словаря;
• производит вывод исходного и нового словарей.
Программа должна обеспечивать диалог с помощью меню и контроль ошибок при вводе. Исходные данные могут вводиться как из файла, так из диалога
file.h двухсвязный список, можете его использовать. С формой надо делать, не в консуле.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174
template class T> class Node { public: T data; Node *pred; Node *next; Node () {next=pred=0;} }; template class T> class List { private: Node T> *beg; Node T> *end; public: List() { beg=end=0; } List(List&); List(T); ~List(); void AddBeg(T); void AddEnd(T); void Insert(T, int poz); void Remove(int poz); void RemoveAll(); void PrintAll(TMemo *m); int PrintNode(int poz); void PrintBack(TMemo *m); bool Empty(); Node T> *Find (int poz); NodeT>* Search(int); int count(); List& operator+ (List&); T operator [](int poz); }; template class T> void List T>::AddEnd (T d) { Node T> *temp = new Node T>; if(!temp) return; temp->data=d; temp->next=0; if (!end) beg=end=temp; else { temp->pred=end; end->next=temp; end=temp;} } template class T> void List T>::AddBeg(T d) { Node T> *temp = new Node T>; temp->data=d; temp->pred=0; if (Empty()) beg=end=temp; else { temp->next=beg; beg->pred=temp; beg=temp; } } template class T> bool List T>:: Empty() { Node T> *temp=beg; if (!temp) return 1; else return 0; } template class T> void List T>:: Remove(int poz) { Node T> *temp=Find(poz); if (!temp) return; if(poz==1) {temp->next->pred=0;beg=temp->next; delete(temp); return;} if(poz==count()) {temp->pred->next=0; end=temp->pred; delete(temp); return;} temp->pred->next=temp->next; temp->next->pred=temp->pred; delete (temp); } template class T> void List T>::RemoveAll() { Node T> *temp=beg; while (beg) { beg=beg->next; delete (temp); temp=beg; } } template class T> Node T> *List T>::Find(int poz) { Node T> *temp=beg; poz--; { while(temp && poz) { temp=temp->next; poz--; } return temp; } } template class T> T List T>::operator[](int poz) { Node T> *temp=Find(poz); if(temp) return temp->data; } template class T> int List T>::count() { int kol=0; Node T> *temp=beg; while(temp) { kol++; temp=temp->next;} return kol; } template class T> int List T>::PrintNode(int poz) { Node T> *temp=beg; poz--; { while(temp && poz) { temp=temp->next; poz--; } return temp->data; } } template class T> List T>&List T>::operator+(ListT>&L) { List T> *S= new List T>; Node T> *temp=beg; while (temp) { S->AddEnd(temp->data); temp=temp->next; } temp=L.beg; while (temp) { S->AddEnd(temp->data); temp=temp->next; } return *S; } template class T> List T>::~List() { RemoveAll();} template class T> void List T>::PrintAll(TMemo *m) { Node T> *temp=beg; if (!beg) return; while (temp) { m->Lines->Add(temp->data); temp=temp->next; } } template class T> void List T>::PrintBack(TMemo *m) { Node T> *temp=end; if(!end) return; while(temp) { m->Lines->Add(temp->data); temp=temp->pred; }} template class T> void ListT>::Insert(T d, int n ) { if (n==1) {AddBeg(d); return; } if (n>count()) {AddEnd(d); return; } NodeT>* temp=Find(n-1); NodeT>* new1=new NodeT>; new1->data=d; new1->pred=temp; new1->next=temp->next; temp->next=new1; temp->next->pred=new1; }
Источник
Англо-русский словарь, реализованный через бинарное дерево
Описать класс, реализующий бинарное дерево, обладающее возможностью добавления новых элементов, удаления существующих, поиска элемента по ключу, а также последовательного доступа ко всем элементам.
Написать программу, использующую этот класс для представления англо-русского словаря. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса. Предусмотреть возможность формирования словаря из файла и с клавиатуры.
Напишите пожалуйста полный код. Буду очень благодарен.
Двоичное дерево. Англо-русский словарь
Как сделать, чтобы count прибавлялся для одного слова, которое искали, а не для всех сразу. .
Англо-русский словарь построен как двоичное дерево.
Всем привет! Помогите пожалуйста с написанием программы:cry: Очень прошу:gcray: Англо-русский.
Англо-русский словарь
Прошу вас помочь написать мне программу на Borland C, программа (англо-русский словарь) Вот.
Англо-русский словарь
нужно написать программу "англо-русский и русско-английский словарь" база данных словаря должна.
Описать класс, реализующий бинарное дерево, обладающее возможностью добавления новых элементов, удаления существующих, поиска элемента по ключу, а также последовательного доступа ко всем элементам.
Написать программу, использующую этот класс для представления англо-русского словаря. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса. Предусмотреть возможность формирования словаря из файла и с клавиатуры.
Напишите пожалуйста полный код. Буду очень благодарен.
Описать класс, реализующий бинарное дерево, обладающее возможностью добавления новых элементов, удаления существующих, поиска элемента по ключу, а также последовательного доступа ко всем элементам.
Написать программу, использующую этот класс для представления англо-русского словаря. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса. Предусмотреть возможность формирования словаря из файла и с клавиатуры.
Напишите пожалуйста полный код. Буду очень благодарен.
Добавлено через 6 часов 7 минут
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
// ConsoleApplication5.cpp: главный файл проекта. #include "stdafx.h" #include using namespace std; struct node { int Key; int Count; node *Left; node *Right; }; class TREE { private: node *Tree; //Указатель на корень дерева. void Search(int, node**); public: TREE() { Tree = NULL; } node** GetTree() { return &Tree; } //Получение вершины дерева. void BuildTree(); void CleanTree(node **); void ObhodEnd(node **); void ObhodLeft(node **); void ObhodBack(node **); void Vyvod(node**, int); int Height(node**); }; int main() { TREE A; A.BuildTree(); cout "\nVyvod Dereva:\n"; A.Vyvod(A.GetTree(), 0); cout "\nVysota dereva:" A.Height(A.GetTree()) endl; cout "\nLevostoronnyi obhod dereva: "; A.ObhodLeft(A.GetTree()); cout "\nKonsevoy obhod dereva: "; A.ObhodEnd(A.GetTree()); cout "\nObratniy obhod dereva: "; A.ObhodBack(A.GetTree()); A.CleanTree(A.GetTree()); system("pause"); return 0; } void TREE::BuildTree() { int el; cout "Vvedite slovo . \n"; cin >> el; while (el != 0) { Search(el, &Tree); cin >> el; } } void TREE::Search(int x, node **p) { if (*p == NULL) { *p = new(node); (**p).Key = x; (**p).Count = 1; (**p).Left = NULL; (**p).Right = NULL; } else if (x(**p).Key) Search(x, &((**p).Left)); else if (x>(**p).Key) Search(x, &((**p).Right)); else (**p).Count = (**p).Count + 1; } void TREE::ObhodLeft(node **w) { if (*w != NULL) { cout (**w).Key " "; ObhodLeft(&((**w).Left)); ObhodLeft(&((**w).Right)); } } void TREE::ObhodEnd(node **w) //Концевой обход дерева. //*w - указатель на корень дерева. { if (*w != NULL) { ObhodEnd(&((**w).Left)); ObhodEnd(&((**w).Right)); cout (**w).Key " "; } } void TREE::ObhodBack(node **w) //Обратный обход дерева. //*w - указатель на корень дерева. { if (*w != NULL) { ObhodBack(&((**w).Left)); cout (**w).Key " "; ObhodBack(&((**w).Right)); } } void TREE::CleanTree(node **w) //Очистка дерева. //*w - указатель на корень дерева. { if (*w != NULL) { CleanTree(&((**w).Left)); CleanTree(&((**w).Right)); delete *w; } } void TREE::Vyvod(node **w, int l) //Изображение дерева *w на экране дисплея // (рекурсивный алгоритм). //*w - указатель на корень дерева. { int i; if (*w != NULL) { Vyvod(&((**w).Right), l + 1); for (i = 1; i l; i++) cout " "; cout (**w).Key endl; Vyvod(&((**w).Left), l + 1); } } int TREE::Height(node **w) //Определение высоты бинарного дерева. //*w - указатель на корень дерева. { int h1, h2; if (*w == NULL) return (-1); else { h1 = Height(&((**w).Left)); h2 = Height(&((**w).Right)); if (h1>h2) return (1 + h1); else return (1 + h2); } }
Источник
Бинарное дерево англо русский словарь
#include "stdafx.h" #include "windows.h" #include #include #include #include using namespace std; #pragma hdrstop //#pragma argsused using std::string; using std::cout; using std::endl; using std::cin; // Структура: struct tree < string eng; //английское слово string rus; //русский перевод int count; //количество обращений tree *left; tree *right; >; string temp_eng; string temp_rus; int temp_count; int level = 0; // Функция создания первого элемента tree *first(string eng, string rus, int count); // Функция поиска и добавления элемента tree *search_insert(tree *root, string eng, string rus, int count); // Функция показа дерева void print_tree(tree *p, int level); int main() < SetConsoleCP(1251); SetConsoleOutputCP(1251); int vibor; tree *root = NULL; do < cout > vibor; switch (vibor) < case 1: > temp_eng; cout > temp_rus; cout > temp_count; //создание первого элемента дерева if (!root) root = first(temp_eng, temp_rus, temp_count); //создание элементо-потомков дерева else root = search_insert(root, temp_eng, temp_rus, temp_count); >; break; case 2: return 0; break; case 3: print_tree(root, 0); break; default: cout > while (vibor != 3); system("pause"); return 0; > //--------------------------------------------------------------------------- // Функции программы: // Функция фрмирования первого элемента дерева: tree *first(string temp_eng, string temp_rus, int count) < tree *pv = new tree; pv->eng = temp_eng; pv->rus = temp_rus; pv->count = temp_count; pv->left = 0; pv->right = 0; return pv; > // Функция поиска и добавления элемента в дерево: tree *search_insert(tree *root, string temp_eng, string temp_rus, int temp_count) < tree *pv = root, *prev; bool found = false; //поиск по дереву prev = pv; while (pv && !found) < if (temp_eng == pv->eng) found = true; else if (temp_count < pv->count) pv = pv->left; else pv = pv->right; > if (found) return pv; //создание нового узла tree *pnew = new tree; pnew->eng = temp_eng; pnew->rus = temp_rus; pnew->count = temp_count; pnew->left = 0; pnew->right = 0; if (temp_count < prev->count) prev->left = pnew; //присоединение к левому поддереву предка else prev->right = pnew; //присоединение к правому поддереву предка return pnew; > // Функция показа дерева void print_tree(tree *p, int level) < if (p) < print_tree(p->left, level + 1); for (int i = 0; ieng; for (int i = 0; irus; for (int i = 0; icount; print_tree(p->right, level + 1); > >
Осталось добавить удаление элемента и поиск русского слова по введенному английскому слову.
#include #include struct Tree < int val; Tree* left; Tree* right; >; Tree* InsertNode(Tree* node, int val); void PrintNode(std::ostream& _out, const Tree* node); void ClearNode(Tree* node); //удаление Tree* DeleteNode(Tree* node, int val)< if(node == NULL) return node; if(val == node->val)< Tree* tmp; if(node->right == NULL) tmp = node->left; else < Tree* ptr = node->right; if(ptr->left == NULL)< ptr->left = node->left; tmp = ptr; > else < Tree* pmin = ptr->left; while(pmin->left != NULL)< ptr = pmin; pmin = ptr->left; > ptr->left = pmin->right; pmin->left = node->left; pmin->right = node->right; tmp = pmin; > > delete node; return tmp; > else if(val < node->val) node->left = DeleteNode(node->left, val); else node->right = DeleteNode(node->right, val); return node; > int main(void) < Tree* tree = NULL; for(int i = 0; i < 20; ++i) tree = InsertNode(tree, std::rand() % 10); PrintNode(std::cout, tree); std::cout //вставка Tree* InsertNode(Tree* node, int val)< if(node == NULL)< node = new (std::nothrow) Tree(); if(node != NULL)< node->val = val; node->left = node->right = NULL; > return node; > if(val < node->val) node->left = InsertNode(node->left, val); else node->right = InsertNode(node->right, val); return node; > //печать void PrintNode(std::ostream& _out, const Tree* node)< if(node != NULL)< if(node->left != NULL) PrintNode(_out, node->left); _out val right != NULL) PrintNode(_out, node->right); > > //удаление всего void ClearNode(Tree* node)< if(node != NULL)< if(node->left != NULL) ClearNode(node->left); if(node->right != NULL) ClearNode(node->right); delete node; > >
Источник