ユーザーが定義済みの方法で関数を定義できる数学 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 を使用する必要があります。これはエレガントな解決策ではありません。解決方法はありますか?