static
double
Determinant (
double
** matrixA,
int
userN)
{
int
userM = 0;
int
counter = 0;
int
determinantACheck = 0;
int
determinantARow = 0;
int
determinantAColumn = 0;
int
sign = 1;
double
determinantResult = 0;
double
** matrixDeterminantA;
userM = userN - 1;
matrixDeterminantA = (
double
**)
malloc
(
sizeof
(
double
*) * userM);
for
(counter = 0; counter < userM; counter++)
{
matrixDeterminantA[counter] = (
double
*)
malloc
(
sizeof
(
double
) * userM);
}
if
(userN == 2)
{
determinantResult = (matrixA[0][0] * matrixA[1][1]) -
(matrixA[0][1] * matrixA[1][0]);
}
else
{
for
(counter = 0; counter < userN; counter++)
{
for
(determinantARow = 0; determinantARow < userM;
determinantARow++)
{
determinantACheck = 0;
for
(determinantAColumn = 0; determinantAColumn < userM;
determinantAColumn++)
{
if
(determinantAColumn == counter)
{
determinantACheck++;
}
matrixDeterminantA[determinantARow][determinantAColumn] =
matrixA[determinantARow + 1][determinantACheck];
determinantACheck++;
}
}
if
(counter % 2 == 1)
{
sign = -1;
}
else
{
sign = 1;
}
determinantResult += sign * matrixA[0][counter] *
Determinant(matrixDeterminantA,userM);
}
}
for
(counter = 0; counter < userM; counter++)
{
free
(matrixDeterminantA[counter]);
}
free
(matrixDeterminantA);
return
determinantResult;
}