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

> Внимание!

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

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Поиск с включением, С\С++
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
Помогите, пожалуйста разобраться в чем у меня проблема.
Присоедини программу полностью, со ВСЕМИ входными данными (что, когда и как вводится и в каком порядке), тогда может что-нибудь и прояснится. А самому выдумывать, как именно ты заполняешь деревья, и при каких данных что-то там не работает - это несерьезно.
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 29.10.2020 12:53
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name