Здравствуйте. Я пытался создать программу C, которая вычисляла бы определитель данной матрицы. Я немного закончил, но застрял, когда пытался создать функцию, которая находит подматрицу данной матрицы и компонента. Я прокомментировал как можно более четко в каждой части, но я считаю, что основная проблема с программой - последний метод subMatrix. Если бы вы могли помочь мне исправить это или представить альтернативное решение, я был бы очень признателен.
PS: Я знаю, что часть кода или комментарии могут быть неясными, поэтому не стесняйтесь задавать мне любые вопросы в комментариях.
#define MAX 10000
//here I was trying to make a "matrix" type to be able to return values in the function "subMatrix"
struct Matrix
{
double a[MAX][MAX];
};
struct Matrix subMatrix(int n, double m[n][n], int I, int J);
double determinant(int n, double M[n][n]);
int main()
{
int n, k = 0;
printf("how many rows does the matrix have");
scanf("%d", &n);
double Matrix[n][n];
double temp[n * n];
printf("enter the numbers in order with an enter after each one");
//gathering all the data from the user
for (int i = 0; i < n * n; i++)
{
scanf("%d", temp[i]);
}
//sorting the data into a matrix
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
Matrix[i][j] = temp[k];
k++;
}
}
//prints the determinant
printf("%d",determinant(n,Matrix));
return 0;
}
//this recursive function calculates the determinant
double determinant(int n, double M[n][n])
{
double det = 0;
//the functions continues to call its self until n=2
if (n == 2)
{
det = M[0][0] *M[1][1]-M[0][1]*M[1][0];
}
else
{
for (int i = 0; i < n; i++)
{
det += M[0][i] * determinant(n - 1, subMatrix(n, M, 0, i));
}
}
return det;
}
//here I tried to make the subMatrix of a given matrix and one of its components
//by sub matrix I mean the matrix that doesn't include the row and columns that are in line with one of the matrix componants
struct Matrix subMatrix(int n, double m[n][n], int I, int J)
{
int i, a = 0, b = 0;
int j;
struct Matrix M[n - 1][n - 1];
for (i = 0; i < n; i++)
{
if (i != I)
{
for (j = 0; j < n; j++)
{
if (J != j)
{
M[a][b] = m[i][j];
b++;
}
}
a++;
}
}
return M;
}