Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите разобраться в коде программы 
V
    Опции темы
sincendia
  Дата 8.1.2010, 04:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 8.1.2010

Репутация: нет
Всего: нет



Здравствуйте, очень прошу помочь разобраться в коде программы.
Я заказала готовый код программы (turbo C++ 3) для решения задачи (описываю ниже), но некоторые вещи мне в нем непонятны (мне нужно делать структурные схемы алгоритмов). Пожалуйста, помогите перевести код с С++ на русский язык или хотя бы сделать его схему) Особенно интересно понять для чего нужны все функции, использованные в программе (incer, printT...), как они работают, для чего нужны некоторые переменные. 
А тот мальчик, который мне это всё прислал не отвечает, я думала сама разберусь, но не смогла. Я плохо понимаю синтаксис языка и сам принцип построения структуры двоичного дерева.
Задача
В задании курсового проекта необходимо создать программу, которая содержит текущую информацию о книгах в библиотеке. Сведения включают:
• Номер УДК
• Фамилию и инициалы автора
• Название книги
• Год издания
• Количество экземпляров
Программа должна обеспечивать:
• Начальное формирование данных обо всех книгах в библиотеке в виде двоичного дерева
• Добавление данных о книгах, вновь поступающих в библиотеку
• Удаление данных о списанных книгах
• По запросу выдаются сведения о наличии книг в библиотеке, упорядоченные по годам
Вот собственно код:
Код
#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©{
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;
}



Модератор: не забываем пользоваться кнопочкой "Код"

Это сообщение отредактировал(а) bsa - 10.1.2010, 17:35
PM MAIL   Вверх
fry
Дата 8.1.2010, 05:01 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 4.10.2006

Репутация: 2
Всего: 3



Сначала лучше синтаксис понять. Половина вопросов по функциям сразу отпадут сами собой.
Для этого нужен самоучитель с названием по типу "С++ для чайников", "с++ за 1 день" и т.д. и денек времени.
Если чего не понятно в алгоритме попробуй нарисовать его на бумаге, т.е. посмотреть как он работает описав каждый шаг в "ручном режиме". Понимание не заставит себя долго ждать.

Это сообщение отредактировал(а) fry - 8.1.2010, 05:03
PM MAIL   Вверх
sincendia
Дата 8.1.2010, 05:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 8.1.2010

Репутация: нет
Всего: нет



Я синтаксис понимаю на уровне "все, что не касается структур и классов". Всякие там циклы, условия и самое простое я в курсе. Я читала книжки, но в общем виде не понимаю. Тем более код чужой, вдвойне сложнее, что вот он имел ввиду под переменными l, r, p, v, pv? Это вообще непонятно... Может поможете хотя бы в этом? Понять, для чего какая переменная хотя бы, исходя из логики программы. Очень прошу, помогите! или хотя бы как пример объясните вот этот кусок, как можно подробнее: 

Код
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;
}


Добавлено @ 05:15
и что означает запись (в начале):
node *first(int udk,char fio[25],char naz[25],int god,int kol);
и далее в главной функции:
node *root=first(123,"Petrov I. G","cxemotexnika",2000,55);
?


Это сообщение отредактировал(а) bsa - 10.1.2010, 17:36
PM MAIL   Вверх
andrew_121
Дата 8.1.2010, 05:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Цитата(fry @  8.1.2010,  05:01 Найти цитируемый пост)
с++ за 1 день"

это рекорд!

Добавлено @ 05:30
Цитата(sincendia @  8.1.2010,  05:13 Найти цитируемый пост)
и что означает запись (в начале):
node *first(int udk,char fio[25],char naz[25],int god,int kol);

декларация функции.

Цитата(sincendia @  8.1.2010,  05:13 Найти цитируемый пост)
и далее в главной функции:
node *root=first(123,"Petrov I. G","cxemotexnika",2000,55);

вызов этой же функции.

Добавлено @ 05:35
Код

void incer(node **pv, int udk,char fio[25],char naz[25],int god,int kol){
   if( 0 == (*pv)) { /* проверка, на null */
      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; /* добавляем к дереву только что созданный нод */
   }
}


Это сообщение отредактировал(а) andrew_121 - 8.1.2010, 05:37


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
sincendia
Дата 8.1.2010, 05:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 8.1.2010

Репутация: нет
Всего: нет



Простите за глупый вопрос, но что значит "инициализация поля?" 

Это сообщение отредактировал(а) sincendia - 8.1.2010, 05:45
PM MAIL   Вверх
fry
Дата 8.1.2010, 05:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 4.10.2006

Репутация: 2
Всего: 3



Цитата

Код

void incer(node **pv, int udk,char fio[25],char naz[25],int god,int kol){ //Создание узла (информация о конкретной книге)
if(!(*pv)){                        // Целевой узел (где создаем запись), условие: if(если он не существует)...
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;                    // Инициализируем pv вновь созданным узлом с информацией о книге
}



Цитата

и что означает запись (в начале):
node *first(int udk,char fio[25],char naz[25],int god,int kol);

Объявление функции.

Цитата

и далее в главной функции:
node *root=first(123,"Petrov I. G","cxemotexnika",2000,55);

создание корневого узла. Из него "растет" дерево.

Цитата

Зачем тут endl? 

end line вестимо. Это перевод строки.

ЗЫ Код как с бодуна написан. Вывод: мальчика, точнее код, побоку.

Это сообщение отредактировал(а) fry - 8.1.2010, 05:48
PM MAIL   Вверх
sincendia
Дата 8.1.2010, 05:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 8.1.2010

Репутация: нет
Всего: нет



Большое спасибо за разъяснение! Код мне самое не нравится, нет бы каждое действие по функциям расписать.. а тут все попросту не по порядку (компилятору то на это пофигу, а вот мне нет). 
fry, Было бы так здорово если бы Вы смогли также прокомментировать и остальной код. Времени разбираться совсем нет, а для составления схемы пойдет (да и для оптимизации методом копи-паст)
PM MAIL   Вверх
andrew_121
Дата 8.1.2010, 05:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Цитата(sincendia @  8.1.2010,  05:42 Найти цитируемый пост)
Простите за глупый вопрос, но что значит "инициализация поля?" 

нод - это некая структура. у нее есть поля(данные). присваивание им значений = инициализация(гуру, прошу не придираться! в контексте ТС, такой ответ весьма точен).


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
fry
Дата 8.1.2010, 06:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 4.10.2006

Репутация: 2
Всего: 3



Цитата

Код мне самое не нравится

Это уже хорошо.

Цитата

Было бы так здорово если бы Вы смогли также прокомментировать и остальной код.

От этой мысли меня бросает в дрожь.  smile 
Если серьезно, то лучше отвечать на конкретные вопросы.

На самом деле алгоритм весьма прост. Прокомментированная мной функция "смотрит" есть ли в целевом узле информация, другими словами он вообще существует или нет, если нет, то создает там объект с информацией о книге, если существует, то рекурсивно вызывает ту же функцию для левой и правой ветки. Функция удаления работает точно также, только вместо создания организует рекурсивное удаление объектов дерева. Функция first создает объект типа node (чем должен заниматься, по хорошему его конструктор). PrintT выводит данные обходя дерево также как и описанные выше функции. Смысл printT c level'ом я ч-то не очень понял. DelAll вообще штука, по моему, непонятная (читай не нужная). Эта функция просто приравнивает все указатели на объекты значению NULL (или 0 если так легче), но никак не "удаляет все".

Это сообщение отредактировал(а) fry - 8.1.2010, 06:27
PM MAIL   Вверх
sincendia
Дата 8.1.2010, 06:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 8.1.2010

Репутация: нет
Всего: нет



Тогда я попробую сформулировать вопросы
1. Зачем два раза инициализируется одна и та же функция в двух вариантах. Что здесь означает level?
Код

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);
    }

2. Первую часть кода функцию incer я из объяснений поняла, а что делает вторая (после else)?
Код

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);
}

3. Кусок с удалением дерева и списания книги для меня вообще темный лес=(((
Код

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;
}


4. Как работает функция incer после введения данных о книгею Что значит cin.getline(fio, 255) и cin.get();? Не проще ли было заполнять данные прямо в функции, а не до нее?
Код

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);

5. И если можно какие нибудь советы по составлению схемы и\или оптимизации кода.
Заранее спасибо
PM MAIL   Вверх
fry
Дата 8.1.2010, 06:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 4.10.2006

Репутация: 2
Всего: 3



Цитата

Первую часть кода функцию incer я из объяснений поняла, а что делает вторая (после else)?

Рекурсивно ищет пустое место для того, чтобы записать информацию.

Цитата

Что значит cin.getlinе......

результат гугления: http://programmersclub.ru/33/

Цитата

И если можно какие нибудь советы по составлению схемы и\или оптимизации кода.

Единственный реальный совет: когда разберешься как это работает, перепиши сама и поймешь, что написанное ни есть гуд.

ЗЫ алгоритм работы всей программы в кратце расписал в предыдущем посте.

Это сообщение отредактировал(а) fry - 8.1.2010, 06:24
PM MAIL   Вверх
sincendia
Дата 8.1.2010, 06:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 8.1.2010

Репутация: нет
Всего: нет



Еще вопросики. Только не ругайтесь... Для чего в описании incer исползуется двойной указатель (на root)
Код

void incer(node **root, int udk,char fio[25],char naz[25],int god,int kol);

и как следствие в ее выполнении берется адрес root. я вот не совсем понимаю самого приципа с этими чертовыми указателями.
Код

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);

что означают void или node в описании функций? (понимаю, что node это структура. а void это че то пустое). почему если исп-ся node, перед названием функции используется указатель?
Код

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);


Добавлено через 5 минут и 11 секунд
Зачем нужны указатели на l и r?
Код

struct node{
    int udk;
    char fio[25];
    char naz[25];
    int god;
    int kol;
    node *l,*r;
};


Добавлено через 7 минут и 31 секунду
или даже не знаю.. я так то изначально сама программу хотела писать, но не нашла, как строить двоичное дерево и как с ним работать. Не объясните как? Или мб какие-нибудь ссылки

Добавлено через 10 минут и 3 секунды
Хотя и на этом огромное спасибо. Много стало более понятным! :-* Еще бы чуть чуть разобраться...
Хотела задать еще один глупый вопрос: Что делает оператор ->? Только попроще

Это сообщение отредактировал(а) sincendia - 8.1.2010, 06:28
PM MAIL   Вверх
fry
Дата 8.1.2010, 06:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 4.10.2006

Репутация: 2
Всего: 3



Цитата

Еще вопросики. Только не ругайтесь... 

Даже и не думал.  smile 

Цитата

Для чего в описании incer исползуется двойной указатель (на root)

"Двойной указатель":
- Если объект передается не через указатель, то создается его копия, т.е. все изменения не затрагивают исходный объект, который "передавался" в функцию.
- Если передается указатель на объект, то функция "работает" не с копией объекта, а с самим объектом.
- Если используется указатель на указатель, то это означает, что функция может изменять как сам объект, так и указатель, который на него указывает, т.е. это просто вариант передачи указателя с целью его изменения.

Конкретно в incer он используется для инициализации (создания) объекта node при условии, что переданный в нее указатель на объект ссылается на NULL, т.е. сам объект не существует.

Цитата

и как следствие в ее выполнении берется адрес root.

При том, что 
Код

node *root

, то - да, указатель на root.

Цитата

я вот не совсем понимаю самого приципа с этими чертовыми указателями.

гугл, гугл и еще раз гугл.

Цитата

что означают void или node в описании функций?

Неопределенный тип или "ничего". Если функция возвращает void, то считай, что она вообще ничего не возвращает.
node - это структура, описанная в начале, содержит данные о книге и указатели на два других объекта node.

Цитата

оператор ->

object->something
тоже что и 
(*object).something

*object Если проще, то "указатель на объект --> объект"

Это все написано в самоучителях, все просто, а печатать долго. В гугле инфы про это тоже море.


Это сообщение отредактировал(а) fry - 8.1.2010, 06:41
PM MAIL   Вверх
sincendia
Дата 8.1.2010, 06:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 8.1.2010

Репутация: нет
Всего: нет



В том то и дело, что я не совсем понимаю, что написано в этих самоучителях. Это все проще некуда, я знаю, но не понимаю.. Проще говоря мое непонимание от самых азов начинается. Вот например я не понимаю значение слова "возвращать" в фразе" Если функция возвращает void, то считай, что она вообще ничего не возвращает". Что значит "возвратить значение"? Ну не понимаю, да я дурочка))
Не понимаю что в общем должно быть в скобках после названия функции.  
Код

void printT(node *root);

Void - ясно (если пойму значеник слова возващать), printT - ясно, а в скобках это для чего?
Цитата

object->something
тоже что и 
(*object).something

*object Если проще, то "указатель на объект --> объект"

Это да. я видела в книжке, но опять же не понимаю((( Можно как то более по-русски это выразить?))

Добавлено через 1 минуту и 36 секунд
И все таки для чего нужны указатели на l r в описании стуктуры:
Код

struct node{
    int udk;
    char fio[25];
    char naz[25];
    int god;
    int kol;
    node *l,*r;
};

и для чего ";" после скобки?

Добавлено через 10 минут и 21 секунду
Код

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);

Вообще не поняла почему эти строки идут до функции main....

Добавлено через 12 минут и 59 секунд
Простите за предыдущую глупость
PM MAIL   Вверх
sincendia
Дата 8.1.2010, 07:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 8.1.2010

Репутация: нет
Всего: нет



Все. Я почти во всем разобралась, кроме функции delet. Вы не могли бы ее прокомментировать что да как?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0922 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.