【发布时间】:2019-05-14 17:05:35
【问题描述】:
我正在尝试计算行列式,但构建失败。 有代码,错误下降的地方。
void getCofactor(double mat[N][N], double temp[N][N], int p, int q, int n)
{
int i = 0, j = 0;
// Looping for each element of the matrix
for (int row = 0; row < n; row++)
{
for (int col = 0; col < n; col++)
{
// Copying into temporary matrix only those element
// which are not in given row and column
if (row != p && col != q)
{
temp[i][j++] = mat[row][col];
// Row is filled, so increase row index and
// reset col index
if (j == n - 1)
{
j = 0;
i++;
}
}
}
}
}
double determinant(double **mat, int n)
{
double D = 0; // Initialize result
// Base case : if matrix contains single element
if (n == 1)
return mat[0][0];
double temp[N][N]; // To store cofactors
int sign = 1; // To store sign multiplier
// Iterate for each element of first row
for (int f = 0; f < n; f++)
{
// Getting Cofactor of mat[0][f]
getCofactor(mat, temp, 0, f, n); //ERORRRRRRRRRRR
D += sign * mat[0][f] * determinant(temp, n - 1);
// terms are to be added with alternate sign
sign = -sign;
}
return D;
}
如何解决这个问题? main.cpp:49:50: 错误:无法将参数 '1' 的 'double (*)[4]' 转换为 'double' 到 'double 行列式(double**, int)'* * D += 符号 * mat[0][f] * 行列式(temp, n - 1);
【问题讨论】:
-
如果您知道它的大小,为什么将
mat传递给determinant作为double **?使用double mat[N][N],或者更好的是,使用std::array或std::vector。 -
您可以通过创建一个单独的指针数组来解决此问题,并将它们初始化为指向二维数组的等效行,然后传递它。
double **是指向指针类型的指针。这与二维数组不同。
标签: c++ function multidimensional-array