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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Sincendia
0 / 0 / 0
Регистрация: 04.01.2010
Сообщений: 1
#1

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

08.01.2010, 03:53. Просмотров 537. Ответов 0
Метки нет (Все метки)

Здравствуйте, я заказала по интернету код программы для решения следующей задачи:
В задании курсового проекта необходимо создать программу, которая содержит текущую информацию о книгах в библиотеке. Сведения включают:
• Номер УДК
• Фамилию и инициалы автора
• Название книги
• Год издания
• Количество экземпляров
Программа должна обеспечивать:
• Начальное формирование данных обо всех книгах в библиотеке в виде двоичного дерева
• Добавление данных о книгах, вновь поступающих в библиотеку
• Удаление данных о списанных книгах
• По запросу выдаются сведения о наличии книг в библиотеке, упорядоченные по годам
У меня уже есть готовый код, но некоторые вещи мне в нем непонятны (мне нужно делать структурные схемы алгоритмов). Пожалуйста, помогите перевести код с С++ на русский язык или хотя бы сделать его схему) Особенно интересно понять для чего нужны все функции, использованные в программе (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 минуты
А тот мальчик, который мне это вс прислал не отвечает, я думала сама разберусь, но не смогла. Я плохо понимаю синтаксис языка и сам принцип построения структуры дерева
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.01.2010, 03:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос C++, Помочь разобраться в готовом коде (C++):

Помогите разобраться в готовом листинге... - C++
Вот листинг(из книжки) он разбивает файл на части по 1000 строк...проблема в том что нет коментариев(а очень нужны)....помогите...

Работа с файловыми потоками. Выполнить проверку в готовом коде на верхний регистр - C++
Хотел бы обратиться к аудитории этого сайта с данной проблемой-в программе, которую я написал, не выполняется одно условие-не проверяется...

Хотел бы попросить помочь разобраться в куске кода - C++
Всю программу приводить смысла нету, программа представляет собой интерпретатор формул на с++. Есть файл, в котором определены лексемы,...

Написать функцию вставки элемента в массив. Помочь разобраться - C++
Приветствую всех. Написать функцию вставки элемента в массив. Все элементы после него сдвигаются на один вправо, а последний элемент...

Помочь разобраться с программой. Написать функцию вставки элемента в массив - C++
Здравствуйте. Можете помочь разобраться в программе? Ну хоть комментарии какие поставить.. Заранее спасибо. Написать функцию вставки...

Разобраться в коде - C++
Алгоритм сортирует элементы матрицы согласно схеме (см. изображение), в порядке убывания и методом пузырька. Происходит движение: 1) вниз...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.01.2010, 03:53
Привет! Вот еще темы с ответами:

Разобраться с ошибками в коде - C++
что я делаю неправильно вот код программы #include &lt;iostream.h&gt; #include &lt;string.h&gt; #include &lt;conio.h&gt; int main () { ...

Не могу разобраться в коде - C++
На просторах форума нашёл полезный для меня код, но не понимаю ничего, что написанно в циклах ниже 33 строки (там где подцикл...

Не могу разобраться в коде - C++
Всем дня доброго.В плюсах я ровным счетом 0.Расшифровать по нормальному не могу.Отрывок из кода описывающего программы шахматы. bool...

Нужно разобраться в коде - C++
Написать программу, которая в произвольном текстовом файле определяет количество предложений и слов, строчных и заглавных символов, знаков...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.