我在執行數學運算順序規則的有問題。 我有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