|
Модераторы: Poseidon |
|
Dreamer_0x01 |
|
|||
Терминатор Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 1 Всего: 12 |
суть проблемы - разбор арифметического выражения в символьнов виде.
то есть например есть выражение вида a+b*(sin(c-d*f)+ln(f+a/c)) соответственно, нужно его "разбить" в некоторое представление (например "польская запись выражения", или "дерево"), и сосчитать результат. В свое время делал такую вещь с помощью дерева, но получилось муторно с бинарными операторами типа "-", а также функциями типа sin, ln, pow(x,y), и др. Может у кого-нибудь есть ссылка на более менее работоспособный алгоритм. -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
Петрович |
|
|||
Эксперт Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: нет Всего: 55 |
Ищи информацию о компиляторах. Там всегда существует задача разбора и вычисления выражений.
А вообще, такое легко делается на стеке. Тем и хороша "польская запись выражения". -------------------- Все знать невозможно, но хочется |
|||
|
||||
Dreamer_0x01 |
|
|||
Терминатор Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 1 Всего: 12 |
Мне ведь не нужно свой скрипт писать или язык, достаточно лишь математических формул....А в той инфе, что я нашел, примеры есть только с 4мя арифметическими действиями. Я конечно их малость доработал таким образом, чтобы все, что мне надо было учтено, но может быть кто-то уже делал эту работу за меня и несколько более детально и лучше?
-------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
Denn |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 143 Регистрация: 6.8.2005 Репутация: нет Всего: 2 |
http://www.codeproject.com/cpp/#Parsers смотри muParser и mtParser. с примерами и исходниками.
|
|||
|
||||
Петрович |
|
|||
Эксперт Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: нет Всего: 55 |
Число действий не имеет значения. Значение имеет только типы операций. А их всего две: - бинарные, те у которых два операнда (+,-,* и т.п.) - унарные, те у которых один операнд (-,sin,ln). Ну и скобки - это типичная вложенность, легко обрабатывается рекурсией. -------------------- Все знать невозможно, но хочется |
|||
|
||||
Dreamer_0x01 |
|
|||
Терминатор Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 1 Всего: 12 |
Вот с унарными и мучаюсь =)
-------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
Гость_Михаил |
|
|||
Unregistered |
сдесь можно не только почитать но и посмотреть:
Собстна вычесление выражение в постфиксном формате http://www.spsu.edu/cs/faculty/bbrown/web_lectures/postfix/ сдесь вот ещё про вычесление выражений: http://www.arstdesign.com/articles/express...evaluation.html ну и вот на русском с примером... http://www.zarva.hotbox.ru/parsing.htm а вообще... такие вещи просто делаються используя инструментики типа FLEX для токинизирования текста и BISON для задания правил симантического разбора.... хотя знать изнутри тоже полезно Ж) |
|||
|
||||
Dreamer_0x01 |
|
|||
Терминатор Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 1 Всего: 12 |
А что такое flex и Bison ?
-------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
SoWa |
|
|||
Харекришна Профиль Группа: Комодератор Сообщений: 2422 Регистрация: 18.10.2004 Репутация: 3 Всего: 74 |
Тут такая тема поднималась, как я помню, два раза. Там я выкладывал два исходника: один без переменных, другой с ними.
Вот ссылка: Выражения Прости, если что не так. Это сообщение отредактировал(а) SoWa - 15.8.2005, 21:53 -------------------- Всем добра |
|||
|
||||
Dreamer_0x01 |
|
|||
Терминатор Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 1 Всего: 12 |
SoWa
Посмотрел ссылку. Хоть я и не силен в дельфи, но вижу, что в выложенном тобой коде разбираются только действия +-*/(). Или там уже что-то отмодерировали? -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
Guest |
|
|||
Unregistered |
у меня курсовая
|
|||
|
||||
Guest |
|
|||
Unregistered |
плиз!!!!!!!
|
|||
|
||||
SoWa |
|
|||
Харекришна Профиль Группа: Комодератор Сообщений: 2422 Регистрация: 18.10.2004 Репутация: 3 Всего: 74 |
Есть же код, где вводится выражение с переменными. Дай его в конце концов преподу!
А так ведь ничего сложного- просто Огромный парсер- писать долго. Возьми код за основу и сделай сам. Повторюсь: В правилах форума написано, что никто за тебя твою работу делать не будет. СУВ -------------------- Всем добра |
|||
|
||||
Void |
|
|||
λcat.lolcat Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 6 Всего: 173 |
Да их уже давно никто вручную не пишет... Тем более для таких простых грамматик. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
SoWa |
|
|||
Харекришна Профиль Группа: Комодератор Сообщений: 2422 Регистрация: 18.10.2004 Репутация: 3 Всего: 74 |
Это не простая грамматика. Для новичков это очень даже сложно. Другой вопрос- зачем. Такое сейчас требуется только для курсовых ит.п. Для остальных целей есть мощные мат.пакеты. -------------------- Всем добра |
|||
|
||||
Правила форума "Центр помощи" | |
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Центр помощи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |