Ошибка: не удается преобразовать ‘double (*) [ (порядок -1)]’ в ‘double (*) [100]

#c #c 17

#c #c 17

Вопрос:

Я пишу код для поиска определителя данной матрицы после считывания его из текстового файла, который имеет тот же формат предоставления данных о матрице. Вот пример matrix.txt файл:


3
1 2 3
4 5 6
7 8 9


Мой код:

 #include <iostream>
#include <fstream>
#include <cmath>

using namespace std;
#define N 100
double det (double mat [N] [N], int order);

int main ()
{
    ifstream fin;
    fin.open ("matrix.txt");
    int n;
    double readMatrix [N][N];
    fin >> n;
    for (int i = 0; i < n; i  )
    {
        for (int j = 0; j < n; j  )
        {
            fin >> readMatrix [i][j];
        }
    }
    fin.close();
    cout << det(readMatrix, n) << endl;;


    return 0;
}

double det (double mat [N] [N], int order)
{
    double coff [order - 1][order - 1];
    double delta = 0;

    if (order == 2)
    {
        return ((mat[0][0])*(mat [1][1]) - (mat [0][1])*(mat [1][0]));
    }

    for (int i = 0; i < order; i  )
    {
        for (int k = 1; k < order; k  )
        {
            for(int j = 0; j < k; j  )
            {
                coff [k-1][j] = mat [k][j];
            }
            for (int j = k   1; j < order; j  )
            {
                coff [k-1][j-1] = mat [k][j];
            }
        }

        delta  = (pow(-1, i) * mat[0][i] * det( coff, order - 1 ));
    }
    return delta;
}
 

Я получаю сообщение об ошибке delta = (pow(-1, i) * mat[0][i] * det( coff, order - 1 )); . Это ошибка Ошибка: не удается преобразовать ‘double () [(порядок -1)]’ в ‘double () [100]. Я поискал в Интернете, но люди, получившие эту ошибку, обычно совершали ту же ошибку, передавая размер массива в функцию, т.е. function (array [n]) .

Комментарии:

1. Массив переменной длины не поддерживается в стандартном C . Вы должны использовать std::vector .

2. double coff [order - 1][order - 1]; недопустимо C . Вы знаете std::vector ? Использовать это будет намного проще.

3. double coff [order - 1][order - 1] определяет переменную типа, отличного от double[N][N] . В то det время как ожидает параметр типа double[N][N]

4. @IgorTandetnik double (*)[N] , поскольку это параметр.

5. pow(-1, i) это очень плохой способ получить альтернативный знак. Используйте i % 2 == 0 ? 1 : -1 вместо