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

дерево - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Видео курс по С/С++ http://www.cyberforum.ru/cpp-beginners/thread346636.html
Дайти ссылки на нормальные видео уроки по С/С++. очень надо
C++ Составить блок схему по коду Люди кто может напишите плиз блок схему к этой программе, сам плохо понимаю #include <iostream> #include <fstream> #include <string> #include <iterator> using namespace std; void cp(ifstream... http://www.cyberforum.ru/cpp-beginners/thread346634.html
make_pair C++
Почему в функцию make_pair аргументы передаются не по ссылке? http://www.cplusplus.com/reference/std/utility/make_pair/
Сверхбольшие числа C++
Нужно например мне хранить и выполнять действия с числом 1 235 589 145 236 987 125 874 369 123 253 964 123 362 584 128 983 125 412 325 698 458 488 548, 152 Как это сделать, но так чтоб нечего...
C++ 2 вопроса http://www.cyberforum.ru/cpp-beginners/thread346548.html
Всем привет! У меня 2 глупых вопроса 1. Допустим, такой код int value() const { return m_nValue; } В чём смысл const?
C++ Синхронизация доступа Собственно есть массив структур. У данной структуры есть переменная, которая хранит состояние данной структуры(готова,не готова). В процессе работы приложение (многопоточное) циклично проверяет этот... подробнее

Показать сообщение отдельно
Shedrinr
0 / 0 / 0
Регистрация: 25.02.2011
Сообщений: 14

дерево - C++

30.08.2011, 16:20. Просмотров 586. Ответов 2
Метки (Все метки)

Сделал дерево, если его ветви создаются на стадии компиляции, то все работает нормально, но если их создает пользователь, то все ветви созданные пользователем принимают название последней созданной ветви.
Где бага?

сделал "ui": wasd - выбор ветви, n - добавить

tree.cpp:
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
#include<stdio.h>
#include<windows.h>
#include"myvector.cpp"
 
#ifndef _TREE_
#define _TREE_
 
 
class ITEM{
public:
    int parent,childs_total,id;
    MyVectorInt child_ids;
    int* values;
    char* name;
    char* iname;
    char string_value[500];
    char type[10];
    ITEM(){
        int i;
        parent=0;
        childs_total=0;
        id=0;
        for(i=0;i<50;i++)child_ids[i]=0;
    }
};
 
class TREE{
public:
    int current,total,curCh; 
    ITEM item[1000];
    TREE(){
        curCh=0;
        current=0;
        total=1;
        item[0].name="Root";
        item[0].childs_total=0;
        item[0].id=0;
    }
    int add(char* name1,int* value1,char* name2="|same|"){
        item[total].id=total;
        item[total].name=name1;
        
        item[total].iname=name2;
        if(name2=="|same|")item[total].iname=name1;
        item[total].values=value1;
        item[total].parent=current;
        item[current].child_ids[item[current].childs_total]=total;
        item[current].childs_total++;
        total++;
        return total-1;
    }
    void up(){
        if(current)
        current=item[current].parent;
    }
    void down(int child_to){
        if(item[current].childs_total){
            if(child_to<0)child_to=item[current].childs_total-child_to;
            child_to=child_to%item[current].childs_total;
            if(child_to<item[current].childs_total)
            current=item[current].child_ids[child_to];
        }
    }
    int down(char* name){
        int i=0;
        for(i=0;i<item[current].childs_total;i++){
            if(item[item[current].child_ids[i]].iname==name){
                current=item[current].child_ids[i];
                return item[current].child_ids[i];
            }
        }
    }
    void right(){
        up();
        curCh++;
        down(curCh);
    }
    void left(){
        up();
        curCh--;
        down(curCh);
    }
    void select(int id){
        current=id;
    }
    void show(int from=0,int deep=0){
        int cur,i;
        cur=from;
        for(i=0;i<deep-1;i++)
                printf("     ");
        if(deep)printf("АДДД");
        if(cur==current)printf("<-");
        printf("%s[%d]",item[cur].name,cur);
        if(cur==current)printf("->");
        printf("\n");
        if(item[cur].childs_total){
            for(i=0;i<item[cur].childs_total;i++){
                show(item[cur].child_ids[i],deep+1);
            }
        }
        
    }
 
    void rename(char* newName){
        item[current].name=newName;
    }
 
    void reiname(char* newName){
        item[current].iname=newName;
    }
};
 
#endif
myvector.cpp:

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
#include<stdio.h>
#include<new>
 
#ifndef _MyVec_
#define _MyVec_
 
 
typedef int DT;
class MyVectorInt{
public:
    DT* mass;
    int memEl,memBy,grow;
 
    MyVectorInt( int grow = 5 ) : grow( grow )
    {
        try{
        mass=new DT[grow];
        }catch(std::bad_alloc){
        printf("Can not create vector");
        }
        memEl=0;
        memBy=0;
    }
 
    ~MyVectorInt(){
        delete[] mass;
    }
 
    void resize(int size){
        int* mass2;
        int i=0,cpysize;
        if(size<memEl)cpysize=size;
        else cpysize=memEl;
        try{
            mass2=new DT[size];
            memcpy(mass2,mass,cpysize*sizeof(DT));
            delete[] mass;
            mass=mass2;
            memEl=size;
            
        }catch(std::bad_alloc){
        printf("Can not resize");
        }
    }
 
    DT& operator[](int i){
        if(i<memEl)return mass[i];
        else {
            resize(i+grow);
            return mass[i];
        }
        
    }
};
class ITEM;
typedef ITEM DT2;
class MyVectorItem{
public:
    DT* mass;
    int memEl,memBy,grow;
 
    MyVectorItem( int grow = 5 ) : grow( grow )
    {
        try{
        mass=new DT[grow];
        }catch(std::bad_alloc){
        printf("Can not create vector");
        }
        memEl=0;
        memBy=0;
    }
 
    ~MyVectorItem(){
        delete[] mass;
    }
 
    void resize(int size){
        int* mass2;
        int i=0,cpysize;
        if(size<memEl)cpysize=size;
        else cpysize=memEl;
        try{
            mass2=new DT[size];
            memcpy(mass2,mass,cpysize*sizeof(DT));
            delete[] mass;
            mass=mass2;
            memEl=size;
            
        }catch(std::bad_alloc){
        printf("Can not resize");
        }
    }
 
    DT& operator[](int i){
        if(i<memEl)return mass[i];
        else {
            resize(i+grow);
            return mass[i];
        }
        
    }
};
 
#endif
ui.cpp:

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
#include<stdio.h>
#include <conio.h>
#include<windows.h>
#include"tree.cpp"
#include <string.h>
 
 
 
 
 
 
 
void main(){
    printf("1");
    TREE tree;
    int i,curCh=0;
    int version=10;
    char io='0';
    char name[50];
 
    tree.select(tree.add("Me",0));
    tree.add("Mum",0);
    tree.select(tree.add("Dad",0));
    tree.add("grandmum(d)",0);
    tree.add("grandpa(d)",0);
    tree.up();
    tree.down("Mum");
    tree.add("grandmum(M)",0);
    tree.add("grandpa(M)",0);
 
    do{
        switch(io){
            case 'a':tree.up();break;
            case 'd':tree.down(curCh);break;
            case 'w':{
                        tree.right();
                        }break;
            case 's':{
                        tree.left();
                        }break;
            case 'n':{
                        printf("Name?\n");
                        scanf("%s",name);
                        tree.add(name,0);
                        }break;
        }
    system("cls");
    tree.show(0);
    io=getch();
    }while(io!=27);
 
    
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru