![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
Гость_AHTOH_* |
![]() ![]()
Сообщение
#1
|
Гости ![]() |
Здравствуйте.
Имеется следующая непростая задача. Необходима функция, получающая на входе строку char* ( или AnsiString - но это в другую тему ), которая может содержать цифры, знаки +-*/^, скобки (), и переменную X ( в смысле, это не какое - либо значение, а всего - лишь буква ) и возвращает производную выражения. Т.е. ( тестовый пример ): char* function = "12*X+3*X^3"; char* derivative = GetDerivative( function ); // derivative == "12+9*X^2"; Задача очень непростая. Надеюсь, что кто нибудь ранее сталкивался с этой проблемой. Заранее спасибо. |
|
|
AD |
![]()
Сообщение
#2
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Впринципе эту задачу уже не так сложно решить!
![]() На входе - строка На выходе - список строк простейших операций: "X + Y" "X - Y" "X * Y" etc Добавить несколько операций несложно. и сделать правильный расчет тоже. Теперь на счет производной - для этого необходимо создать контейнер сопоставления операций. Т.е. что происходит с константами, суммами, произведениями и т.п. Если это делать с помощью Qt-шных средств, то по имеющимся тут темам это сделать не очень сложно! ![]() |
|
|
Andrew Selivanov |
![]() ![]()
Сообщение
#3
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 249 Регистрация: 9.10.2007 Из: Москва Пользователь №: 3 Спасибо сказали: 15 раз(а) Репутация: ![]() ![]() ![]() |
Здравствуйте. Имеется следующая непростая задача. Необходима функция, получающая на входе строку char* ( или AnsiString - но это в другую тему ), которая может содержать цифры, знаки +-*/^, скобки (), и переменную X ( в смысле, это не какое - либо значение, а всего - лишь буква ) и возвращает производную выражения. Т.е. ( тестовый пример ): char* function = "12*X+3*X^3"; char* derivative = GetDerivative( function ); // derivative == "12+9*X^2"; Задача очень непростая. Надеюсь, что кто нибудь ранее сталкивался с этой проблемой. Заранее спасибо. Если это учебная задачка, то решить ее лучше самому ![]() Подобная задачка очень обстоятельно расписана в труде Ахо и Ульмана "Компиляторы: Принципы, Технологии, Инструменты" которую не буду говорить где можно найти ![]() Если знаешь как решать, то задачка очень простая... |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 15.6.2025, 5:19 |