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

задача с деревьями(надо найти ошибку) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Вопросы по OpenMP http://www.cyberforum.ru/cpp-beginners/thread452204.html
Всем доброго времени суток! 1. Заметил, что потоки создаваемые в цикле for так и висят в диспетчере задач Windows до завершения работы программы. Как то их самому убить возможно? Цикл я использую так: #pragma omp parallel for for (Index i = 0; i < countThreads; i++) { func(i); }
C++ Функция sprinf() Пишу прогу на WINAPI нужно преобразовать масив чисел в строку, чтоб вивести ево, вот врагмент для консоли: char Name; for(i = 0; i < N; i++) { for(j = 0; j < N; j++) { sprintf(Name, " %d", cells ); } http://www.cyberforum.ru/cpp-beginners/thread452203.html
Union C++
Возник вопрос про объединения. В книгах я встречал лишь случай, когда размер одного из полей больше или равен сумме размеров остальных. Например: union { double a; char b; }; А как будет работать объединение в таком случае:
Практика по с++ C++
1)Дан массив целых чисел. Найти в этом массиве минимальный элемент m и максимальный элемент M. Получить в порядке возрастания все целые числа из интервала (m;M), которые не входят в данный массив 2)Дана матрица размером n x m. Переставляя ее строки и столбцы, добиться того, чтобы наибольший элемент (или один из них) оказался в верхнем левом углу. 3)Дана строка. Определить, сколько раз входит в...
C++ Матрица в классе, указатель на матрицу. http://www.cyberforum.ru/cpp-beginners/thread452170.html
Здравствуйте. Помогите, пожалуйста, с матрицей в классе. Вот то, что накалякал я. Matrix.h: class Matrix{ private: int n,m; double *arr; public: Matrix(int, int); void setMatrix(); ~Matrix();
C++ Имеется N мужчин и N женщин. Имеются также данные о предпочтениях каждого мужчины к каждой женщине. Имеется N мужчин и N женщин. Имеются также данные о предпочтениях каждого мужчины к каждой женщине. Аналогичные данные имеются и для женщин. Требуется составить такой набор пар, чтобы общество, получившееся из таких семей, было наиболее «счастливо». (Исходные данные задать самостоятельно). подробнее

Показать сообщение отдельно
qwer_11
2 / 2 / 0
Регистрация: 30.10.2011
Сообщений: 16
25.02.2012, 18:35     задача с деревьями(надо найти ошибку)
Найти вершины, через которые проходят пути максимальной длины, и удалить (правым удалением) самую высокую из них их.
Входные данные
in.txt содержит последовательность чисел — ключей дерева.
Выходные данные
out.txt содержит массив вершин, полученный прямым левым обходом итогового дерева.
вот такая задача. я написал вот такой код, но он не работает. не могу понять где ошибка(( подскажите )
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
#include <iostream>
#include <fstream>
using namespace std;
 
struct Tree
{
    int Key;
    Tree* LeftSon;
    Tree* RightSon;
    int L;
    int R;
};
 
void Output(Tree* a, ofstream &file)
{
    if (a != NULL)
    {
        file << a -> Key << '\n';
        Output (a -> LeftSon, file);
        Output (a -> RightSon, file);
    }
}
 
void Input(ifstream &file, Tree* derevo)
{
    char c[100];
    file.getline (c,100);
    derevo -> Key = atoi (c);
    while (! file.eof())
    {
        file.getline (c,100);
        Tree* t = new Tree;
        t -> LeftSon = NULL;
        t -> RightSon = NULL;
        t -> L = 0;
        t -> R = 0;
        t -> Key = atoi (c);
        Tree* temp = derevo;
        bool k = false;
        while ( k == false)
        {
            if (t -> Key < temp -> Key)
                if (temp -> LeftSon != NULL)
                    temp = temp -> LeftSon;
                else
                {
                    temp -> LeftSon = t;
                    k = true;
                }
            else if (t -> Key > temp -> Key)
                if (temp -> RightSon != NULL)
                    temp = temp -> RightSon;
                else
                {
                    temp -> RightSon = t;
                    k = true;
                }
            else if (t -> Key == temp -> Key)
            {
                delete t;
                k = true;
            }
        }
    }
}
 
int max (int a, int b)
{
    return (a > b) ? a : b;
}
 
int Obhod(Tree* derevo, int Max)
{
    if (derevo != NULL)
    {
        Obhod (derevo -> LeftSon, Max);
        if (derevo -> LeftSon != NULL)
            derevo -> L = max (derevo -> LeftSon -> L, derevo -> LeftSon -> R) + 1;
        Obhod (derevo -> RightSon, Max);
        if (derevo -> RightSon != NULL)
            derevo -> R = max (derevo -> RightSon -> L, derevo -> RightSon -> R) + 1;
        if ((derevo -> L + derevo -> R  > Max))
        {
            Max = derevo -> L + derevo -> R;
        }
    }
    return derevo -> Key;
}
 
bool DeleteEl (Tree* derevo, int del )
{
    if ( derevo == NULL ) return false;
    if ( derevo -> Key == del )
    {
        if((derevo -> LeftSon != NULL) && (derevo -> RightSon != NULL))
        {
            Tree* derevo1 = derevo -> RightSon;
            if(derevo1 -> LeftSon == NULL)
            {
                derevo -> Key = derevo1 -> Key;
                derevo -> RightSon = derevo1 -> RightSon;
                delete derevo1;
            }
            else
            {
                while (derevo1 -> LeftSon -> LeftSon != NULL) 
                    derevo1 = derevo1 -> LeftSon;
                derevo -> Key = derevo1 -> LeftSon -> Key;
                derevo1 -> LeftSon = NULL;
                delete derevo1 -> LeftSon;
            }
            return false;
        } else
            return true;
    }
    if (DeleteEl(derevo -> RightSon, del))
    {
        if (derevo -> RightSon -> RightSon == NULL )
            derevo -> RightSon = derevo -> RightSon -> LeftSon;
        else
            derevo -> RightSon = derevo -> RightSon -> RightSon;
        delete derevo -> RightSon;
        return false;
    }
    if (DeleteEl(derevo -> LeftSon, del))
    {
        if ( derevo -> LeftSon -> RightSon == NULL )
            derevo -> LeftSon = derevo -> LeftSon -> LeftSon;
        else
            derevo -> LeftSon = derevo -> LeftSon -> RightSon;
        delete derevo -> LeftSon;
        return false;
    }
    return false;
}
int main()
{
    int  Max(0);
    ifstream f1;
    ofstream f2;
    f1.open ("in.txt");
    f2.open ("out.txt");
    Tree* derevo = new Tree;
    derevo -> LeftSon = NULL;
    derevo -> RightSon = NULL;
    derevo -> L = 0;
    derevo -> R = 0;
    Input(f1, derevo);
    int temp=Obhod(derevo, Max);
    DeleteEl (derevo, temp);
    Output(derevo, f2);
    return 0; 
}
Добавлено через 1 час 15 минут
вся проблема в функции Input(скорее всего).

Добавлено через 19 часов 7 минут
ща посмотрел код,пришел к выводу, что не в input ошибка, а Obhod.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 00:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru