Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C#] дерево польской записью 
:(
    Опции темы
fin65
Дата 3.12.2008, 01:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 24.1.2008

Репутация: нет
Всего: нет



Вечер добрый! только сразу не посылайте) Нужна помощь такая задача на С#

1) Построить дерево , которое может содержать Node, Dinopl (Бинарную операцию), Const, Var(Переменную). То есть это похоже на дерево токенов, при обработке некоего алгебраического выражения:
                                    
                                     BinOp("+")
                                     /       \
                                    /         \
                              Const(5)   BinOp("*")
                                  /             \
                                 /                \
                             Var(x)            Const(4)
 Это дерево в итоге надо забить в строку, причем польской записью. Нужен ещё Cash, чтобы он содержал выводы в строку деревьев и их повторно не пускать по алгоритму. 


Заранее спасибо за помощь! 
PM MAIL   Вверх
SpaceSpace
Дата 3.12.2008, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 10.4.2007
Где: Самара

Репутация: нет
Всего: 10



чувствую себя неандертальцем. Объясни плз что такое польская запись?


--------------------
Репутация - самое ценное, что есть у человека. Зарабатывают годы, теряют за мгновение.
70-565
MCPD Enterprise 3.5 
PM MAIL   Вверх
PashaPash
Дата 3.12.2008, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 9
Всего: 49



fin65, из чего построить? Если из инфиксной нотации, то просто строишь обратную польскую запись, и тут же "выполняешь" результат, но не прямо, а укладывая в стек Const/Var, для констант/переменных, и ноду Dinopl(StackTop1, StackTop2) для операций. В результате получишь в стеке корневую вершину.

SpaceSpacehttp://ru.wikipedia.org/wiki/%D0%9E%D0%B1%...%B8%D1%81%D1%8C


--------------------
PM MAIL WWW   Вверх
fin65
Дата 3.12.2008, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 24.1.2008

Репутация: нет
Всего: нет



Материал из Википедии — свободной энциклопедии
         Обра́тная по́льская нота́ция (ОПН) (Обратная польская запись, Обратная бесскобочная запись (ОБЗ), Постфиксная нотация, Бесcкобочная символика Лукашевича, Польская инверсная запись, Полиз) — форма записи математических выражений, в которой операнды расположены перед знаками операций.

 smile 
PM MAIL   Вверх
Partizan
Дата 3.12.2008, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 8
Всего: 67



fin65, если есть проблемы с реализацией, насколько я помню на algolist.ru была реализация на C....переделать вод .NET не составит труда.


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
diadiavova
Дата 3.12.2008, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 18
Всего: 142



Что касается приведённого дерева: по рисованию - 5, смысл изображённого выражения мне лично не понятен. ИМХО - бинарный оператор потому так и называется, что узел, его представляющий, должен иметь два дочерних узла, здесь же неясно на что умножается 4. Константа вообще дочерних узлов не имеет, если же она является значением переменной, то тогда вообще непонятно зачем переменную в дерево включать. Если дерево построено по каким-то другим законам, то их по крайней мере как-то описать надо, да и выражение представленное деревом хотелось бы увидеть.

Теперь что касается самой формулировки вопроса.
Я вообще не понял, что нужно сделать. "Построить дерево" - что это значит? О формате входных данных из которых будем строить неизвестно ничего, из чего строится дерево - тоже не ясно, в каком виде представить выходные данные...польская запись - понятие черезчур общее, чтобы считать вопрос сформулированным.

Например:

1.выражение
 3+4
   польская запись(постфиксная)
 34+
вроде всё нормуль
2. Выражение 
12+3
польская запись
123+
3. Выражение 1+23
польсая запись 
123+
то бишь полностью совпадает с предыдущей

Таким образом в выходном формате надо предусмотреть как минимум сепараторы для операндов

Бинарный оператор - тоже понятие растяжимое. Для них, как минимум надо определить два свойства: приоритет и ориентацию(левая или правая); в противном случае построить дерево правильно не получится. 
Что касается парсинга текста, то об этом написана кача книг и обсудить этот вопрос целиком в рамках форума невозможно. Книги порекомендовать - другое дело.




--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
fin65
Дата 4.12.2008, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 24.1.2008

Репутация: нет
Всего: нет



привести дерево для выражения 5 + x*4


PM MAIL   Вверх
PashaPash
Дата 4.12.2008, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 9
Всего: 49



fin65, приведи


--------------------
PM MAIL WWW   Вверх
diadiavova
Дата 5.12.2008, 04:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 18
Всего: 142



Цитата(fin65 @  4.12.2008,  20:47 Найти цитируемый пост)
привести дерево для выражения 5 + x*4




                                                                  +
                                                                  /\
                                                                /    \
                                                               5     *
                                                                      /\
                                                                    /    \
                                                                   x      4


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0911 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.