Как я могу оценить выражение с помощью sin, cos и других функций? - PullRequest
3 голосов
/ 17 марта 2012

Проведя некоторое исследование, я узнал о записи постфикса и о том, как анализировать выражение.

Мой код преобразуется в постфиксную нотацию, а затем оценивает ее с помощью стекового метода. Например:

Initial expression: 5 + 2^(4 - 1)
Postfix notation: 5 2 4 1 - ^ + 
Result: 13

Теперь я пытаюсь расширить эту программу, чтобы можно было вычислять выражения с помощью таких функций, как sin, cos, log, например: 5 + sin (2 + log (2)). Моя первоначальная идея заключалась в том, чтобы перед синтаксическим анализом найти эти функции, оценить их результаты и заменить их в строке. Но я не думаю, что это очень хорошая идея ...

Так, как я могу сделать это эффективным способом?

Вот некоторый код, написанный на c #, если он пригодится: http://pastebin.com/7wB81fyQ, но я бы предпочел некоторый псевдокод, чтобы я лучше понял, что пишу ... Я не один из те ребята, которые просто копируют и вставляют.

1 Ответ

1 голос
/ 17 марта 2012

Относитесь к этим функциям как к любому другому оператору плюс фигурные скобки. Сначала вычислите, что находится в фигурных скобках, затем выполните функцию.

Initial: 3 * Sin(4 + 5)
Postfix: 4 5 + Sin 3 *       (that's how I would enter it in a HP calculator)
or:      3 4 5 + Sin *

Кроме +, который использует два числа, Sin использует только одно число.

...