User Tag List

Страница 14 из 25 ПерваяПервая ... 101112131415161718 ... ПоследняяПоследняя
Показано с 131 по 140 из 250

Тема: Выбор 128 кб новодела. Нужна помощь. Сборка пайка и поиск того кто хочет принять учас

  1. #131

    Регистрация
    16.01.2005
    Адрес
    Ekaterinburg
    Сообщений
    2,082
    Записей в дневнике
    11
    Спасибо Благодарностей отдано 
    173
    Спасибо Благодарностей получено 
    493
    Поблагодарили
    343 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Terabiterr Посмотреть сообщение
    Я тебе писал, что бы прежде чем отвечать по вопросам проекта, разобраться в коде и на сайте. А ты что сделал? не разобрался, а сразу сделал выводы. Не хорошо. Зачем ты суешь в тот код библиотеку STL если там студенты еще ее не учили. Она идет, дальше и она там есть. Есть там и примеры. Там написано дерево бинарное. И каким боком умные указатели к дереву??? Ты историю С++ изучал хоть?
    Я тебе одаренному говорю, что у тебя в твоем "шикарном примере" очевидная утечка памяти. Ты понимаешь, о чем речь хоть? Историю он меня будет посылать учить, лол.
    Там в итоге пример такой, что по нему студентов учить - только портить. Как диверсия против поляков потянет, как учебное пособие - вообще незачет.

    Цитата Сообщение от Terabiterr Посмотреть сообщение
    А ты возьми и распарси на ангуляре пдф файл, я посмотрю как у тебя это выйдет без сервера части.
    Ааа, так вот там почему 13 мегабайт трафика скачалось. Из них же 12 мегабайт - это либы для парсинга pdf

    pdfjs умеет конвертить в текст из коробки. Ты его используешь. Где, где, проблема-то, расскажи уже? В ангуляре? Я пока не вижу никакой сложности в задаче.

    Цитата Сообщение от Terabiterr Посмотреть сообщение
    Примеры все написаны под винду, об этом свидетельствует картинка показа работы дерева под примерами.
    Угу, и студенты на маках идут лесом. Бедный Страуструп плачет каждый раз, когда кто-то пишет платформо-зависимый код на плюсах. А, главное, зачем там вызов этой задержки? А я знаю зачем - чтоб окошко не закрылась, ведь ты запускаешь программы не в консоли, а двойным кликом как моя прабабушка.

    Цитата Сообщение от Terabiterr Посмотреть сообщение
    Так и про какую скорость ты здесь решил заявить? И как тыы измерял, давай посмотрим. Там рекурсивная реализация если ты - конечно заметил.
    Правду люди говорят, программист их тебя такой же, как электронщик.

    На пальцах - я имел в виду, что поле root в классе не нужно. Совсем. Ты впустую тратишь память. Трата памяти оправдана обычно только в одном случае - если это позволяет программе работать быстрее. В этом же примере ускорения не будет ни на процент.

    - - - Добавлено - - -

    Цитата Сообщение от Terabiterr Посмотреть сообщение
    Так и про какую скорость ты здесь решил заявить? И как тыы измерял, давай посмотрим. Там рекурсивная реализация если ты - конечно заметил.
    Ха-ха, я счас сообразил, что из-за поля root это даже не бинарное дерево потому что оно теперь выглядит вот так
    Код:
        A
        |
        B
       / \
      C   D
    и т.д. То есть у первого узла всего один потомок - собственно, .root

    Хотя мне лень думать дальше, не исключено, что я ошибаюсь, и там такое промежуточное ребро есть не только у корня, но и вообще перед каждым элементом, лол.

    UPD а, пардон, ты же не обещал, что оно сбалансировано. Так что даже с промежуточным ребром это всё же двоичное дерево. Хоть и страшное.
    Последний раз редактировалось Eltaron; 08.12.2020 в 20:39.
    Граф Дракула наш кумир, патамушта он вомпир!
    VKINK 9 : BORDER NOT PI YTINK 9 Channel

  2. #132
    Terabiterr
    Гость

    По умолчанию

    Цитата Сообщение от andreysur Посмотреть сообщение
    Может быть, стоит закрыть тему? Название темы и задачи, заявленные в ней, не соответствуют тому, чем собирается заняться ТС. Судя по начальным вопросам ТС, тема будет повторять его предыдущую тему по сборке Ленинграда 3 один-в-один: фотографии пайки микросхем с 5-ти направлений, какая маркировка и цвет диодов и транзисторов и т.д. Данная тема вряд ли сможет научить начинающего спектрумиста. Вместо обсуждения технических вопросов уже больше сотни страниц комментариев не по теме. Либо перенести тему в какой-то раздел типа «А поговорить?!»

    ТС уже собрал несколько плат. Смотреть и читать, как он собирает новую плату, вряд ли кому-то будет интересно в практическом плане – ничему там научиться нельзя, скорее наоборот. ТС может, в соответствии со своим опытом и предыдущей темой, начать собирать свой Ленинград. Если не запустится, то, грамотно (грамматически и технически) и коротко изложив свою проблему, ТС может обратиться на основной форум – по Ленинграду много тем. И все будут спокойны!
    Либо так :
    «Ребята скоро новый год!!!! Просыпайтесьььь!!!! Это же Ленинград 48кб. Все дела в сторону и стремительно изучаем всю схему от А до Я, как я)))
    Ну Дык иди себе в другой раздел, а я буду изучать Ленинград и его паять с ребятами. Здесь для новичков раздел, если что напомню на минуточку.

    - - - Добавлено - - -

    Цитата Сообщение от Eltaron Посмотреть сообщение
    Я тебе одаренному говорю, что у тебя в твоем "шикарном примере" очевидная утечка памяти. Ты понимаешь, о чем речь хоть? Историю он меня будет посылать учить, лол.
    Там в итоге пример такой, что по нему студентов учить - только портить. Как диверсия против поляков потянет, как учебное пособие - вообще незачет.


    Ааа, так вот там почему 13 мегабайт трафика скачалось. Из них же 12 мегабайт - это либы для парсинга pdf

    pdfjs умеет конвертить в текст из коробки. Ты его используешь. Где, где, проблема-то, расскажи уже? В ангуляре? Я пока не вижу никакой сложности в задаче.


    Угу, и студенты на маках идут лесом. Бедный Страуструп плачет каждый раз, когда кто-то пишет платформо-зависимый код на плюсах. А, главное, зачем там вызов этой задержки? А я знаю зачем - чтоб окошко не закрылась, ведь ты запускаешь программы не в консоли, а двойным кликом как моя прабабушка.


    Правду люди говорят, программист их тебя такой же, как электронщик.

    На пальцах - я имел в виду, что поле root в классе не нужно. Совсем. Ты впустую тратишь память. Трата памяти оправдана обычно только в одном случае - если это позволяет программе работать быстрее. В этом же примере ускорения не будет ни на процент.

    - - - Добавлено - - -


    Ха-ха, я счас сообразил, что из-за поля root это даже не бинарное дерево потому что оно теперь выглядит вот так
    Код:
        A
        |
        B
       / \
      C   D
    и т.д. То есть у первого узла всего один потомок - собственно, .root

    Хотя мне лень думать дальше, не исключено, что я ошибаюсь, и там такое промежуточное ребро есть не только у корня, но и вообще перед каждым элементом, лол.
    Мда... Я же сказал, что оно рекурсивно написано, и так как программа работает, уже свидетельство о том, что оно правильно создано. Кто-то не знает динамических структур, и не понимает рекурсии. Учись студент! И не лезь в разговор с дядей.

    - - - Добавлено - - -

    Ибо только по правильной структуре дерева будет работать рекурсия.

  3. #133

    Регистрация
    29.10.2016
    Адрес
    г. Москва
    Сообщений
    380
    Спасибо Благодарностей отдано 
    157
    Спасибо Благодарностей получено 
    113
    Поблагодарили
    66 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Terabiterr Посмотреть сообщение
    Ну Дык иди себе в другой раздел, а я буду изучать Ленинград и его паять с ребятами.
    С какими такими ребятами? Вас там много что-ли? Или ты про своих воображаемых друзей? А хамишь зачем? Тебя за дело критикуют, и не один.

  4. #134
    Terabiterr
    Гость

    По умолчанию

    Пока комплектуха на подъезде посмотрим на С++ для развития.
    И так что бы не бегать вот бинарное дерево мною созданное. Давай разбираться, что непонятно. Знающим просьба посмотреть на реализацию.
    Код:
    /*
    Athor Igor Dombrovsky
    Realization binary tree
    */
    #include <iostream>
    #include <time.h>
    #include <stdlib.h>
    using namespace std;
    #define TEXT_COLOR_CMD_WINDOWS system("color 0A"); 
    #define STOP_CMD_WINDOWS system("pause"); 
    
    template<class T>
    class Tree
    {
    public:
    	Tree();
    	~Tree();
    	void addElement(T data);
    	void showMinMax(Tree * root);
    	void showMaxMin(Tree * root);
    	int searchElement(Tree * root, T element);
    	T getMax();
    	T getMin();
    	void clearTree();
    	void deleteElement(Tree * root, T element);
    	void deleteBranchLeft(Tree * root);
    	void deleteBranchRight(Tree * root);
    
    public:
    	Tree * root;
    private:
    	Tree * right;
    	Tree * left;
    	Tree * max;
    	Tree * min;
    	T data;
    	void searchPlace(Tree * root, Tree * temp, T data);
    };
    
    template<class T>
    Tree<T>::Tree() : root(NULL), right(NULL), left(NULL), min(NULL), max(NULL) // CONSTRUCTOR
    {
    	//DEFAULT
    }
    
    template<class T>
    Tree<T>::~Tree() // DESTRUCTOR
    {
    	root = NULL;
    	right = NULL;
    	left = NULL;
    	min = NULL;
    	max = NULL;
    }
    
    template<class T>
    void Tree<T>::addElement(T data) // AD ELEMENT AT TREE
    {
    	Tree * temp = new Tree;
    	temp->data = data;
    	temp->left = NULL;
    	temp->right = NULL;
    
    	if (root == NULL)
    	{
    		root = temp;
    		min = temp;
    		max = temp;
    	}
    	else
    	{
    		if (min->data > temp->data) // MAX ELEMENT
    			min = temp;
    		if (max->data < temp->data) // MIN ELEMENT
    			max = temp;
    		searchPlace(root, temp, data); // SEARCH PLACE IN TREE
    	}
    }
    
    template<class T>
    void Tree<T>::searchPlace(Tree<T> * root, Tree<T> * temp, T data) // PRIVATE RECURSION SEARCH PLACE IN TREE
    {
    	Tree * tmp = root;
    	if (tmp->data < data && tmp->right == NULL) tmp->right = temp;
    	else if (tmp->data > data && tmp->left == NULL) tmp->left = temp;
    	else
    	{
    		if (tmp->data < data) searchPlace(tmp->right, temp, data); // RECURSION CALL
    		if (tmp->data > data) searchPlace(tmp->left, temp, data); // RECURSION CALL
    	}
    }
    
    template<class T>
    void Tree<T>::showMinMax(Tree * root) // SHOW MIN MAX
    {
    	if (root != NULL && this->root != NULL)
    	{
    		showMinMax(root->left);
    		cout << "==>> Address = " << root << " Data = " << root->data << "\n";
    		showMinMax(root->right);
    	}
    }
    
    template<class T>
    void Tree<T>::showMaxMin(Tree * root) // SHOW MAX MIN
    {
    	if (root != NULL && this->root != NULL)
    	{
    		showMaxMin(root->right);
    		cout << "==>> Address = " << root << " Data = " << root->data << "\n";
    		showMaxMin(root->left);
    	}
    }
    
    template<class T>
    int Tree<T>::searchElement(Tree<T>* root, T element) // SEARCH ELEMENT IN TREE RETURN ONE OR ZERO
    {
    	if (this->root != NULL)
    	{
    		if (root->data > element)
    		{
    			if (root->data == element) return 1;
    			if (root->left != NULL) searchElement(root->left, element);
    			else return 0;
    		}
    		else
    		{
    			if (root->data == element) return 1;
    			if (root->right != NULL) searchElement(root->right, element);
    			else return 0;
    		}
    	}
    }
    
    template<class T>
    T Tree<T>::getMax() // GET MAX ELEMENT
    {
    	return this->max->data;
    }
    
    template<class T>
    T Tree<T>::getMin() // GET MIN ELEMENT
    {
    	return this->min->data;
    }
    
    template<class T>
    void Tree<T>::clearTree() // CLEAR TREE
    {
    	if (this->root != NULL)
    	{
    		deleteBranchLeft(this->root);
    		deleteBranchRight(this->root);
    		if (this->root->right == NULL && this->root->left == NULL)
    		{
    			delete this->root;
    			this->root = NULL;
    		}
    	}
    }
    
    template<class T>
    void Tree<T>::deleteElement(Tree * root, T element) // DELETE ELEMENT 
    {
    	Tree * parent; 
    	if (this->root != NULL)
    	{
    		if (root->data > element)
    		{
    			if (root->data == element) // WORKS WITH LEFT IN TREE
    			{
    				
    			}
    			if (root->left != NULL)
    			{
    				parent = root; 
    				deleteElement(root->left, element);
    			}
    		}
    		else
    		{
    			if (root->data == element) // WORKS WITH LEFT IN TREE
    			{
    
    			}
    			if (root->right != NULL)
    			{
    				parent = root;
    				deleteElement(root->right, element);
    			}
    		}
    	}
    }
    
    template<class T>
    void Tree<T>::deleteBranchLeft(Tree * root) // DELETE BRANCH LEFT
    {
    	if (root->left != NULL && this->root != NULL)
    	{
    		deleteBranchLeft(root->left);
    		delete root->left;
    		root->left = NULL;
    	}
    }
    
    template<class T>
    void Tree<T>::deleteBranchRight(Tree * root) // DELETE BRANCH RIGHT
    {
    	if (root->right != NULL && this->root != NULL)
    	{
    		deleteBranchRight(root->right);
    		delete root->right;
    		root->right = NULL;
    	}
    }
    
    int main() { // MAIN
    	TEXT_COLOR_CMD_WINDOWS
    		Tree<int> t; // TREE
    		//--------------------------------------------------------------
    	t.addElement(5);
    	t.addElement(10);
    	t.addElement(8);
    	t.addElement(6);
    	t.addElement(4);
    	t.addElement(3);
    	t.addElement(7);
    	t.addElement(9);
    	t.addElement(1);
    	t.addElement(2);
    	//--------------------------------------------------------------
    	cout << "//****************************************" << endl;
    	cout << "// SHOW MIN MAX" << endl;
    	cout << "//****************************************" << endl;
    	t.showMinMax(t.root);
    	cout << endl;
    	//--------------------------------------------------------------
    	cout << "//****************************************" << endl;
    	cout << "// SHOW MAX MIN" << endl;
    	cout << "//****************************************" << endl;
    	t.showMaxMin(t.root);
    	cout << endl;
    	//--------------------------------------------------------------
    	cout << "//****************************************" << endl;
    	int found = 0, key = 25;
    	found = t.searchElement(t.root, key);
    	cout << "Key search = " << key << endl;
    	cout << "Found = " << found << endl;
    	cout << endl;
    	//--------------------------------------------------------------
    	cout << "//****************************************" << endl;
    	cout << "// SHOW Max element                       " << endl;
    	cout << "//****************************************" << endl;
    	cout << t.getMax() << endl;
    	cout << endl;
    	//--------------------------------------------------------------
    	cout << "//****************************************" << endl;
    	cout << "// SHOW Min element                       " << endl;
    	cout << "//****************************************" << endl;
    	cout << t.getMin() << endl;
    	cout << endl;
    	//--------------------------------------------------------------
    	cout << "//****************************************" << endl;
    	cout << "// DELETE BRANCH LEFT					   " << endl;
    	cout << "//****************************************" << endl;
    	t.deleteBranchLeft(t.root);
    	t.showMaxMin(t.root);
    	cout << endl;
    	t.showMinMax(t.root);
    	cout << endl;
    	//--------------------------------------------------------------
    	cout << "//****************************************" << endl;
    	cout << "// DELETE BRANCH RIGHT					   " << endl;
    	cout << "//****************************************" << endl;
    	t.deleteBranchRight(t.root);
    	t.showMaxMin(t.root);
    	cout << endl;
    	t.showMinMax(t.root);
    	cout << endl;
    	//--------------------------------------------------------------
    	cout << "//****************************************" << endl;
    	cout << "// clear Tree							   " << endl;
    	cout << "//****************************************" << endl;
    	t.clearTree();
    	t.showMaxMin(t.root);
    	cout << endl;
    	t.showMinMax(t.root);
    	cout << endl;
    	//--------------------------------------------------------------
    	cout << "//****************************************" << endl;
    	cout << "// END PROGRAM " << endl;
    	cout << "//****************************************" << endl;
    	STOP_CMD_WINDOWS
    		return 0;
    }
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	2.jpg 
Просмотров:	56 
Размер:	21.0 Кб 
ID:	74148   Нажмите на изображение для увеличения. 

Название:	1.jpg 
Просмотров:	44 
Размер:	39.1 Кб 
ID:	74149  
    Последний раз редактировалось Terabiterr; 08.12.2020 в 20:49.

  5. #135

    Регистрация
    16.01.2005
    Адрес
    Ekaterinburg
    Сообщений
    2,082
    Записей в дневнике
    11
    Спасибо Благодарностей отдано 
    173
    Спасибо Благодарностей получено 
    493
    Поблагодарили
    343 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Terabiterr Посмотреть сообщение
    Мда... Я же сказал, что оно рекурсивно написано, и так как программа работает, уже свидетельство о том, что оно правильно создано. Кто-то не знает динамических структур, и не понимает рекурсии. Учись студент! И не лезь в разговор с дядей.
    Господи, да причём там твоя рекурсия вообще? Ну рекурсия - и что? Память-то тоже рекурсивно утекает.


    Но ты, похоже, так и не понял, где там утечка? Окей, смотри:


    Скрытый текст


    Код:
    /*
    Athor Igor Dombrovsky
    Realization binary tree
    */
    #include <iostream>
    using namespace std;
    #define TEXT_COLOR_CMD_WINDOWS system("color 0A");
    #define STOP_CMD_WINDOWS system("sleep 3");
    
    template<class T>
    class Tree
    {
    public:
            Tree();
            ~Tree();
            Tree<T>* addElement(T data);
            void showMinMax(Tree * root);
            void showMaxMin(Tree * root);
            int searchElement(Tree * root, T element);
    public:
            Tree * root;
            Tree * right;
            Tree * left;
            T data;
            void searchPlace(Tree * root, Tree * temp, T data);
    };
    
    template<class T>
    Tree<T>::Tree() : root(NULL), right(NULL), left(NULL) // CONSTRUCTOR
    {
            //DEFAULT
    }
    
    template<class T>
    Tree<T>::~Tree() // DESTRUCTOR
    {
            delete root;
            root = NULL;
            right = NULL;
            left = NULL;
    }
    
    template<class T>
    Tree<T>* Tree<T>::addElement(T data) // AD ELEMENT AT TREE
    {
            Tree * temp = new Tree;
            temp->data = data;
            temp->left = NULL;
            temp->right = NULL;
    
            if (root == NULL)
            {
                    root = temp;
            }
            else
            {
                    searchPlace(root, temp, data);
            }
            return temp;
    }
    
    template<class T>
    void Tree<T>::searchPlace(Tree<T> * root, Tree<T> * temp, T data) // PRIVATE RECURSION SEARCH PLACE IN TREE
    {
            Tree * tmp = root;
            if (tmp->data < data && tmp->right == NULL)
            {
                    tmp->right = temp;
            }
            else if (tmp->data > data && tmp->left == NULL)
            {
                    tmp->left = temp;
            }
            else
            {
                    if (tmp->data < data)
                    {
                            searchPlace(tmp->right, temp, data); // RECURSION CALL
                    }
                    if (tmp->data > data)
                    {
                            searchPlace(tmp->left, temp, data); // RECURSION CALL
                    }
            }
    }
    
    template<class T>
    void Tree<T>::showMinMax(Tree<T> * root) // SHOW MIN MAX
    {
            if (root != NULL)
            {
                    showMinMax(root->left);
                    cout << "LEFT ==>> Address = " << root << " Data = " << root->data << "\n";
                    showMinMax(root->right);
            }
    }
    
    template<class T>
    void Tree<T>::showMaxMin(Tree<T> * root) // SHOW MAX MIN
    {
            if (root != NULL)
            {
                    showMaxMin(root->right);
                    cout << "RIGHT ==>> Address = " << root << " Data = " << root->data << "\n";
                    showMaxMin(root->left);
            }
    }
    
    template<class T>
    int Tree<T>::searchElement(Tree<T>* root, T element) // SEARCH ELEMENT IN TREE RETURN ONE OR ZERO
    {
            if (root->data > element)
            {
                    if (root->data == element) return 1;
                    if (root->left != NULL) searchElement(root->left, element);
                    else return 0;
            }
            else
            {
                    if (root->data == element) return 1;
                    if (root->right != NULL) searchElement(root->right, element);
                    else return 0;
            }
    }
    
    int main(int argc, char** argv) { // MAIN
    //      STOP_CMD_WINDOWS
            Tree<int>* g;
            if (argc > 1) {
                    TEXT_COLOR_CMD_WINDOWS
                    Tree<int> t; // TREE
                    t.addElement(8);
                    t.addElement(4);
                    t.addElement(6);
                    t.addElement(5);
                    t.addElement(7);
                    t.addElement(2);
                    t.addElement(3);
                    t.addElement(1);
                    t.addElement(15);
                    g = t.addElement(25);
                    t.addElement(11);
                    t.addElement(10);
                    t.addElement(55);
                    //--------------------------------------------------------------
                    cout << "//****************************************" << endl;
                    cout << "// SHOW MIN MAX" << endl;
                    cout << "//****************************************" << endl;
                    t.showMinMax(t.root);
                    cout << endl;
                    //--------------------------------------------------------------
                    cout << "//****************************************" << endl;
                    cout << "// SHOW MAX MIN" << endl;
                    cout << "//****************************************" << endl;
                    t.showMaxMin(t.root);
                    cout << endl;
                    //--------------------------------------------------------------
                    cout << "//****************************************" << endl;
                    int found = 0, key = 25;
                    found = t.searchElement(t.root, key);
                    cout << "Key search = " << key << endl;
                    cout << "Found = " << found << endl;
    
                    cout << "//****************************************" << endl;
                    cout << "// END PROGRAM "                                                        << endl;
                    cout << "//****************************************" << endl;
                    cout << g->data << endl; 
            }
    
            cout << g->data << endl;
    //      STOP_CMD_WINDOWS
            return 0;
    }
    [свернуть]


    Запускаем как
    tree.exe 123
    (это чтоб оптимизатор не умничал и не выкинул условие if (argc > 1), генерирующее нам область видимости)

    Объясни, почему в выделенной красным строке всё ещё напечатается 25, хотя дерево вышло из области видимости?

    - - - Добавлено - - -

    Можешь даже перед тем cout попытаться перезаписать мусором всю кучу в стиле
    Код:
            Tree<int>* fillmem[10000];
            for (int i = 0; i < 10000; i++) {
                    fillmem[i] = new Tree<int>();
                    fillmem[i]->data = 0xDEADBEEF;
            }
    Всё равно будет 25. Потому что кто-то не знает основ С++, но берется писать учебники.
    Граф Дракула наш кумир, патамушта он вомпир!
    VKINK 9 : BORDER NOT PI YTINK 9 Channel

    Этот пользователь поблагодарил Eltaron за это полезное сообщение:


  6. #136
    Terabiterr
    Гость

    По умолчанию

    Eltaron,
    Код:
      Tree<int>* fillmem[10000];
            for (int i = 0; i < 10000; i++) {
                    fillmem[i] = new Tree<int>();
                    fillmem[i]->data = 0xDEADBEEF;
            }
    Что ты хотел в этом примере показать объясни. Я не пойму, здесь ты создаешь 10к деревьев и? Пример работает. Что бы я 25 увидел?

    - - - Добавлено - - -

    Eltaron,
    Смотри на вывод левой ветки. Бинарное дерево выводится в правильном порядке с листьями.
    Ну вот работает все ок. Я пока не понял где просадка и под рукой нет нормального отладчика.
    Код:
    int main(int argc, char** argv) { // MAIN
    	Tree<int> t;
    //	if(argc > 1)
    //	{
    		for (int i = 0; i < 1000; i++)
    		{
    			t.addElement(i);
    		}
    		t.showMaxMin(t.root);
    //	}
    	cout << "done!" << endl;
          STOP_CMD_WINDOWS
            return 0;
    }
    - - - Добавлено - - -

    Eltaron,
    Я нашел твою проблему в примере. Ну мой компилятор не может конвертировать твой указатель на класс дерева.
    И что ты делаешь здесь и зачем? Выделил красным - это же ошибка компиляции. Ты пытаешься присвоить своему указателю мой обьект класса. И как ты предлагаешь компилятору С++ этот код конвертировать???? Может ссылочку надо поставить?
    Код:
     
    int main(int argc, char** argv) { // MAIN
    //      STOP_CMD_WINDOWS
            Tree<int>* g = Tree<int>();
            if (argc > 1) {
                    TEXT_COLOR_CMD_WINDOWS
                    Tree<int> t; // TREE
                    t.addElement(8);
                    t.addElement(4);
                    t.addElement(6);
                    t.addElement(5);
                    t.addElement(7);
                    t.addElement(2);
                    t.addElement(3);
                    t.addElement(1);
                    t.addElement(15);
                    t.addElement(25);
                    g = t.addElement(25);
                    t.addElement(11);
                    t.addElement(10);
                    t.addElement(55);
                    //--------------------------------------------------------------
                    cout << "//****************************************" << endl;
                    cout << "// SHOW MIN MAX" << endl;
                    cout << "//****************************************" << endl;
                    t.showMinMax(t.root);
                    cout << endl;
                    //--------------------------------------------------------------
                    cout << "//****************************************" << endl;
                    cout << "// SHOW MAX MIN" << endl;
                    cout << "//****************************************" << endl;
                    t.showMaxMin(t.root);
                    cout << endl;
                    //--------------------------------------------------------------
                    cout << "//****************************************" << endl;
                    int found = 0, key = 25;
                    found = t.searchElement(t.root, key);
                    cout << "Key search = " << key << endl;
                    cout << "Found = " << found << endl;
    
                    cout << "//****************************************" << endl;
                    cout << "// END PROGRAM "                                                        << endl;
                    cout << "//****************************************" << endl;
                    cout << g->data << endl; 
            }
    
            cout << g->data << endl;
    //      STOP_CMD_WINDOWS
            return 0;
    }
    Последний раз редактировалось Terabiterr; 08.12.2020 в 22:49.

  7. #136
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  8. #137

    Регистрация
    16.01.2005
    Адрес
    Ekaterinburg
    Сообщений
    2,082
    Записей в дневнике
    11
    Спасибо Благодарностей отдано 
    173
    Спасибо Благодарностей получено 
    493
    Поблагодарили
    343 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Мне нравится, как ты сначала написал, что да, утечка, а потом это удалил и решил взять от жизни всё по хардкору

    Цитата Сообщение от Terabiterr Посмотреть сообщение
    Eltaron,
    Код:
      Tree<int>* fillmem[10000];
            for (int i = 0; i < 10000; i++) {
                    fillmem[i] = new Tree<int>();
                    fillmem[i]->data = 0xDEADBEEF;
            }
    Что ты хотел в этом примере показать объясни. Я не пойму, здесь ты создаешь 10к деревьев и? Пример работает. Что бы я 25 увидел?
    Ты же знаешь, что делает new? В этом куске я предлагаю загадить кучу, чтобы там не осталось старого дерева. На самом деле компилятор, конечно, не обязан класть эти новые объекты поверх старых, так что это в некотором смысле магические пассы руками.

    Смотри на вывод левой ветки. Бинарное дерево выводится в правильном порядке с листьями.
    Ну вот работает все ок. Я пока не понял где просадка и под рукой нет нормального отладчика.
    Ну разумеется работает. Чего б ему не работать? Ну утечка и утечка, всё равно мы из приложения выходим. Проблема будет, когда этот код вдруг будет работать где-то в Польше 24/7 и там однажды херак - и память кончится.

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

    Я нашел твою проблему в примере. Ну мой компилятор не может конвертировать твой указатель на класс дерева.
    И что ты делаешь здесь и зачем? Выделил красным - это же ошибка компиляции. Ты пытаешься присвоить своему указателю мой обьект класса. И как ты предлагаешь компилятору С++ этот код конвертировать???? Может ссылочку надо поставить?
    У меня нет проблемы в примере. addElement я сделал, чтоб возвращал Tree<T>*, и g имеет этот тип.
    Проблемы в коде у тебя - с тем, что ты до сих пор не понял, что выделенную память нужно освобождать. И никто, кроме программиста, этого сделать не сможет. У тебя один new и ни одного delete, тут и ежу понятно, что будет утечка.
    Последний раз редактировалось Eltaron; 08.12.2020 в 23:19.
    Граф Дракула наш кумир, патамушта он вомпир!
    VKINK 9 : BORDER NOT PI YTINK 9 Channel

  9. #138
    Terabiterr
    Гость

    По умолчанию

    Цитата Сообщение от Eltaron Посмотреть сообщение
    У меня нет проблемы в примере. addElement я сделал, чтоб возвращал Tree<T>*, и g имеет этот тип.
    Ну это бред и ошибка компиляции я думаю я тебе уже это показал на твоем же примере. Советую почитать книги по С++ и посмотреть как нужно делать указатель на объект класса.

    Цитата Сообщение от Eltaron Посмотреть сообщение
    И никто, кроме программиста, этого сделать не сможет.
    Ну понятное дело. Как видишь мой пример иллюстрирует бинарное дерево. Да delete там нет. Я это знаю, зачем оно там? Ни кто и никогда этим деревом не будет пользоваться на постоянной основе. Для этого есть STL

    Цитата Сообщение от Eltaron Посмотреть сообщение
    Проблемы в коде у тебя - с тем, что ты до сих пор не понял, что выделенную память нужно освобождать.
    Ну конечно же я знаю что ее нужно освобождать и ты это знаешь что я знаю. Зачем ты говоришь сейчас о банальных вещах. Перед этим ты пел по другому. Рассказывал, что у меня дерево не правильное якобы, то еще там что-то неправильно. А на деле оказалось по другому.

    И так, думаю мы с тобой все таки выяснили, что дерево на С++ написано адекватно в учебных целях. Да есть небольшой нюанс что я память в деструкторе просто присваиваю NULL, а не DELETE. Для студентов отличный и показательный пример согласен?

  10. #139

    Регистрация
    16.01.2005
    Адрес
    Ekaterinburg
    Сообщений
    2,082
    Записей в дневнике
    11
    Спасибо Благодарностей отдано 
    173
    Спасибо Благодарностей получено 
    493
    Поблагодарили
    343 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Да ты задрал. Не знаю, если ли у тебя Аспергер, но Даннинг-Крюгер точно есть.

    Цитата Сообщение от Terabiterr Посмотреть сообщение
    Ну конечно же я знаю что ее нужно освобождать и ты это знаешь что я знаю.
    Знаю, но не освобождаю. Потому, что могу, лол! В учебном пособии, ага. Я курсовую-то с такой хернёй отправлю на доделку, а тут аж учебное пособие. С шикарными примерами.

    Зачем ты говоришь сейчас о банальных вещах. Перед этим ты пел по другому. Рассказывал, что у меня дерево не правильное якобы, то еще там что-то неправильно. А на деле оказалось по другому.
    Где оно оказалось? Конечно у тебя дерево дурацкое с непонятным ребром.

    Добавь вот это перед стопом и объясни, что за херь видим. Что это за значение?

    Код:
    cout << "First level of my shikarnoe binary tree contains this data: " << t.data << endl;
    Только data в public верни, а то сейчас это вообще бесполезный маразм, а не дерево.

    Ткни меня носом в место, где ты добавляешь в дерево этот ноль. Или что там у тебя выведется - ноль это в лучшем случае, в каком-то компиле и 0xcccccc может быть, а где-то и вообще рандом. Это и есть то самая вершина A, которую я рисовал на схеме выше.

    Цитата Сообщение от Terabiterr Посмотреть сообщение
    Ну понятное дело. Как видишь мой пример иллюстрирует бинарное дерево. Да delete там нет. Я это знаю, зачем оно там? Ни кто и никогда этим деревом не будет пользоваться на постоянной основе. Для этого есть STL
    Затем, чтобы студенты не приходили и не оправдывали свои протекающие поделия тем, что они "в интернете в учебнике видели, что так тоже можно".

    Цитата Сообщение от Terabiterr Посмотреть сообщение
    И так, думаю мы с тобой все таки выяснили, что дерево на С++ написано адекватно в учебных целях. Да есть небольшой нюанс что я память в деструкторе просто присваиваю NULL, а не DELETE. Для студентов отличный и показательный пример согласен?
    Да, отличный и показательный пример мемори лика. Я бы ещё размер хипа выводил до запуска и перед выходом, чтоб наглядно было.
    Зачем ты поинтерам NULL присваиваешь вообще? Нет ни одной здравой причины так делать кроме незнания.
    Последний раз редактировалось Eltaron; 09.12.2020 в 00:04.
    Граф Дракула наш кумир, патамушта он вомпир!
    VKINK 9 : BORDER NOT PI YTINK 9 Channel

    Этот пользователь поблагодарил Eltaron за это полезное сообщение:

    polikarpov76(09.12.2020)

  11. #140
    Terabiterr
    Гость

    По умолчанию

    Цитата Сообщение от Eltaron Посмотреть сообщение
    Знаю, но не освобождаю.
    На может, тебе полегчает.
    Код:
    template<class T>
    Tree<T>::~Tree() // DESTRUCTOR
    {
    	delete root;
    	delete right;
    	delete left;
    	delete min;
    	delete max;
    }

Страница 14 из 25 ПерваяПервая ... 101112131415161718 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Нужна помощь в ремонте Спектрума и сборка нового новодела
    от Terabiterr в разделе Несортированное железо
    Ответов: 1246
    Последнее: 17.08.2020, 21:02
  2. Нужна помощь, изменить синхронизацию ТАГАНРОГ 128 до стандартной.
    от electroscat в разделе Несортированное железо
    Ответов: 0
    Последнее: 01.08.2020, 15:56
  3. Ответов: 6
    Последнее: 20.02.2016, 22:06
  4. Кто хочет поностальгировать
    от Raydac в разделе Пресса
    Ответов: 0
    Последнее: 13.10.2009, 08:51

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •