IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> Поиск с включением, С\С++
ALma
сообщение 16.10.2009 19:19
Сообщение #1





Группа: Пользователи
Сообщений: 7
Пол: Женский

Репутация: -  0  +


Собственно в чем проблема. Имеется бинарное дерево с элементом, содержащим поля
const d_n=30; // длина имени
const d_p=10; //длина названия профессии


struct worker {
int numt; //табельный номер
char FIO[d_n];
int year; //год рождения
int sex; //пол
char prof[d_p]; //профессия
int staj, //стаж
    numc, // номер цеха
    numu; //номер участка
float summa; //зарплата
worker* next;};

struct node { // узел дерева
worker data;
node* left;
node* right;
};


Это бинарное дерево надо обработать и представить в виде другого дерева с элементом, содержащим поля

struct spisok{
int numc, //номер цеха
     man,//количество мужчин
   woman;//количество женщин
float sm,//зарплата мужчин
      sw;//зарплата женщин
};

struct node_2{
spisok tabl;
node_2* left;
node_2* right;};


Я для этой обработки пытаюсь использовать поиск с включением, собственно вот функция

node_2* searchA(node *top, node_2 *root){
if (root==NULL)
{root= new node_2;
root->tabl.numc=top->data.numc;
 if (top->data.sex==1)
  {root->tabl.man=1;
root->tabl.sm=top->data.summa;
root->tabl.woman=0;
root->tabl.sw=0;}
else {root->tabl.woman=1;
root->tabl.sw=top->data.summa;
root->tabl.man=0;
root->tabl.sm=0;}
root->left=root->right=NULL;}

else if(top->data.numc<root->tabl.numc) searchA(top, root->left);
	else if (top->data.numc>root->tabl.numc) searchA(top, root->right);
	       else if (top->data.sex==1)
 {root->tabl.man++;
root->tabl.sm+=top->data.summa;}
else {root->tabl.woman++;
root->tabl.sw+=top->data.summa;}

return root;}


Частично функция работает. То есть поля заполняются. Но идея поиска с включением не выполняется. То есть если находится узел дерева с таким же значением номера цеха, то он добавляется еще раз( а не меняются значение полей с зарплатами)

Эта функция вызывается у меня в обходе дерева

void obhod (node *top)
{
 if(top){
obhod(top->left);
p= new node_2;
p=root;
root=searchA(top,p);
prosmotr_spisok(root);
obhod(top->right);
}
}


при вызове prosmotr_spisok(root); печатается только элемент с минимальным номером цеха. правда печатается несколько раз.
Помогите, пожалуйста разобраться в чем у меня проблема.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 29.07.2025 4:31
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"