![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
fin65 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 24.1.2008 Репутация: нет Всего: нет |
Вечер добрый! только сразу не посылайте) Нужна помощь такая задача на С#
1) Построить дерево , которое может содержать Node, Dinopl (Бинарную операцию), Const, Var(Переменную). То есть это похоже на дерево токенов, при обработке некоего алгебраического выражения: BinOp("+") / \ / \ Const(5) BinOp("*") / \ / \ Var(x) Const(4) Это дерево в итоге надо забить в строку, причем польской записью. Нужен ещё Cash, чтобы он содержал выводы в строку деревьев и их повторно не пускать по алгоритму. Заранее спасибо за помощь! |
|||
|
||||
SpaceSpace |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 366 Регистрация: 10.4.2007 Где: Самара Репутация: нет Всего: 10 |
чувствую себя неандертальцем. Объясни плз что такое польская запись?
-------------------- Репутация - самое ценное, что есть у человека. Зарабатывают годы, теряют за мгновение. 70-565 MCPD Enterprise 3.5 |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 9 Всего: 49 |
fin65, из чего построить? Если из инфиксной нотации, то просто строишь обратную польскую запись, и тут же "выполняешь" результат, но не прямо, а укладывая в стек Const/Var, для констант/переменных, и ноду Dinopl(StackTop1, StackTop2) для операций. В результате получишь в стеке корневую вершину.
SpaceSpace, http://ru.wikipedia.org/wiki/%D0%9E%D0%B1%...%B8%D1%81%D1%8C |
|||
|
||||
fin65 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 24.1.2008 Репутация: нет Всего: нет |
Материал из Википедии — свободной энциклопедии
Обра́тная по́льская нота́ция (ОПН) (Обратная польская запись, Обратная бесскобочная запись (ОБЗ), Постфиксная нотация, Бесcкобочная символика Лукашевича, Польская инверсная запись, Полиз) — форма записи математических выражений, в которой операнды расположены перед знаками операций. ![]() |
|||
|
||||
Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 8 Всего: 67 |
fin65, если есть проблемы с реализацией, насколько я помню на algolist.ru была реализация на C....переделать вод .NET не составит труда.
-------------------- СУВ, Partizan. |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 18 Всего: 142 |
Что касается приведённого дерева: по рисованию - 5, смысл изображённого выражения мне лично не понятен. ИМХО - бинарный оператор потому так и называется, что узел, его представляющий, должен иметь два дочерних узла, здесь же неясно на что умножается 4. Константа вообще дочерних узлов не имеет, если же она является значением переменной, то тогда вообще непонятно зачем переменную в дерево включать. Если дерево построено по каким-то другим законам, то их по крайней мере как-то описать надо, да и выражение представленное деревом хотелось бы увидеть.
Теперь что касается самой формулировки вопроса. Я вообще не понял, что нужно сделать. "Построить дерево" - что это значит? О формате входных данных из которых будем строить неизвестно ничего, из чего строится дерево - тоже не ясно, в каком виде представить выходные данные...польская запись - понятие черезчур общее, чтобы считать вопрос сформулированным. Например: 1.выражение 3+4 польская запись(постфиксная) 34+ вроде всё нормуль 2. Выражение 12+3 польская запись 123+ 3. Выражение 1+23 польсая запись 123+ то бишь полностью совпадает с предыдущей Таким образом в выходном формате надо предусмотреть как минимум сепараторы для операндов Бинарный оператор - тоже понятие растяжимое. Для них, как минимум надо определить два свойства: приоритет и ориентацию(левая или правая); в противном случае построить дерево правильно не получится. Что касается парсинга текста, то об этом написана кача книг и обсудить этот вопрос целиком в рамках форума невозможно. Книги порекомендовать - другое дело. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
fin65 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 24.1.2008 Репутация: нет Всего: нет |
привести дерево для выражения 5 + x*4
|
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 9 Всего: 49 |
fin65, приведи
|
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 18 Всего: 142 |
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | .NET для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |