私はの問題を抱えており、数学演算の命令をの規則で自分のコードに実装しています。 私は2つの配列を持っています。行列の配列(最大100個の行列)と演算の配列(最大99個の演算)。演算は、行列の加算、減算、および乗算(+ - *で表される)のみです。数学演算のアルゴリズムのアルゴリズム
私の行列は構造ですが、それは単なる詳細です。私はそれらに関する全ての機能を持っています。
私は操作を実行するための機能も持っています。
struct Matrix compute(struct Matrix mat1, struct Matrix mat2, char op)
この機能には、操作を決定して正しいものを実行するスイッチがあります。
改善が必要なコードはこれです。現時点で
// counter = number of matrices in the array
// therefore there's also counter-1 operations
struct Matrix temp = compute(matrices[0], matrices[1], operations[0]);
for(int j = 1; j < counter; ++j)
{
temp = compute(temp, matrices[j+1], operations[j]);
}
get_matrix(temp); //outputs the matrix to stdout
は、このコードは、(入力が正しかったと操作が実行され得ると仮定)乗算を含まないマトリックスおよび操作の正確全ての配列を評価します。
何が必要ですか?私は正しい方向にバットでキックが必要です。
オペランドが行列である式に対して演算の順序を強制する方法が必要だと言っていますか?そして、現在、例えば乗算に失敗する。オペランドが数字の場合は「1 + 2 + 4 * 0」は「0」と評価される。 – Miket25
@ Miket25はい、まさに私が言っていることです。また、コードのこの部分にはメモリリークがあります(マトリックスは動的に割り当てられます)。ただし、Imは、表示されたコードの下に2行だけテンポラリ行列を解放します。しかし、それは私が後で解決できる問題です。 – Welsy
リサーチビルディング**抽象構文木**。このツリー内のノードは行列とオペランドになります。次に、このツリーを再帰的にエバリュートし、操作の順序を達成します。 **再帰的な降下解析**をお勧めします。それは簡単に学ぶことができます。再帰的降下構文解析による演算器の順序については、良い例をオンラインで手に入れて、この問題に適用することができます。 – Miket25