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

C++, Помочь разобраться в готовом коде - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Чем же макрос define так плох? http://www.cyberforum.ru/cpp-beginners/thread83545.html
После прочтения про директиву препроцессора define возник вопрос по поводу применения define, как функции: #define QQ (q) (q^q) Можно же улучшить читаемость кода, используя вместо функций именно директиву define. Или у данного использования макроса есть подводные камки какие-то? Да и объем кода в разы сократиться, так как для define будет достаточно всего-навсего одной строчки.
C++ begin Люди, я собираюсь научиться программировать на Си,подскажите, с чего лучше всего начать в C++, и в какой среде мне будет проще обучаться программировать (Visual C++, Microsoft Visual Studio C++, C++ Builder и т.д.)??? Заранее благодарен! http://www.cyberforum.ru/cpp-beginners/thread83539.html
Как передать вектор из main() во внутреннюю функцию ? C++
Нужно передать вектор из main в функцию gen_binar_sq , записать в него элементы, и получить в main заполненый вектор и распечатать элементы. #include <stdio.h> #include <stdlib.h> #include <math.h> #include <time.h> #include <cctype> #include <iostream> #include <vector>
Функция: удаление узла дерева со всеми потомками C++
подскажите код функции которая удаляет элемент дерева со всеми его потомками NODE *SEARCH(char *key, NODE *root) { NODE *cur=root; if(cur==NULL) { cout<<"\n Data Base is empty."; return cur; }
C++ Определение заглавных букв в файле. http://www.cyberforum.ru/cpp-beginners/thread83522.html
Нужна программа на Си которая определяет слово с самым большим количеством заглавных букв(если таковых много, следует выдать их все).Помогите пожалуйста.Заранее благодарен.
C++ Отличие С от С++ В чем отличие языка С от С++ подробнее

Показать сообщение отдельно
Sincendia
Сообщений: n/a
08.01.2010, 03:53     C++, Помочь разобраться в готовом коде
Здравствуйте, я заказала по интернету код программы для решения следующей задачи:
В задании курсового проекта необходимо создать программу, которая содержит текущую информацию о книгах в библиотеке. Сведения включают:
• Номер УДК
• Фамилию и инициалы автора
• Название книги
• Год издания
• Количество экземпляров
Программа должна обеспечивать:
• Начальное формирование данных обо всех книгах в библиотеке в виде двоичного дерева
• Добавление данных о книгах, вновь поступающих в библиотеку
• Удаление данных о списанных книгах
• По запросу выдаются сведения о наличии книг в библиотеке, упорядоченные по годам
У меня уже есть готовый код, но некоторые вещи мне в нем непонятны (мне нужно делать структурные схемы алгоритмов). Пожалуйста, помогите перевести код с С++ на русский язык или хотя бы сделать его схему) Особенно интересно понять для чего нужны все функции, использованные в программе (incer, printT...) и как они работают. Вот собственно код:
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <alloc.h>
//using namespace std;
 
struct node{
    int udk;
    char fio[25];
    char naz[25];
    int god;
    int kol;
    node *l,*r;
};
 
node *first(int udk,char fio[25],char naz[25],int god,int kol);
void printT(node *root,int l);
void incer(node **root, int udk,char fio[25],char naz[25],int god,int kol);
void printT(node *root);
node *delet(node *root,int udk,char fio[25],char naz[25],int god,int kol);
void delall(node **root);
int main(){
    //a) Начальное формирование данных обо всех книгах в виде двоичного дерева
    node *root=first(123,"Petrov I. G","cxemotexnika",2000,55);
    char c;
    int udk;
    char fio[25];
    char naz[25];
    int god;
    int kol;
    incer(&root,123,"Petrov I. G.","cxemotexnika",2000,5);
    incer(&root,125,"Ivanov D. A.","CeTu komp",1999,20);
    incer(&root,127,"Sidorov A.L.","zashita inf",1998,33);
    incer(&root,56,"Ivanov D. A","matan vish",2003,56);
    incer(&root,57,"Ivanov T. H.","algebra i GAG",1998,7);
    incer(&root,128,"Kyzmeko E.P.","komp. grafika",2000,40);
    incer(&root,134,"Petrov I. G","cxemotexnika",2000,210);
llp:cout<<"vivod vvide dereva: "<<endl;
    cout<<endl;
    printT(root,0);
    cout<<endl;
    cout<<"vivod otsortirovannogo po godu: "<<endl;
    cout<<endl;
    cout<<"UDK"<<"\t"<<"FIO\t"<<"\t"<<"NAZVANIE"<<"\t"<<"GOD"<<"\t"<<"KOLICHESTVO"<<endl;
    printT(root);
    cout<<endl;
lop:cout<<"vvedi nomer punkta menu i nazhmi <ENTER>: "<<endl<<
        "\t1 - dobavit' knigu"<<endl<<
        "\t2 - cpisat'knigu"<<endl<<
        "\t3 - vivod knig,uporyadochennih po godam"<<endl<<
        "\t4 - y9aJIeHue 9epeBa"<<endl<<
        "\t5 - vihod iz programmi"<<endl;
    cin>>c;
    switch(c){
        case '1':
            //б) Добавление данных о книгах, вновь поступивших в библиотеку
            cout<<"UDK :";cin>>udk;cin.get();
            cout<<"FIO :";cin.getline(fio,255);
            cout<<"NAZVANIE :";cin.getline(naz,255);
            cout<<"GOD :";cin>>god;
            cout<<"KOLICHESTVO :";cin>>kol;
            incer(&root,udk,fio,naz,god,kol);
        goto lop;
        case '2':
            //в) Удаление данных о списанных книгах
            cout<<"UDK :";cin>>udk; cin.get();
            cout<<"FIO :";cin.getline(fio,255);
            cout<<"NAZVANIE :";cin.getline(naz,255);
            cout<<"GOD :";cin>>god;
            cout<<"KOLICHESTVO :";cin>>kol;
            delet(root,udk,fio,naz,god,kol);
        goto lop;
        case '3':
        //г) По запросу выдаются сведения о наличии книг в библиотеке, упорядоченные по годам
        goto llp;
        case '4':
            delall(&root);
        goto lop;
        case '5':
        break;
    }
    return 0;
}
node *first(int udk,char fio[25],char naz[25],int god,int kol){
    node *pv=new node;
    pv->udk=udk;
    strcpy(pv->fio,fio);
    strcpy(pv->naz,naz);
    pv->god=god;
    pv->kol=kol;
    pv->l=pv->r=0;
    return pv;
}
void printT(node *p,int level){
    if(p){
        printT(p->l,level+1);
        for(int i=0;i<level;i++)
            cout<<"\t";
        cout<<p->udk<<" - "<<p->fio<<" - "<<p->naz<<" - "<<p->god<<" - "<<p->kol<<endl;
        printT(p->r,level+1);
    }
}
void printT(node *p){
    if(p){
        printT(p->l);
        //cout<<p->udk<<"\t"<<p->fio<<"\t"<<p->naz<<"\t"<<p->god<<"\t"<<p->kol<<endl;
        printf("%3i\t", p->udk);
        printf("%8s\t", p->fio);
        printf("%8s\t", p->naz);
        printf("%4i\t", p->god);
        printf("%4i\t", p->kol);
        printf("\n");
        printT(p->r);
    }
}
void incer(node **pv, int udk,char fio[25],char naz[25],int god,int kol){
    if(!(*pv)){
        node *pnew=new node;
        pnew->udk=udk;
        strcpy(pnew->fio,fio);
        strcpy(pnew->naz,naz);
        pnew->god=god;
        pnew->kol=kol;
        pnew->l=pnew->r=0;
        (*pv)=pnew;
    }
    else if(udk==(*pv)->udk&&!strcmp(fio,(*pv)->fio)&&!strcmp((*pv)->naz,naz)&&god==(*pv)->god)
        (*pv)->kol+=kol;
    else if((*pv)->god > god)
        incer(&((*pv)->l),udk,fio,naz,god,kol);
    else
        incer(&((*pv)->r),udk,fio,naz,god,kol);
}
node *delet(node *root,int udk,char fio[25],char naz[25],int god,int kol){
    node *P=new node, *v=new node;
    if (!root) 
        cout << "net takou knigi" << endl;
    else if(udk==root->udk&&!strcmp(fio,root->fio)&&!strcmp(root->naz,naz)&&god==root->god){
        if(kol>=root->kol){
            if (!root->r) 
                root = root->l; 
            else 
                if (!root->l) root = root->r; 
                else{
                    v = root->l;
                    while (v->r->r) 
                        v=v->r; 
                    root->udk=v->r->udk;
                    strcpy(root->fio,v->r->fio);
                    strcpy(root->naz,v->r->naz);
                    root->god=v->r->god;
                    root->kol=v->r->kol;
                    P = v->r; v->r = v->r->l;
                }
            free(P);
        }
        else
            root->kol-=kol;
    }
    else if (god < root->god) root->l = delet(root->l,udk,fio,naz,god,kol);
    else if (god >= root->god) root->r = delet(root->r,udk,fio,naz,god,kol);
    return root;
}
void delall(node **p){
    if (!(*p)) return;
    delall(&((*p)->l));
    (*p)->l = NULL;
    delall(&((*p)->r));
    (*p)->r = NULL;
    (*p)=0;
}
Добавлено через 2 минуты
А тот мальчик, который мне это вс прислал не отвечает, я думала сама разберусь, но не смогла. Я плохо понимаю синтаксис языка и сам принцип построения структуры дерева
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 15:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru