#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
вместо