гайка
Гость
|
|
« : 07-07-2011 19:13 » |
|
Эту тему уже затронули Dale и resource в теме "C#, структура и буфер с данными", но не продолжили, ибо правилами сайта возбраняется болтовня не по теме. Мне нужно на шарпе организовать бинарное дерево, то есть структуру с тремя полями: struct Client { string number; struct Client* left; struct Client* right; } объясните, пожалуйста, как правильно использовать unsafe и fixed или, возможно, есть другие методы решения этой проблемы?
|
|
« Последнее редактирование: 08-07-2011 07:25 от Джон »
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #1 : 07-07-2011 19:27 » |
|
Насколько я помню, на шарпе это не тривиальная задача. Когда то я просто воспользовался контейнером List и не заморачивался.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
гайка
Гость
|
|
« Ответ #2 : 07-07-2011 19:30 » |
|
не знакома с ним. один момент, сейчас прогуглю
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #3 : 07-07-2011 19:34 » |
|
В STL С++, List организуется как двухсвязанный список. Думаю что в шарпе примерно такое же решение. Хотя могу и ошибаться.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Dale
|
|
« Ответ #4 : 07-07-2011 19:36 » |
|
Прежде всего - о каком языке программирования идет речь?
|
|
|
Записан
|
Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.
Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard
Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #5 : 07-07-2011 19:37 » |
|
Dale, Вроде как в теме обозначен Шарп Правда структура чистое С/С++
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
гайка
Гость
|
|
« Ответ #6 : 07-07-2011 19:41 » |
|
Dale, я писала такую задачу на с++, теперь ее нужно перегнать под c#
Добавлено через 48 секунд: Finch, поняла. я что-то не нахожу этого в с#, ну как бы там не было, первостепенная задача - разобраться с unsafe и fixed
|
|
« Последнее редактирование: 07-07-2011 19:42 от гайка »
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #7 : 07-07-2011 19:43 » |
|
Гайка, Не заморачивайся на двухсвязанном списке. Используй контейнер. (Не изобретай велосипед).
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
гайка
Гость
|
|
« Ответ #8 : 07-07-2011 19:47 » |
|
есть у меня такая привычка - изобретать вещи, которые впоследствии никому кроме меня (да и мне вряд ли) не пригодятся=) к тому же использование контейнера для меня будет "открытием америки"...
|
|
|
Записан
|
|
|
|
Dale
|
|
« Ответ #9 : 07-07-2011 19:51 » |
|
первостепенная задача - разобраться с unsafe и fixed Это самая простая задача - просто выбросьте их обоих куда подальше. Они не имеют ни малейшего отношения к сути данной задачи.
|
|
|
Записан
|
Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.
Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard
Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
|
|
|
гайка
Гость
|
|
« Ответ #10 : 07-07-2011 19:59 » |
|
Dale, но ведь c# не дружит с указателями на указатели, ругается и кричит что он такого не умеет=) вот примерно так кричит:"Указатели и буферы фиксированного размера можно использовать только в небезопасном контексте"
|
|
|
Записан
|
|
|
|
Dale
|
|
« Ответ #11 : 07-07-2011 20:00 » |
|
А теперь вернемся к сути задачи. Прежде всего, в языке C#, в отличие от C++, структуры и классы - не одно и то же. Структура в C# имеет семантику значения, она не может иметь наследников и на нее нельзя получить ссылку (теоретически можно, конечно, за счет неявного создания класса-оболочки, но это особый случай). Класс имеет ссылочную семантику. Экземпляры класса создаются исключительно в "куче" и доступны только через ссылку. (Заодно приучаемся к мысли, что в чистом C# указателей нет и быть не может, есть только ссылки. На самом деле указатели оставлены как лазейка для работы с "нативным" кодом, но это сейчас тоже не обсуждается, ибо не тот случай). Добавлено через 4 минуты и 49 секунд:Dale, но ведь c# не дружит с указателями на указатели, ругается и кричит что он такого не умеет=) Конечно, не дружит (см. предыдущий пост). Ну и не надо его насиловать, чтобы дружил, насильно мил не будешь. Если взялись за Шарп, отбрасывайте плюсплюсовые повадки в сторону, они будут только сбивать с толку. Это совершенно другой язык, и говорят на нем совсем по-другому.
|
|
« Последнее редактирование: 07-07-2011 20:05 от Dale »
|
Записан
|
Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.
Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard
Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
|
|
|
гайка
Гость
|
|
« Ответ #12 : 07-07-2011 20:09 » |
|
ладно, приучаемся, уже почти приучились. моя наивность меня погубит. то есть мне про структуру тоже можно забыть?
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #13 : 07-07-2011 20:13 » |
|
Dale, но ведь c# не дружит с указателями на указатели, ругается и кричит что он такого не умеет=) вот примерно так кричит:"Указатели и буферы фиксированного размера можно использовать только в небезопасном контексте"
Гайка, а здесь нет буфера фиксированного размера. Есть только структура, а она не unsafe - это просто value type. По сути, это такая оптимизация над классами (может размещаться на стеке, копируется по значению). Поэтому, если не нужно взаимодействовать с unmanaged-кодом или оптимизировать по скорости создание-удаление огромного числа таких структур, то проще сделать class с публичными полями для тех же целей, имхо. Мороки меньше, всё по ссылкам.
|
|
|
Записан
|
|
|
|
Dale
|
|
« Ответ #14 : 07-07-2011 20:14 » |
|
Итак, для начала забываем C++. Забыли? Тогда пишем: class Client { public string number; public Client left; public Client right; } Конечно, с точки зрения хорошего стиля это форменное безобразие - открытые члены класса, причем не проинициализированные явно. Но для начала сойдет, хотя бы скомпилируется. Потом улучшим по ходу.
|
|
« Последнее редактирование: 08-07-2011 07:19 от Джон »
|
Записан
|
Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.
Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard
Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
|
|
|
гайка
Гость
|
|
« Ответ #15 : 07-07-2011 20:18 » |
|
так точно, Dale! написали, скомпиллировали
|
|
|
Записан
|
|
|
|
Dale
|
|
« Ответ #16 : 07-07-2011 20:21 » |
|
то есть мне про структуру тоже можно забыть? Эх, девушки, все вам лишь бы поскорее забыть... Ну в данном конкретном случае - да, можно немного подзабыть, поскольку для динамических структур структура (прошу прощения за тавтологию) - малопригодный материал. Но вообще структуры бывают весьма полезны, поэтому совсем уж забывать их ни к чему. Скорее отложим их пока про запас.
|
|
|
Записан
|
Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.
Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard
Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
|
|
|
гайка
Гость
|
|
« Ответ #17 : 07-07-2011 20:21 » |
|
а новичкам аватарки не полагаются, да? жаль=( Добавлено через 3 минуты и 18 секунд:Эх, девушки, все вам лишь бы поскорее забыть... я попрошу... 2.2 Обсуждение недостатков и какие-либо обвинения противоположного пола. Добавлено через 1 минуту и 19 секунд:ах да, в цитатах надо источник указывать... ну да ладно, вроде бы и так понятно
|
|
« Последнее редактирование: 07-07-2011 20:26 от гайка »
|
Записан
|
|
|
|
Dale
|
|
« Ответ #18 : 07-07-2011 20:28 » |
|
Это не недостаток, а скорее свойство. Типа "не бага, а фича". И не обвинение, а констатация факта. Ну а теперь построимпосадим маленькое такое деревце. Бонсай, с корнем и двумя листиками. Client root = new Client(); root.number = "Root";
root.left = new Client(); root.left.number = "Left Leaf";
root.right = new Client(); root.right.number = "Right Leaf"; Добавлено через 47 секунд:ах да, в цитатах надо источник указывать... Ничего, я не столь тщеславен.
|
|
« Последнее редактирование: 08-07-2011 07:19 от Джон »
|
Записан
|
Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.
Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard
Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
|
|
|
гайка
Гость
|
|
« Ответ #19 : 07-07-2011 20:33 » |
|
Ну а теперь построимпосадим маленькое такое деревце
это внутри свеженького класса client? Добавлено через 30 секунд:тьфу ты... цитаты...
|
|
« Последнее редактирование: 07-07-2011 20:34 от гайка »
|
Записан
|
|
|
|
Dale
|
|
« Ответ #20 : 07-07-2011 20:36 » |
|
это внутри свеженького класса client? Нет, это уже в основном коде. Например, прямо в Main(). Класс закрыли, первая версия вчерне готова. Добавлено через 4 минуты и 44 секунды:Потом, спасатели, аватара подождет. Что там с нашим многострадальным кодом, стало лучше?
|
|
« Последнее редактирование: 07-07-2011 20:41 от Dale »
|
Записан
|
Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.
Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard
Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
|
|
|
гайка
Гость
|
|
« Ответ #21 : 07-07-2011 20:43 » |
|
Dale, готово, теперь как я могу использовать этот класс в других классах? его нужно передавать в параметрах?
|
|
|
Записан
|
|
|
|
Dale
|
|
« Ответ #22 : 07-07-2011 20:44 » |
|
Для начала - что значит "использовать", каким образом?
|
|
|
Записан
|
Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.
Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard
Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
|
|
|
гайка
Гость
|
|
« Ответ #23 : 07-07-2011 20:45 » |
|
Да, пожалуй аватар - это не самая насущная проблема)
Добавлено через 3 минуты и 11 секунд: Dale, есть формочка создания нового клиента, допустим там только текстбокс, куда вводится номер паспорта и кнопка сохранить. в каком виде это будет храниться, я теперь сказать не могу, так как произошло крушение моего маленького мира.
|
|
« Последнее редактирование: 07-07-2011 20:48 от гайка »
|
Записан
|
|
|
|
Dale
|
|
« Ответ #24 : 07-07-2011 20:52 » |
|
Непонятно, зачем из живых людей деревья делать, тем более бинарные. Нет, я понимаю, деревья - наши зеленые друзья, но в чем смысл сей операции?
|
|
|
Записан
|
Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.
Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard
Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
|
|
|
гайка
Гость
|
|
« Ответ #25 : 07-07-2011 20:54 » |
|
я вообще-то потом еще собиралась в текстовый файл инфу запихать, но с этим я и сама разберусь, эт ерунда. Это курсовой проэкт, была бы моя воля, я бы ясен *** навояла бы бд на серваке по-быстренькому и никаких деревьев и хеш-таблиц, но тут не поспоришь...
|
|
|
Записан
|
|
|
|
Dale
|
|
« Ответ #26 : 07-07-2011 20:57 » |
|
Если "использовать" - это создать экземпляр клиента, то примерно в таком духе: // создаем новый экземпляр класса в "куче" Client cln = new Client(); // вставляем клиента в нужную ветвь нашего дерева
|
|
« Последнее редактирование: 08-07-2011 07:21 от Джон »
|
Записан
|
Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.
Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard
Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #27 : 07-07-2011 20:57 » |
|
Гайка, С базами не все так просто Нужно будет изучать целый раздел под названием ADO.NET
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
гайка
Гость
|
|
« Ответ #28 : 07-07-2011 21:02 » |
|
Finch, просто с базами мы уже имели дело и задача для нынешнего курсовика, если применять базы, совсем не сложная. по крайней мере есть, где хранить данные. а тут нужно извращаться. ведь все экземпляры класса при новом запуске программы благополучно удаляться. тут в голову начинают лезть мысли о текстовых файлах и всяких уловках, не сказанных в задании. раз не запретили - значит можно. Добавлено через 3 минуты и 1 секунду:Dale, вот так просто? бах и всё? могла бы и сама додуматься... эх, на что девушкам голова?
|
|
« Последнее редактирование: 07-07-2011 21:05 от гайка »
|
Записан
|
|
|
|
Dale
|
|
« Ответ #29 : 07-07-2011 21:07 » |
|
Для базы нужно еще и клиентское приложение, поскольку пользователи обычно напрямую с базами не работают. Тут-то и начнется самое веселое...
Нет, если уж преподаватель не потребовал задействовать базу, нужно только перекреститься с облегчением - 9/10 проблем прошли стороной.
|
|
|
Записан
|
Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.
Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard
Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
|
|
|
|