0

ユーザーが定義済みの方法で関数を定義できる数学 C# アプリケーションを作成します。

COS({x}+3*(2+SQRT({x})))

評価には、Shunting-Yard アルゴリズムを使用します。リストに次の入力を生成する上記の文字列をトークン化する関数があります。

FUNCTION,OPEN_PARENTHESIS,VARIABLE,OPERATOR,NUMBER,OPERATOR,OPEN_PARENTHESIS,NUMBER,OPERATOR,FUNCTION,OPEN_PARENTHESIS,VARIABLE,CLOSE_PARENTHESIS,CLOSE_PARENTHESIS,CLOSE_PARENTHESIS.

これはうまくいきますが、負の数に問題があります。減算のときと負の符号のときの減算演算子の処理方法がわかりません。

関数は文字列を反復処理し、その中のパターンを検索します (たとえば、i. 文字が '{' の場合、(i+1) 文字は小文字で、(i+2). 文字は '} である必要があります)。 ', 変数を格納し、(i+3). 文字を続けます。そうしないと、構文エラーがスローされます.) 現在、この関数は負の数を受け入れ、減算の代わりに負の数との乗算を受け入れ、'+' を使用します。 of 3-1 3+(-1)*1 を使用する必要があります。これはエレガントな解決策ではありません。解決方法はありますか?

4

2 に答える 2

0

行の先頭、開き括弧の直後、または別の記号の後に - が表示されている場合、その後の数字は負です。

于 2013-03-26T11:45:19.367 に答える
0

C# スタイルの式を解析できる小さなオープン ソース ライブラリを作成しました。

https://github.com/davideicardi/DynamicExpresso

カスタム関数 (COS、SQRT など) を作成し、変数またはパラメーター (x) を挿入できます。または、組み込みの C# 関数 (Math.Sqrt など) を使用できます。

ライブ デモはhttp://dynamic-expresso.azurewebsites.net/にあります。

たぶん、このライブラリはあなたの仕事をスピードアップすることができます.

于 2013-03-26T12:02:35.940 に答える