Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Sincendia

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

08.01.2010, 03:53. Показов 812. Ответов 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 минуты
А тот мальчик, который мне это вс прислал не отвечает, я думала сама разберусь, но не смогла. Я плохо понимаю синтаксис языка и сам принцип построения структуры дерева
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.01.2010, 03:53
Ответы с готовыми решениями:

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

Разобраться в полностью готовом коде WinForms
Проект: Помогите, пожалуйста, разобраться в готовом коде. Когда открываю проект, выходит меню....

Нужно разобраться в готовом матлабовском коде
Здравствуйте, уважаемые форумчане. Помогите бедной студентке :) Есть курсовая по матлабу, есть уже...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.01.2010, 03:53
Помогаю со студенческими работами здесь

Стек. Помочь разобраться в коде
Ребят есть код,не могу понять некоторые строчки, что такое aSt.Pnt ?зачем это ast.Для чего нужен...

Ошибка в готовом коде
Добрый день! Мне сказали, что в каком-то из нижеприведенных кусков кода есть ошибка. Я пробую и...

Исправление ошибки в готовом коде
Дано натуральное число N. Получить все натуральные числа, меньшие N и взаимно простые с ним. По...

Посмотрите ошибки в готовом коде (Массивы)
Код готовый, посмотрите пожалуйста недочеты и красоту. Задание: Дан массив A(n), разработать...

Изменить регулярное выражение в готовом коде
Есть такой код: var matches = Regex.Matches(resultHttpGet,@&quot;+&quot;).Cast&lt;Match&gt;().Select(match =&gt;...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru