2013-12-13 2 views
0

Я использую DDMathParser для синтаксического анализа строковых выражений. Я работаю над одним выражением «(2+x)6+2x+2y=5y+2x», я пытаюсь его проанализировать и оценить с помощью DDMathParser. Его можно рассматривать как функцию первой степени, которую мне нужно решить с помощью Objective C.Не удается решить математическое выражение с помощью DDMathParser

Ребята какие-нибудь идеи?

Помощь была бы высоко оценена.

DDExpression * e = [DDExpression expressionFromString:expression error:error]; 
NSNumber *num = [e evaluateWithSubstitutions:substitutions evaluator:nil error:error]; 
+1

Какая ошибка или проблема вы получаете? –

+0

Не сталкивается с какой-либо ошибкой, но получает 0 как «num», что не должно быть результатом. – Kuldeep

+0

@Dave Delong вы можете помочь? – Kuldeep

ответ

3

Я не знаю много о DDMathParser (ОК, я ничего об этом не знаю), но taking a look at the documentation дает некоторые подсказки о том, что происходит не так с вашим кодом.

Основываясь на документации, я не мог найти пример того, где DDMathParser может обрабатывать symbolic выражения. Все примеры на странице использования показывают числовые выражения.

Для символической математики см. Symbolic Math Library in C/C++/Obj-C.

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

Однако, если вы просто пытаетесь заменить значения для x и y, вы должны использовать $ знак перед ними, как documentation говорит:

Если вы не знаете, что значение а конкретный термин должен быть, когда строка построена, это нормально; просто использовать переменную:

 NSString *math = @"6 * $a"; 

Так что, если вы просто хотите, чтобы заменить значения в этом выражении можно использовать:

string expression = @"(2+$x)6+2*$x+2*$y"; 

Затем заполнить значениями.

NSDictionary *s = @{@"x" : 42, @"y" : 43}; 

И оценить.

DDMathEvaluator *eval = [DDMathEvaluator sharedMathEvaluator]; 
NSLog(@"%@", [eval evaluateString:expression withSubstitutions:s]);