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

Объяснение части кода - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Метод защиты от дурака http://www.cyberforum.ru/cpp-beginners/thread1138599.html
Всем привет, у меня есть код ну нет защиты от ввода букв с клавы((, помогите пожалуйста сделать эту защиту. Вот код: #include "stdafx.h" #include <iostream> #include <stdio.h> const int d=100; const int t=50; //константный размер матрицы
C++ Организовать поиск в структуре Задача на тему : Структуры. Список сведений о животных в зоопарке. Каждая строка списка содержит наименование вида , пол, дату ,необходимую калорийность ежедневного рациона , логический признак - требуется ли содержание в теплом помещении в зимнее время года . Обеспечить поиск а) самого молодого животного по заданной подстроке наименования вида; б) трех животных заданного пола с наименьшей... http://www.cyberforum.ru/cpp-beginners/thread1138597.html
C++ Найти зарплату на основе данных двумерного массива
в двумерном массиве храниться информация о зарплате 20 человек за каждый месяц года (Первого человека в 1 строке Второго человека во второй строке и т.д.) Составить программу для расчета общей зарплаты полученой за год одним любым человеком Информация о зарплате которого представлена в массиве
Вывести все элементы массива кратные 3 и удовлетворяющие условию -10<=p[i]<=15 C++
Помогите решить C++ Дан массив p, заполненный с клавиатуры Вывести все элементы кратные 3 и удовлетворяющие условию -10<=p<=15
C++ Нужно чтобы введённый студент в методе in вывелся на экран как в методе out http://www.cyberforum.ru/cpp-beginners/thread1138569.html
#include<conio.h> #include<stdio.h> #include<iostream.h> #include<windows.h> #include<cstring.h> // это просто для русских инициалов // char buff; char *ToAcii(char *s)
C++ Решение СЛАУ методом Гаусса и return value 3221225477 #include<iostream> #include <math.h> #include <stdlib.h> using namespace std; void Matrix_metod() { int i, j, n, m,nev,sum=0; //ñîçäàåì ìàññèâ cout << "ââåäèòå ÷èñëî óðàâíåíèé: "; подробнее

Показать сообщение отдельно
somebdy
7 / 7 / 1
Регистрация: 30.04.2013
Сообщений: 25
07.04.2014, 17:05     Объяснение части кода
Прошу! Слегка приправил своими комментариями и небольшими правками
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
typedef struct derevo {
    int data;
    derevo *left;
    derevo *right;
} node;
 
node * search(node * tree, int data) /* Поиск места для нового элемента */
{
    node * buf = NULL; /* Станет указателем на узел в дереве,
                          к левой или правой ветви которого
                          можно присоединить новый узел (элемент).
                          Либо NULL, если дерева не существует */
 
    if (tree) /* если дерево существует */
        do {
            buf = tree; /* buf хранит указатель на узел в дереве */
 
            if (tree->data == data) /* если значение в текущем узле равно data, */
                return tree;        /* возвращаем адрес этого элемента */
 
            if (tree->data > data) /* если значение в текущем узле больше data, */
                tree = tree->left; /* то двигаемся по левой ветви */
            else
                tree = tree->right; /* иначе по правой */
        } while (tree); /* пока не дойдем до конца дерева */
 
    return buf; /* Вернули адрес найденного узла, либо NULL */
}
 
int Add(node ** tree, int data) /* добавление элемента в дерево (адрес корня может измениться) */
{
    node * buf; /* служит для хранения адреса нового узла, для последующего
                   добавления в дерево */
    
    /* выделяем память под узел
       завешаем выполнение функции
       если произошла ошибка при выделении */
    if (!(buf = (node *)malloc(sizeof(node)))) 
    {
        return -1;
    }
 
    buf->data = data; /* записываем данные в звено */
    buf->left = NULL; /* подзвенья обнуляем */
    buf->right = NULL;
 
    /* если дерево пустое */
    if (!*tree) {
        *tree = buf; /* добавим в дерево новый узел */
        return 1;
    }
 
    /* ищем подходящее место для нового узла */
    node * founded_node = search(*tree, data);
 
    if (founded_node) /* если founded_node не NULL, */
    {                 /* т.е нашли подходящее место для нового узла */
        if (founded_node->data > data) /* присоединяем узел к правому либо левому поддереву */
            founded_node->left = buf;
        else
            founded_node->right = buf;
    } else {
        free(buf); /* освободим память выделенную под узел, если его некуда присоединить,
                      если не освободить, то произойдет утечка памяти  */
        return -1;
    }
    return 0;
}
В 42 строке было выделение памяти через new. Это излишне т.к мы уже выделили память в 38 строке.
Касаемо 59 и 61 строк. Функция search может вернуть указатель на узел который находится в середине дерева, а в этих строчках мы просто так берем и переприсваиваем указатели на уже существующие узлы и как следствие, ветви. В результате все становится плохо. С этим нужно что-то делать.
 
Текущее время: 22:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru