Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2010, 16:01   #1
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию Дерево в С#

Здравия желаю )
В универе в рамках изучения ООП дали такое вот задание -
Цитата:
Класс/набор классов для описания двоичного дерева. Узел должен иметь как минимум имеет один атрибут - наименование.
(прежде я "общался" с деревьями в делфи - и знаю, что каждый узел помимо значения, должен содержать, в случае если это не "лист" дерева - два указателя на "младшие узлы")

И вот в 900-страничном учебнике под названием" Наиболее полное руководство по С# я не нахожу раздела про указатели (говориться только , что типа там и так массивы - это указатели на первые их элементы).

В говориться, что указатели вроде как "правильно" не употреблять
цитата со страницы -
Цитата:
Указателей в том виде, в котром они используются в C++ в C# нет, разработчики отказались от них для повышения безопасности исполнения кода. Хотя оставили возможность их использования в блоках unsafe { } для выполнения unmanaged кода. Но это не рекомендуется.

С другой стороны все переменные в C# это ссылки на объект. Вы объявляете явно или неявно через new, а вот удаление как в Java через GC (Garbage Collector), сборщик мусора.
каким же образом "склеивать" дерево ?н
Пожалуйста, намекните ))

Заранее спасибо )
против абортов=за + жизнь;.фкн вгу;_______________________мойблг
vedro-compota вне форума Ответить с цитированием
Старый 06.11.2010, 20:41   #2
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию

Немного разобрался с этим вопросом, но видимо не до конца понимаю "ооп с#-па".
Для описания дерева использую такой вот код-
Код:
namespace ConsoleApplication1
{
   public class DEREVO
    {
        public int Value; // численное значение узла
        public DEREVO Right;// ссылка на правое поддерево
        public DEREVO Left; // ссылка на левое  поддерево
        public void AddRight() // этот метод по-идее призван создать правое поддерево и и прикрепить его к "родительскому" узлу.
        {
            DEREVO.Right = new DEREVO(); // вроде как создание и прикрепление....  
        }

    }
как вы уже поняли, это дело не компилируется - по причине -
Цитата:
Error 1 An object reference is required for the non-static field, method, or property 'ConsoleApplication1.DEREVO.Right' D:\my\C#\trial\1\Program.cs 15 13 ConsoleApplication1
пожалуйста, объясните в чём тут нарушение логики !
---------------------------------------------------------------
(не понятно как использовать поля в методах того же самого класса в c#)
против абортов=за + жизнь;.фкн вгу;_______________________мойблг

Последний раз редактировалось vedro-compota; 06.11.2010 в 20:51.
vedro-compota вне форума Ответить с цитированием
Старый 06.11.2010, 20:59   #3
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

Дык, ты пытаешься к несуществующему статическому полю присвоить значение.
Код:
namespace ConsoleApplication1
{
   public class DEREVO
    {
        public int Value; // численное значение узла
        public static DEREVO Right;// ссылка на правое поддерево. СКОМПИЛИРУЕТСЯ, НО В ДАННОМ СЛУЧАЕ ЭТО НЕ ПРАВИЛЬНО !!!
        public DEREVO Left; // ссылка на левое  поддерево
        public void AddRight() // этот метод по-идее призван создать правое поддерево и и прикрепить его к "родительскому" узлу.
        {
            DEREVO.Right = new DEREVO(); // вроде как создание и прикрепление....  
        }

    }
статичное поле, это общее поле для всех объектов такого же типа, в данном случае DEREVO.


Вот так правильно:
Код:
namespace ConsoleApplication1
{
   public class DEREVO
    {
        public int Value; // численное значение узла
        public DEREVO Right;// ссылка на правое поддерево. 
        public DEREVO Left; // ссылка на левое  поддерево
        public void AddRight() // этот метод призван создать правое поддерево и и прикрепить его к "родительскому" узлу.
        {
            this.Right = new DEREVO(); // Создание и прикрепление нового объекта
        }

    }
ссылка this указывает на тот объект внутри которого используется. Если не ошибаюсь, это тоже самое, что в делфи self

Где-то в программе создаёшь родительский узел:
Код:
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
              DEREVO derevo = new DEREVO(); //Создаёшь объект, предположим будет это родительский узел
              derevo.AddRight(); 
              derevo.Right.Какое-то_свойство = что-то;
        }

    }
}

Последний раз редактировалось Casper-SC; 06.11.2010 в 21:58. Причина: Поправил свои ошибки
Casper-SC вне форума Ответить с цитированием
Старый 07.11.2010, 04:09   #4
m0nax
Форумчанин
 
Аватар для m0nax
 
Регистрация: 25.09.2009
Сообщений: 534
По умолчанию

вот хорошее двоичное дерево, навороченное, но как образец самое оно
http://usings.ru/2009/06/14/tree-t/
m0nax вне форума Ответить с цитированием
Старый 07.11.2010, 11:12   #5
coernecow
Заблокирован
 
Регистрация: 06.11.2010
Сообщений: 5
По умолчанию Дерево в С#

Срочно На разборке говорят что если дерево изначально не стояло то оно не встанет и будет топорщиться,сказали боковые панели на дверях надо целиком менять Это правда или хотят развести?
coernecow вне форума Ответить с цитированием
Старый 07.11.2010, 14:02   #6
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию

Casper-SC, спасибо за исчерпывающий ответ ))
m0nax, благодарю за пример .
против абортов=за + жизнь;.фкн вгу;_______________________мойблг
vedro-compota вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дерево Abricosko БД в Delphi 2 03.06.2010 12:16
дерево energywav Помощь студентам 0 31.05.2010 20:22
Дерево Ikram Помощь студентам 0 05.05.2010 19:42
дерево С# Natok Помощь студентам 0 14.09.2009 23:42
Дерево Yoger БД в Delphi 3 25.01.2007 01:24