Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

Работа с формулами   Найти похожие ветки 

 
Empleado ©   (2012-03-19 17:46) [0]

Добрый день.

Возникла следующая необходимость.

Дано: Формула записанная "от руки" (составленная из заранее указанных наименований переменных).
Например, такого вида: A1 + (BD*0.35 - COS(HD + 3)) / (50*M - 11 * A2) + B1 * A3 + B2 + B3 * 0.10

Необходимо: Распарсить эту строку-формулу на элементарные составляющие, т.е. получить упорядоченный список операций, в котором используются не более двух операндов.
Т.е., надо получить следующий/подобный список:
STEP1   BD * 0.35
STEP2   HD + 3
STEP3   COS(STEP2)
STEP4   STEP1 - STEP3
STEP5   50 * M
STEP6   .....

Может кто уже пользуется подобным? Может кто-нибудь подскажет уже готовое решение?

Спасибо.

ПС. Уточню: задача не посчитать значение выражения по заданной формуле, подставляя в нее значения переменных. Задача именно распарсить в соответствии с законами математики, не вычисляя и не подставляя значения переменных.


 
Юрий Зотов ©   (2012-03-19 18:21) [1]

Обратная польская запись?


 
Kerk ©   (2012-03-19 18:29) [2]


> Empleado ©   (19.03.12 17:46)  

Обратная польская запись даст тебе дерево вычисления. Проходом снизу вверх это дерево легко преобразуется в нужный тебе список.


 
Empleado ©   (2012-03-19 19:50) [3]

Спасибо.


 
Димка На   (2012-03-19 20:10) [4]

Если не секрет для чего потом нужна эта формула. Был у меня где-то модуль для парсинга. (и для вычисления потом отпарсеного)


 
Empleado ©   (2012-03-19 20:36) [5]


> Димка На   (19.03.12 20:10) [4]

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


> Был у меня где-то модуль для парсинга. (и для вычисления
> потом отпарсеного)

Спасибо.
Уже сделали. По ходу, упростили реализацию.


 
Димка На   (2012-03-19 20:40) [6]

Только у меня немного другой список получался:


A1 + (BD*0.35 - COS(HD + 3)) / (50*M - 11 * A2) + B1 * A3 + B2 + B3 * 0.10
PushVar    a1
PushVar    bd
Push        3.50000000000000E-0001
Mul
PushVar    hd
Push        3.00000000000000E+0000
Add
!cos 1
Sub
Push        5.00000000000000E+0001
PushVar    m
Mul
Push        1.10000000000000E+0001
PushVar    A2
Mul
Sub
Div
Add
PushVar    B1
PushVar    A3
Mul
Add
PushVar    B2
Add
PushVar    B3
Push        1.00000000000000E-0001
Mul
Add


 
Димка На   (2012-03-19 20:41) [7]

Ну раз не надо так не надо:) Тем более это я делал на работе и по работе, так что мне наверное нельзя это выкладывать:)



Страницы: 1 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.415 c
15-1352775498
Abcdef123
2012-11-13 06:58
2013.03.22
Современные тенденции пользовательского интерфейса


15-1352200214
Стратокастер
2012-11-06 15:10
2013.03.22
Небольшой вопрос по C++


2-1340008979
webpauk
2012-06-18 12:42
2013.03.22
как впихнуть в ImageList иконку нестандартного размера


15-1349277864
AV
2012-10-03 19:24
2013.03.22
Задача по математике, 4й класс.


2-1334139178
Jimmy
2012-04-11 14:12
2013.03.22
Обработка 32-битного PNG с помощью ScanLine