我在执行数学运算顺序规则的有问题。 我有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