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

Ўаблонные функции работы с деревом - C++

¬осстановить пароль –егистраци€
ƒругие темы раздела
C++ ќсвобождение пам€ти, удаление бинарного дерева http://www.cyberforum.ru/cpp-beginners/thread909829.html
ƒобрый день. Ќаписал программу, котора€ ищет в файле неиспользуемые переменные, т.е. те, которые объ€влены. ¬сЄ в общем-то работает, но препод говорит, что нужно освободить пам€ть. ѕоставил обнуление локальных переменных в конце функций и в main, но этого не достаточно. —о слов препода: "ѕосле каждого вызова функции дерево разрушаетс€, затем строитс€ с нул€, затем передаЄтс€ в следующую...
C++ ѕочему может не запускатьс€ .exe файл? ¬сем привет! “акой вопрос немного странный. я написал программу. ќна компилируетс€ и всЄ работает, всЄ что надо выводитс€ - вопросов нет. (¬сЄ - в режиме дебаг). ƒалее € захожу в директорию проекта, нахожу созданный .exe файл (в папке Debug), пытаюсь его запустить пр€мо из папки - и не получаетс€: окно показываетс€ на пару миллисекунд - просто мелькает - и все. ƒобавил в конце проги getch() -... http://www.cyberforum.ru/cpp-beginners/thread909826.html
передача указател€ структуры в функцию, ощибка на этапе выполнени€ C++
ѕомогите разобратс€ в чем ошибка. ќшибка вылетает на этапе выполнени€. struct book { char * name; char price; static unsigned int CELL; };unsigned int book::CELL = 0; void book_init (book *); void main (void)
ѕомен€ть элементы массива местами(код) C++
≈сть задание найти по главной и второстепенной диагонал€м массива максимальный и минимальный элементы и помен€ть их местами.  од получаетс€, если делать через swap (то что в комменте), но € хочу узнать, можно ли через указатели на этот элемент массива сделать свап? ¬от код: #include <iostream> #include <iomanip> #include <time.h> using namespace std; int min_i; int max_i; int min_j; int...
C++ ќтсортировать элементы файла input и вывести их в файл output http://www.cyberforum.ru/cpp-beginners/thread909782.html
«дравствуйте. ѕомогите решить. ≈сть файл input, в котором элементы располагаютс€ столбцом. Ќужно отсортировать элементы файла input и вывести их в файл output.
C++ Visual Studio “олько что установил этот мега ¬изуал —++ написал "элементарную" программу и вылетает ошибка при компил€ции типа "не найден исполн€ющий файл" переустанавливал все тоже :— подробнее

ѕоказать сообщение отдельно
TonyPride
2 / 2 / 1
–егистраци€: 22.10.2012
—ообщений: 47
23.06.2013, 08:23     Ўаблонные функции работы с деревом
ƒобрый день.
«адача: преобразовать готовые рекурсивные функции работы с деревом в шаблонные. — шаблонами только ещЄ начал знакомитс€, поэтому ещЄ много чего не понимаю. ѕеределал функции на шаблонные, но возникло 2 проблемы: 1) при заполнении дерева строками (символьными массивами), старые элементы переписываютс€ новыми, то есть вводим 1 - в дереве элемент 1, затем вводим 2, получаем дерево 2 2, вводим 3, имеем 3 3 3. ѕри этом с целыми и дробными числами, а также с символами (просто char) работает нормально. 2) ћожно как-то сделать, чтобы пользователь сам выбирал тип данных? —кажем сделать интерфейс в main через switch или ещЄ как, а то каждый раз мен€ть тип данных в самом коде как-то не то...
¬от код программы.
 ликните здесь дл€ просмотра всего текста
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
/*√ѓ√•√Ј√*√≤√Љ √°√®√*√*√∞√*√Ѓ√£√Ѓ √§√•√∞√•√Ґ√* √Ґ √і√*√©√Ђ. √Ш√*√°√Ђ√Ѓ√*√ї.*/
#include<stdio.h> 
#include<conio.h>
#include<ctype.h>
#include<string.h>
#include<iostream>
#define N 200
using namespace std;
 
template <class T>
struct btree
{ T value;  
  struct btree *left,*right;    // √≥√™√*√І√*√≤√•√Ђ√® √Ґ √ѓ√*√ђ√њ√≤√®
  long left_p, right_p;     // √*√§√∞√•√±√* √Ґ √і√*√©√Ђ√•
};
 
// √Р√•√™√≥√∞√±√®√Ґ√*√*√њ √і√≥√*√™√ґ√®√њ √і√Ѓ√∞√ђ√®√∞√Ѓ√Ґ√*√*√®√њ √§√•√∞√•√Ґ√* √Ґ √ѓ√*√ђ√њ√≤√®
template <class T>
void Ins_Btree(T val, btree<T> **q)
{
 if(*q == NULL)
 { *q = new btree<T>;
  (*q) -> left_p = (*q) -> right_p = 0L;
  (*q) -> left = (*q) -> right = NULL;
  (*q) -> value = val;
  return;
 }
if((*q) -> value > val) Ins_Btree (val, &(*q) -> left);
  else  Ins_Btree (val, &(*q) -> right);
}
 
 
// √Р√•√™√≥√∞√±√®√Ґ√*√*√њ √і√≥√*√™√ґ√®√њ √∞√*√±√ѓ√•√Ј√*√≤√™√® √§√•√∞√•√Ґ√* 
template <class T>
void Print_Btree(btree<T> *p)
{
if (p == NULL) return;
  Print_Btree(p -> left);
cout<<p->value<<"  ";
  Print_Btree(p -> right);
}
 
// √Р√•√™√≥√∞√±√®√Ґ√*√*√њ √і√≥√*√™√ґ√®√њ √І√*√ѓ√®√±√® √Ѓ√Ј√•√∞√•√§√*√Ѓ√© √Ґ√•√∞√Є√®√*√ї √§√•√∞√•√Ґ√* √Ґ √і√*√©√Ђ
template <class T>
long Put_File(btree<T> *p, FILE *fd)
{
long pos;
if (p == NULL) return -1L;
p -> left_p  = Put_File(p -> left, fd);
p -> right_p = Put_File(p -> right, fd);
pos = ftell(fd);
fwrite (p, sizeof(struct btree<T>), 1, fd);
return pos;
}
 
// √Ф√≥√*√™√ґ√®√њ √І√*√ѓ√®√±√® √§√•√∞√•√Ґ√* √Ґ √і√*√©√Ђ
template <class T>
void Put_Tree (btree<T> *p, FILE *fd)
{
long phead = 0L;
fseek( fd, 0L, SEEK_SET);
fwrite ( &phead, sizeof(long), 1, fd);
phead = Put_File ( p, fd);
fseek( fd, 0L, SEEK_SET);
fwrite ( &phead, sizeof(long), 1, fd);
}
 
// √Р√•√™√≥√∞√±√®√Ґ√*√*√њ √і√≥√*√™√ґ√®√њ √Ј√≤√•√*√®√њ √Ѓ√Ј√•√∞√•√§√*√Ѓ√© √Ґ√•√∞√Є√®√*√ї √§√•√∞√•√Ґ√* √®√І √і√*√©√Ђ√*
template <class T>
btree<T> *Get_File(btree<T> *p, long pos, FILE *fd)
{
//btree<T> *p = new  btree<T>;
if (pos == -1L) return (NULL);
fseek(fd, pos, SEEK_SET);
fread ( p, sizeof(btree<T>), 1, fd);
p -> left  = Get_File(p, p -> left_p,  fd);
p -> right = Get_File(p, p -> right_p, fd);
return p;
}
 
// √Ф√≥√*√™√ґ√®√њ √Ј√≤√•√*√®√њ √§√•√∞√•√Ґ√* √®√І √і√*√©√Ђ√*
template <class T>
btree<T> *Get_Tree(btree<T> *p, FILE *fd)
{
long phead;
fseek(fd, 0L, SEEK_SET);
fread ( &phead, sizeof(long), 1, fd);
Get_File(p, phead, fd);
return p;
}
 
int main()
{
char s[N];
btree<char*> *root = NULL;
char fname[40];
FILE *f;
puts("\nEnter file name"); gets(fname);
if((f = fopen(fname,"wb+")) == NULL)
  { puts("Error!"); return 0;}
puts("Enter elements (end-0)");
while(1)
{ gets(s);  
  if(strcmp(s, "0")==0) break; 
  else Ins_Btree(s, &root);
}
Print_Btree(root);
Put_Tree(root, f);
Get_Tree(root, f);
fclose(f);
getch ();
}

ѕримечание. ‘ункци€ печати дерева в файл кос€чит, выводит вс€кие кракоз€бры. Ёто € знаю, пока проблема в другом.
—пасибо.
ѕосле регистрации реклама в сообщени€х будет скрыта и будут доступны все возможности форума.
 
“екущее врем€: 00:23. „асовой по€с GMT +3.
 ибер‘орум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
–ейтинг@Mail.ru