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

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

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

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

26.04.2013, 10:40. Просмотров 302. Ответов 3
Метки нет (Все метки)

Откомментируйте пожалуйста по строчке ,кто ,что может,а то не могу разобраться,это программа обход бинарного дерева в глубину справа налево
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++
Разобраться в коде C++
C++ Нужно разобраться в коде
Не могу разобраться в коде C++
Помогите разобраться в коде C++
C++ Значения в матрице. Нужно разобраться в коде с++ человеку не знающему языка
C++ Разобраться в коде программы
Не могу разобраться в коде C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Юля_программист
 Аватар для Юля_программист
456 / 111 / 16
Регистрация: 04.05.2012
Сообщений: 545
Записей в блоге: 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
Ворчун
Эксперт CЭксперт С++
 Аватар для MrGluck
6210 / 3455 / 423
Регистрация: 29.11.2010
Сообщений: 9,168
26.04.2013, 16:52     Нужно разобраться в коде #4
Программа, которая кушает память и не освобождает её.

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

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