Форум программистов, компьютерный форум 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 &f, ofstream &t){ string s( (istreambuf_iterator<char>(f)), istreambuf_iterator<char>() ); t << s; http://www.cyberforum.ru/cpp-beginners/thread346634.html
Как пользоваться функциями OemToChar/CharToOem? C++/CLI
Добрый день! Подскажите пожалуйста, как пользоваться функцией OemToChar/CharToOem? Добавлено через 1 минуту Лучше с примером
make_pair C++
Почему в функцию make_pair аргументы передаются не по ссылке? http://www.cplusplus.com/reference/std/utility/make_pair/
C++ Сверхбольшие числа http://www.cyberforum.ru/cpp-beginners/thread346569.html
Нужно например мне хранить и выполнять действия с числом 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 вопроса Всем привет! У меня 2 глупых вопроса 1. Допустим, такой код int value() const { return m_nValue; } В чём смысл const? подробнее

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

дерево - C++

30.08.2011, 16:20. Просмотров 534. Ответов 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);
 
    
 
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 19:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru