Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
sever1313
0 / 0 / 1
Регистрация: 23.11.2009
Сообщений: 61
1

Процедура не возвращает значение

08.03.2011, 23:37. Просмотров 1073. Ответов 3
Метки нет (Все метки)

Проблема вот в чем,в одной процедуре создаётся дерево оптимального поиска,а в другой происходит добавление вершины в дерево.Делала по алгоритму с методички.
Проблема в том что в процедуру add_tree не возвращается полученное значение root ,оно становится процедуре create_tree снова пустым.
Пошагово тоже проверяла,результата никакого.Помогите разобраться.
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
ptree *NewNode(char k)
{
    ptree *p = (ptree*)malloc(sizeof(ptree));   // ўл¤Ґ«Ёвм Ї*¬пвм
    p->data = k;                            // ¤***лҐ 
    return p;
}
ptree * add_tree(ptree *root, char info)
{
    ptree **p;
    p=&root;
    
    while((*p)!=NULL) 
    {
        if ((*p)->data > info)
        {   
            p=&(*p)->Left;
            cout<<(*p)->data;
        }
        else
        {
            if ((*p)->data < info )
            {
                p=&(*p)->Right;
            }
            else
            {
                 break; 
            }
        }
    }
    if((*p)==NULL)
     {
         *p=NewNode(info);
         //return *p;
     }
    
     return root=*p;
}
void create_tree(ptree *root,vertex *arr,int kolvo)
{
    int max;
    int i,j,index;
    root= NULL;
    
    int nomer ;
    max = 0;
        nomer = 0;
    for(i=0;i<kolvo;i++) 
    {
        arr[i].use=false;
    }
    for(i=0;i<kolvo;i++)
    {
        max = 0;
        nomer = 0;
        for(j=0;j<kolvo;j++)
        {
            if((arr[j].ves > max)&&(arr[j].use==false))
            {
                max=arr[j].ves;
                nomer=j;
            }
        }
        arr[nomer].use=true;
        add_tree(root,arr[nomer].inf);//в этом месте значение снова становится ноль.проверяла пошагово
        
    }
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.03.2011, 23:37
Ответы с готовыми решениями:

Написать функцию Factorial, которая возвращает значение значение факториала целого числа.
Помогите, пожалуйста, написать функцию Factorial, которая возвращает значение...

Функция не возвращает значение
int main() { // ... int words=my_strtok(); //.... } int my_strtok() {...

Почему операция ~0>>1 возвращает значение -1?
ПОчему операция ~0&gt;&gt;1 возвращает значение -1, не зависимо от того, что стоит...

Программа не возвращает значение массива
Здравствуйте! Не подскажете неопытному, почему программа не возвращает...

Какое значение возвращает функция?
здравствуйте, есть функция: int descending (int a, int b){ return (a&lt;b);...

3
accept
4833 / 3255 / 455
Регистрация: 10.12.2008
Сообщений: 10,569
09.03.2011, 04:58 2
C
1
2
    p->data = k;
    return p;
надо обнулить сыновей
0
sever1313
0 / 0 / 1
Регистрация: 23.11.2009
Сообщений: 61
09.03.2011, 10:52  [ТС] 3
Обнулила,ничего не помогло((
0
accept
4833 / 3255 / 455
Регистрация: 10.12.2008
Сообщений: 10,569
10.03.2011, 03:15 4
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

C
1
void create_tree(ptree *root,vertex *arr,int kolvo)
надо возвращать дерево

так
C
1
ptree *create_tree(ptree *root,vertex *arr,int kolvo)
или так
C
1
void create_tree(ptree **root,vertex *arr,int kolvo)
C
1
ptree * add_tree(ptree *root, char info)
это тоже

C
1
void add_tree(ptree **root, char info)
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
void add_tree(ptree **root, char info)
{
    ptree *p;
 
    if (*root == NULL) {
        *root = NewNode(info);
        return;
    }
    p = *root;
    while (p != NULL)
        if (p->data >= info) {
            if (p->Left == NULL) {
                p->Left = NewNode(info);
                return;
            }
            p = p->Left;
        } else {
            if (p->Right == NULL) {
                p->Right = NewNode(info);
                return;
            }
            p = p->Right;
        }
}
C
1
add_tree(root, arr[nomer].inf)
root подаётся таким образом, если он ptree **root
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.03.2011, 03:15

Как функция возвращает значение int?
Доброго времени суток, собственно, как функция возвращает значение int?...

Стандартная функция fopen возвращает не NULL и не значение
Ребят тока начинаю писать на си юзаю fopen, но она возвращает 0xcccccc, т.е....

Что происходит, когда функция возвращает значение?
Здравствуйте! Ответьте, пожалуйста, на такой вопрос: есть некая функция,...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru