Форум программистов, компьютерный форум CyberForum.ru

Нужно 2 кода слепить в кучу (деревья) - C++

Восстановить пароль Регистрация
 
olenya21
0 / 0 / 0
Регистрация: 07.11.2012
Сообщений: 13
02.12.2012, 01:47     Нужно 2 кода слепить в кучу (деревья) #1
нужно 2 кода слепить в кучу...чтоб получилось что-то существенное...ато я не понимаю....помогите кому не сложно....
C++
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
175
176
177
178
179
180
181
182
183
184
185
#include <stdio.h>
#include <windows.h>
#include <string.h>
#include <conio.h>
 
#define N 2 //Размер массива в дереве
 
// Элемент дерева.
struct tree
{
int s[N]; //Массив целых чисел.
  int count; //Число занятых элементов в массиве 's'.
tree *left; //Указатель на левый потомок дерева
  tree *right; //Указатель на правый потомок дерева.
};
 
//Прототипы функций и глобальные переменные.
 
void About(void);
void printsk (char* format,...);
int menu_select(void); /* Выбор пункта меню. */
void enter(struct tree *usel); /* Ввод числа. */
void show(struct tree *usel); /* Вывод чисел на экран. */
void insert(int number, struct tree *usel);/* Вставка нового числа. */
struct tree *first(void); /* Создание вершины дерева. */
 
int main ()
{
About (); /* Вывод информации о программе и авторе. */
 
  struct tree *pbegin = first(); //создание пустой вершины дерева.
  /* Объявление используемых в программе локальных переменных. */
  char choice;
  /* Меню. */
for(;;) {
   choice = menu_select();
   switch(choice) {
     case 1: enter(pbegin); //Ввод числа
       break;
     case 2: show(pbegin); //Вывод чисел на экран
       break;
     case 3: exit(0); //Выход из программы.
   }
 }
 
  getchar(); /* Заглушка. */
return 0;
  /* Конец программы. */
}
 
/*-----------------------------------------------------------------------*/
/* Выбор пункта меню. */
int menu_select(void)
{
char s[50];
int c;
printsk("\n1. Ввод числа\n");
printsk("2. Вывод всех чисел на экран\n");
printsk("3. Выход\n");
do {
   printsk("\nВведите номер нужного пункта: ");
   scanf("%s",&s);
   c = atoi(s);
 } while(c<0 || c>3);
 return c;
}
 
/*-----------------------------------------------------------------------*/
/* Ввод строки */
void enter (struct tree *usel)
{
clrscr(); //Очистка экрана.
printsk ("Введите число: \n");
int num;
  scanf("%d", &num);
  insert (num, usel);
}
 
/*-----------------------------------------------------------------------*/
/* Создание вершины дерева. */
struct tree *first(void)
{
struct tree *pv = new struct tree;
  for (int j = 0; j < N; j++) pv->s[j]=0;
  pv->left = NULL;
  pv->right = NULL;
  pv->count = 0;
  return pv;
}
 
/*-----------------------------------------------------------------------*/
/* Вывод строк на экран. */
void show(struct tree *usel)
{
if(!usel) return;
  show(usel->left);
  if(usel->s[0]) for (int m = 0; m < usel->count; m++) printsk(" %d\n", usel->s[m]);
  show(usel->right);
}
 
/*-----------------------------------------------------------------------*/
/* Упорядоченная вставка нового числа в дерево */
void insert(int number, struct tree *usel)
{
//Если массив полностью пуст.
  if (usel->count == 0)
  {
usel->s[0] = number;
     usel->count = 1;
     return;
  }
 
  //Если массив полностью заполнен.
  if (usel->count == N)
  {
  //Если число из диапозона чисел в данном массиве.
     if (number > usel->s[0] && number <= usel->s[N-1])
     {
//То нужно вставить в текущий массив, а последнее рекурсивно в правую ветку.
        int temp = usel->s[N-1]; //Запоминаем последнее число из массива.
        //Ищем место вставки
        int k = 0;
        for (k = 0; k < N; k++) if (number <= usel->s[k]) break;
//Раздвигаем массив
        for (int temp_2 = N-1; temp_2 > k; temp_2--)
        usel->s[temp_2] = usel->s[temp_2-1];
        //Копируем число в массив.
        usel->s[k] = number;
        //Проверяем существуют ли ветки дерева, если нет, то создаем.
        if (usel->left == NULL)
        {
        usel->left = first();
           usel->right = first();
        }
        insert (temp, usel->right);
        return;
     }
     else
     { //Если не входит в диапозон чисел данного массива.
//Проверяем существуют ли ветки дерева, если нет, то создаем.
        if (usel->left == NULL)
        {
        usel->left = first();
           usel->right = first();
        }
      if (number <= usel->s[0]){ insert (number, usel->left); return;}
        if (number > usel->s[N-1]){ insert (number, usel->right); return;}
     }
  }
 
  //Если есть место в текущем массиве.
  if (usel->count < N)
  {
//Ищем место включения числа в массив.
     int m = 0;
     for (m = 0; m < usel->count; m++)
      if (number <= usel->s[m]) break;
     //Раздвигаем массив
     for (int v = usel->count; v > m; v--)
     usel->s[v] = usel->s[v-1];
     //Записываем 'number' в массив
     usel->s[m] = number;
     usel->count++;
     return;
  }
}
 
/*-----------------------------------------------------------------------*/
/* Преобразования кодовой таблицы для Windows */
void printsk (char* format,...)
{
char buf[100];
va_list ptr;
CharToOem(format,buf);
va_start(ptr,format);
vprintf(buf,ptr);
}
 
/* Функция выводит информацию и названии программы и ее авторе */
void About (void)
{
printsk("\n               Работа с деревьями   v.1.0\n\n");
printsk("Автор: \n");
printsk("Назначение: Упорядоченное дерево из целых чисел.\n");
}

и вот этот.....
C++
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
#include <iostream>
#include <Windows.h>
#include <string>
 
class Translator
{
private:
    struct Node
    {
        Node(std::string const& rus, std::string const& eng) :
            pl(0), pr(0), rus_(rus), eng_(eng){}
        Node* Insert(std::string const& rus, std::string const& eng)
        {
            Node* pret = 0;
            if(rus < rus_)
            {
                if(!pl)
                {
                    pl = new Node(rus, eng);
                    pret = pl;
                }
                else
                {
                    pret = pl->Insert(rus, eng);
                }
            }
            else if(rus > rus_)
            {
                if(!pr)
                {
                    pr = new Node(rus, eng);
                    pret = pr;
                }
                else
                {
                    pret = pr->Insert(rus, eng);
                }
            }
            return pret;
        }
        std::string GetEng(std::string const& rus)
        {
            std::string sret;
            if(rus == rus_)
                sret = eng_;
            else if(rus < rus_)
            {
                if(pl)
                    sret = pl->GetEng(rus);
            }
            else
            {
                if(pr)
                    sret = pr->GetEng(rus);
            }
            return sret;
        }
        void Cleanup()
        {
            if(pl)
            {
                pl->Cleanup();
                pl = 0;
            }
            if(pr)
            {
                pr->Cleanup();
                pr = 0;
            }
            delete this;
        }
        std::string rus_, eng_;
        Node* pl, *pr;
    };
public:
    Translator() : p_(0){}
    Node* Insert(std::string const& s1, std::string const& s2)
    {
        Node* pret = 0;
        if((s1[0] > 0 && s2[0] < 0) || (s1[0] < 0 && s2[0] > 0))
        {
            std::string const& rus(s1[0] < 0 ? s1 : s2);
            std::string const& eng(s1[0] > 0 ? s1 : s2);
            if(!p_)
            {
                p_ = new Node(rus, eng);
                pret = p_;
            }
            else
            {
                pret = p_->Insert(rus, eng);
            }
        }
        return pret;
    }
    std::string GetEng(std::string const& rus) const
    {
        std::string sret;
        if(p_)
        {
            sret = p_->GetEng(rus);
        }
        return sret;
    }
    void Cleanup()
    {
        if(p_)
        {
            p_->Cleanup();
            p_ = 0;
        }
    }
private:
    Node* p_;
    Translator(Translator const&);
    Translator& operator=(Translator);
};
 
int main()
{
    SetConsoleOutputCP(1251);
    Translator d;
    d.Insert("красный", "red");
    d.Insert("black", "чёрный");
    d.Insert("зелёный", "green");
    d.Insert("white", "белый");
    std::cout << d.GetEng("красный") << std::endl;
    std::cout << d.GetEng("чёрный") << std::endl;
    std::cout << d.GetEng("серый") << std::endl;
    std::cout << d.GetEng("красный") << std::endl;
    std::cout << d.GetEng("зелёный") << std::endl;
    d.Cleanup();
    std::cin.get();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2012, 01:47     Нужно 2 кода слепить в кучу (деревья)
Посмотрите здесь:

C++ массив указателей на кучу векторов
про кучу и не кучу C++
C++ Нужно совместить два кода
C++ нужно объяснение кода
C++ Нужно осуществить инжект ассемблерного кода в процесс
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
02.12.2012, 01:53     Нужно 2 кода слепить в кучу (деревья) #2
Цитата Сообщение от olenya21 Посмотреть сообщение
нужно 2 кода слепить в кучу
Что это значит? Там везде есть главная функция.
olenya21
0 / 0 / 0
Регистрация: 07.11.2012
Сообщений: 13
02.12.2012, 01:59  [ТС]     Нужно 2 кода слепить в кучу (деревья) #3
ну типо есть две программы..и нужно преводчик тоесть словарь вставить в первую программу...чтоб был и поиск по ключу....обход вроде...и словарь..как-то так..((я просто не очень доступно объясняю...извините..
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
02.12.2012, 09:36     Нужно 2 кода слепить в кучу (деревья) #4
добавил ф-цию печати всего дерева
C++
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
#include <iostream>
#include <Windows.h>
#include <string>
#include <iomanip>
 
class Translator
{
private:
    struct Node
    {
        Node(std::string const& rus, std::string const& eng) :
            pl(0), pr(0), rus_(rus), eng_(eng){}
        Node* Insert(std::string const& rus, std::string const& eng)
        {
            Node* pret = 0;
            if(rus < rus_)
            {
                if(!pl)
                {
                    pl = new Node(rus, eng);
                    pret = pl;
                }
                else
                {
                    pret = pl->Insert(rus, eng);
                }
            }
            else if(rus > rus_)
            {
                if(!pr)
                {
                    pr = new Node(rus, eng);
                    pret = pr;
                }
                else
                {
                    pret = pr->Insert(rus, eng);
                }
            }
            return pret;
        }
        std::string GetEng(std::string const& rus) const
        {
            std::string sret;
            if(rus == rus_)
                sret = eng_;
            else if(rus < rus_)
            {
                if(pl)
                    sret = pl->GetEng(rus);
            }
            else
            {
                if(pr)
                    sret = pr->GetEng(rus);
            }
            return sret;
        }
        void Print() const
        {
            if(pl)
                pl->Print();
            std::cout << std::setw(14) << std::left << rus_ << eng_ << std::endl;
            if(pr)
                pr->Print();
 
        }
        void Cleanup()
        {
            if(pl)
            {
                pl->Cleanup();
                pl = 0;
            }
            if(pr)
            {
                pr->Cleanup();
                pr = 0;
            }
            delete this;
        }
        std::string rus_, eng_;
        Node* pl, *pr;
    };
public:
    Translator() : p_(0){}
    Node* Insert(std::string const& s1, std::string const& s2)
    {
        Node* pret = 0;
        if((s1[0] > 0 && s2[0] < 0) || (s1[0] < 0 && s2[0] > 0))
        {
            std::string const& rus(s1[0] < 0 ? s1 : s2);
            std::string const& eng(s1[0] > 0 ? s1 : s2);
            if(!p_)
            {
                p_ = new Node(rus, eng);
                pret = p_;
            }
            else
            {
                pret = p_->Insert(rus, eng);
            }
        }
        return pret;
    }
    std::string GetEng(std::string const& rus) const
    {
        std::string sret;
        if(p_)
        {
            sret = p_->GetEng(rus);
        }
        return sret;
    }
    void Print() const
    {
        if(p_)
            p_->Print();
    }
    void Cleanup()
    {
        if(p_)
        {
            p_->Cleanup();
            p_ = 0;
        }
    }
private:
    Node* p_;
    Translator(Translator const&);
    Translator& operator=(Translator);
};
 
int main()
{
    SetConsoleOutputCP(1251);
    Translator d;
    d.Insert("красный", "red");
    d.Insert("black", "чёрный");
    d.Insert("зелёный", "green");
    d.Insert("white", "белый");
    std::cout << d.GetEng("красный") << std::endl;
    std::cout << d.GetEng("серый") << std::endl;
    d.Print();
    d.Cleanup();
    std::cin.get();
    return 0;
}
olenya21
0 / 0 / 0
Регистрация: 07.11.2012
Сообщений: 13
02.12.2012, 18:41  [ТС]     Нужно 2 кода слепить в кучу (деревья) #5
спасибо...и ещё не могли бы Вы сделать комментарии к програме?? через //
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
02.12.2012, 19:00     Нужно 2 кода слепить в кучу (деревья) #6
C++
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
#include <iostream>
#include <Windows.h>
#include <string>
#include <iomanip>
 
class Translator
{
private:
    struct Node // узел дерева
    {
        Node(std::string const& rus, std::string const& eng) : // конструктор узла
            pl(0), pr(0), rus_(rus), eng_(eng){}
        Node* Insert(std::string const& rus, std::string const& eng) // вставка в узел
        {
            Node* pret = 0;
            if(rus < rus_)
            {
                if(!pl)
                {
                    pl = new Node(rus, eng);
                    pret = pl;
                }
                else
                {
                    pret = pl->Insert(rus, eng);
                }
            }
            else if(rus > rus_)
            {
                if(!pr)
                {
                    pr = new Node(rus, eng);
                    pret = pr;
                }
                else
                {
                    pret = pr->Insert(rus, eng);
                }
            }
            return pret;
        }
        std::string GetEng(std::string const& rus) const // поиск по ключу
        {
            std::string sret;
            if(rus == rus_)
                sret = eng_;
            else if(rus < rus_)
            {
                if(pl)
                    sret = pl->GetEng(rus);
            }
            else
            {
                if(pr)
                    sret = pr->GetEng(rus);
            }
            return sret;
        }
        void Print() const // печать узлов
        {
            if(pl)
                pl->Print();
            std::cout << std::setw(14) << std::left << rus_ << eng_ << std::endl;
            if(pr)
                pr->Print();
 
        }
        void Cleanup() // освобождение памяти
        {
            if(pl)
            {
                pl->Cleanup();
                pl = 0;
            }
            if(pr)
            {
                pr->Cleanup();
                pr = 0;
            }
            delete this;
        }
        std::string rus_, eng_; // пара ключ - значение
        Node* pl, *pr; // указатели на левое и правое поддерево узла
    };
public:
    Translator() : p_(0){} // конструктор класса
    Node* Insert(std::string const& s1, std::string const& s2) // вставка ключа и значения(порядок любой)
    {
        Node* pret = 0;
        if((s1[0] > 0 && s2[0] < 0) || (s1[0] < 0 && s2[0] > 0))
        {
            std::string const& rus(s1[0] < 0 ? s1 : s2);
            std::string const& eng(s1[0] > 0 ? s1 : s2);
            if(!p_)
            {
                p_ = new Node(rus, eng);
                pret = p_;
            }
            else
            {
                pret = p_->Insert(rus, eng);
            }
        }
        return pret;
    }
    std::string GetEng(std::string const& rus) const // поиск по ключу (ключ - русское слово)
    {
        std::string sret;
        if(p_)
        {
            sret = p_->GetEng(rus);
        }
        return sret;
    }
    void Print() const // печать всех узлов дерева
    {
        if(p_)
            p_->Print();
    }
    void Cleanup() // освобождение динамической памяти
    {
        if(p_)
        {
            p_->Cleanup();
            p_ = 0;
        }
    }
private:
    Node* p_; // указатель на корневой узел
     // объект Translator нелбзя копировать и присваивать т.к. данные содержатся в динамической памяти
    Translator(Translator const&);
    Translator& operator=(Translator);
};
 
int main()
{
    SetConsoleOutputCP(1251);
    Translator d;
    d.Insert("красный", "red");
    d.Insert("black", "чёрный");
    d.Insert("зелёный", "green");
    d.Insert("white", "белый");
    std::cout << d.GetEng("красный") << std::endl;
    std::cout << d.GetEng("серый") << std::endl;
    d.Print();
    d.Cleanup();
    std::cin.get();
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.12.2012, 20:44     Нужно 2 кода слепить в кучу (деревья)
Еще ссылки по теме:

C++ Нужно описание кода!
Как собрать файлы в кучу? C++
C++ Помогите написать кучу задач

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
olenya21
0 / 0 / 0
Регистрация: 07.11.2012
Сообщений: 13
02.12.2012, 20:44  [ТС]     Нужно 2 кода слепить в кучу (деревья) #7
igorrr37 объясните ещё пожалуйста что такое в данном коде вот это
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
std::string sret;
            if(rus == rus_)
                sret = eng_;
            else if(rus < rus_)
            {
                if(pl)
                    sret = pl->GetEng(rus);
            }
            else
            {
                if(pr)
                    sret = pr->GetEng(rus);
            }
            return sret;
и как написать комментарий к данным строчкам...
C++
1
2
3
4
5
6
7
8
9
10
11
12
 SetConsoleOutputCP(1251);
    Translator d;
    d.Insert("красный", "red");
    d.Insert("black", "чёрный");
    d.Insert("зелёный", "green");
    d.Insert("white", "белый");
    std::cout << d.GetEng("красный") << std::endl;
    std::cout << d.GetEng("серый") << std::endl;
    d.Print();
    d.Cleanup();
    std::cin.get();
    return 0;
заранее спасибо..
Yandex
Объявления
02.12.2012, 20:44     Нужно 2 кода слепить в кучу (деревья)
Ответ Создать тему
Опции темы

Текущее время: 04:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru