C++ I';我的c+中出现错误+;密码&;如何在c+中求矩阵的行列式和逆+;?

C++ I';我的c+中出现错误+;密码&;如何在c+中求矩阵的行列式和逆+;?,c++,matrix,calculator,inverse,C++,Matrix,Calculator,Inverse,我在试着做矩阵计算器。在其中,我几乎完成了矩阵中要求的所有操作。所以现在我试图编写代码来寻找矩阵的行列式和逆,但我得到的错误是:-类型为“int”的参数与类型为“double(*)[100]”的参数不兼容。 我正在使用VisualStudio2019。 int dat(int n, double mat[100][100]) //function { Matrix s1; double det = 0; int p, r, c, subi, i, j, subj;

我在试着做矩阵计算器。在其中,我几乎完成了矩阵中要求的所有操作。所以现在我试图编写代码来寻找矩阵的行列式和逆,但我得到的错误是:-类型为“int”的参数与类型为“double(*)[100]”的参数不兼容。

我正在使用VisualStudio2019。
int dat(int n, double mat[100][100]) //function
{
    Matrix s1;
    double det = 0;
    int p, r, c, subi, i, j, subj;
    int submat[10][10];
    s1.getmatrix1();
    r = c = n;
    if (n == 2)
        return((mat[0][0] * mat[1][1]) * (mat[1][0] * mat[0][1]));
    else
    {
        for (p = 0; p < n; p++)
        {
            subi = 0;
            for (i = 0; i < n; i++)
            {
                subj = 0;
                for (j = 0; j < n; j++)
                {
                    if (j == c)
                        continue;
                    submat[subi][subj] = mat[i][j];
                    subj++;
                }
                subi++;
            }
            det = det + (pow(-1, p) * mat[0][p] * dat(n - 1, submat[i][j])); //here at 'submat' i'm getting that error. 
        }
    }
    return 0;
};
int-dat(int-n,双垫[100][100])//函数
{
矩阵s1;
双det=0;
int p,r,c,subi,i,j,subc;
int submat[10][10];
s1.getmatrix1();
r=c=n;
如果(n==2)
返回((mat[0][0]*mat[1][1])*(mat[1][0]*mat[0][1]);
其他的
{
对于(p=0;p
您正在将submat的第(i,j)个元素传递给dat()

submat[i][j]是一个int。但是dat()函数需要一个2-d的double数组(第二个维度是100,所以甚至可以用

dat(n-1, submat)

不正确

除了编译错误之外,您的代码还有几个问题

1) 由于
dat
期望第二个参数为数组,因此函数调用应为:

det = det + (pow(-1, p) * mat[0][p] * dat(n - 1, submat));
2) 2x2矩阵的行列式应按如下方式计算:

return((mat[0][0] * mat[1][1]) - (mat[1][0] * mat[0][1]));
3)
int submat[10][10]
应该是
double submat[100][100]
,因为它需要能够包含(几乎)与
mat
一样多的元素,并且应该存储相同的数据类型

4) 返回值应该是
double
,而不是
int

5) 条件
if(j==c)
应该是
if(j==p)
,因为
p
是我们想要排除的行/列

6)
i
循环应该从1开始,因为子矩阵中不包括第一行/列

7)
s1
r
c
从未使用过,可以删除

8) 返回值应为
det


注:此算法的时间复杂度称为
O(n!)
(请参阅)。如果您想将其用于生产代码,我强烈建议您使用基于矩阵分解的更高效算法。

错误消息有什么不清楚的?显然,不能将
int
传递给需要
double(*)[100]
的函数。