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

Нужно разобраться в коде - C++

Восстановить пароль Регистрация
 
Саша777
1 / 1 / 0
Регистрация: 19.05.2012
Сообщений: 13
26.04.2013, 10:40     Нужно разобраться в коде #1
Откомментируйте пожалуйста по строчке ,кто ,что может,а то не могу разобраться,это программа обход бинарного дерева в глубину справа налево
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
// semestr.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include <iostream>
#include <fstream>
using namespace std;
struct Info
{
    int number;
    int data;
};
ifstream in("input.txt"); // файл откуда считываем
Info dd[10]; //массив структур, содержащий номера вершин и их значения
struct derevo{            //структура дерево
int info;
derevo *left, *right;
};
void Createderevo(derevo *&go, int n)  // построение из входного файла
{
    setlocale ( LC_ALL,"Russian" );
    if(n==1){
    go = new derevo;
    in >> go -> info;
    go -> right = NULL;
    go -> left = NULL;
    }
    else
    {
        go = new derevo;
        int nl = n/2;
        int nr = n - nl - 1;
        if(nl==0)
            go -> right = NULL;
        else
            Createderevo(go -> right,nl);
        if (nr == 0)
            go -> left = NULL;
        else
            Createderevo(go -> left,nr);
        in >> go -> info;
    }
}
int i = 0;
void pp(derevo *curr)  // корень, левая, правая.
{
    if (!curr)
        return;
    dd[i].data=curr->info;
    dd[i].number=i+1;
    i++;
    pp(curr->left);
    pp(curr->right);
}
int main()
{
    derevo *mm; //дерево
    Createderevo(mm,10); //создаем дерево, заполняем
    pp(mm); //обход дерева
    for(int j = 0; j < 10; j++) // номера и значения вершин на экран
    {
        cout<<"Вершина: "<<dd[j].number<<" "; //номер
        cout<<"Значение: "<<dd[j].data<<endl;  //значение
    }
    system("pause");
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.04.2013, 10:40     Нужно разобраться в коде
Посмотрите здесь:

пмг разобраться в коде C++
C++ нужно разобраться в коде
ПОМОГИТЕ РАЗОБРАТЬСЯ В КОДЕ C++
Нужно разобраться в коде C++
Разобраться в коде C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Юля_программист
 Аватар для Юля_программист
449 / 104 / 14
Регистрация: 04.05.2012
Сообщений: 525
Записей в блоге: 1
26.04.2013, 11:49     Нужно разобраться в коде #2
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
// semestr.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include <iostream>
#include <fstream>
//все выше это заголовочные файлы, в них прототипы стандартных функций
using namespace std;//пространство имен
struct Info//это структура с двумя целочисленными переменными
{
    int number;
    int data;
};
ifstream in("input.txt"); // файл откуда считываем
Info dd[10]; //массив структур, содержащий номера вершин и их значения
struct derevo{            //структура дерево
int info;
derevo *left, *right;
};
void Createderevo(derevo *&go, int n)  // построение из входного файла
{
    setlocale ( LC_ALL,"Russian" );//кодировка
    if(n==1){//если n равно 1 то заходим сюда
    go = new derevo;//создание объекта в куче
    in >> go -> info;
    go -> right = NULL;
    go -> left = NULL;
    }
    else //если n не равно 1 идем сюда
    {
        go = new derevo;
        int nl = n/2;//считаем переменную
        int nr = n - nl - 1;//считаем переменную
        if(nl==0)//опять условие
            go -> right = NULL;//предпологаю, что это обнуление
        else
            Createderevo(go -> right,nl);//вызываем рекурсивную функцию с новыми параметрами
        if (nr == 0)
            go -> left = NULL;
        else
            Createderevo(go -> left,nr);
        in >> go -> info;
    }
}
int i = 0;
void pp(derevo *curr)  // корень, левая, правая.
{
    if (!curr)
        return;
    dd[i].data=curr->info;//вызов переменной структуры и запись в массив
    dd[i].number=i+1;
    i++;
    pp(curr->left);
    pp(curr->right);
}
int main()//собственно главная функция
{
    derevo *mm; //дерево
    Createderevo(mm,10); //создаем дерево, заполняем
    pp(mm); //обход дерева
    for(int j = 0; j < 10; j++) // номера и значения вершин на экран
    {
        cout<<"Вершина: "<<dd[j].number<<" "; //номер
        cout<<"Значение: "<<dd[j].data<<endl;  //значение
    }
    system("pause");
    return 0;
}
Добавлено через 2 минуты

Не по теме:

а вообще Вам бы быстрее помогли, если бы Вы сказали какие строчки Вам не понятны конкретно)
Т.к. код в принципе не содержит, чего то сложного, здесь все стандартные операторы, и если не понятно надо начинать с гугла.
Или более конкретно задавать вопрос:Например, не понятна логика работы

Саша777
1 / 1 / 0
Регистрация: 19.05.2012
Сообщений: 13
26.04.2013, 16:38  [ТС]     Нужно разобраться в коде #3
Вот совсем не могу понять void createderevo, например, что такое nl, nr
Void pp тоже непонятно, не могу понять сам ход работы программы
Что делают эти функции

Добавлено через 9 секунд
Вот совсем не могу понять void createderevo, например, что такое nl, nr
Void pp тоже непонятно, не могу понять сам ход работы программы
Что делают эти функции
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
26.04.2013, 16:52     Нужно разобраться в коде #4
Программа, которая кушает память и не освобождает её.

Саша777, пока вы не познаете суть рекурсии, для вас даже одно бинарное дерево будет как темный лес
Yandex
Объявления
26.04.2013, 16:52     Нужно разобраться в коде
Ответ Создать тему
Опции темы

Текущее время: 15:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru