Name: Anonymous 2007-08-27 4:47 ID:3rBvLctt
#include <stdio.h>
int powerOfOne (int power);
int **submatrix (int row, int order, int **matrix);
int determinantFn (int **matrix, int order);
void *malloc (size_t size);
int **deleteRow (int **matrix, int row, int width, int height);
int **deleteColumn (int **matrix, int column, int width, int height);
int **inputMatrix (int *orderptr);
int **
inputMatrix (int *orderptr)
{
int i, j;
printf ("Input the order of the matrix:\n");
scanf ("%d", orderptr);
int **matrix = malloc (*orderptr * sizeof (int *));
for (i = 0; i < (*orderptr); i++)
{
matrix[i] = malloc (*orderptr * sizeof (int));
}
for (i = 0; i < *orderptr; i++)
{
for (j = 0; j < *orderptr; j++)
{
printf ("row %d, column %d:\n", i, j);
scanf ("%d", &matrix[i][j]);
}
}
return matrix;
}
int **
deleteRow (int **matrix, int row, int width, int height)
{
int **newMatrix = malloc ((height - 1) * sizeof (int *));
int i;
for (i = 0; i < height - 1; i++)
{
newMatrix[i] = malloc (width * sizeof (int));
}
int j;
for (j = 0; j < width; j++)
{
for (i = row; i < height - 1; i++)
{
matrix[i][j] = matrix[i + 1][j];
}
}
for (i = 0; i < height - 1; i++)
{
for (j = 0; j < width; j++)
{
newMatrix[i][j] = matrix[i][j];
}
}
}
}
return newMatrix;
}
int **
deleteColumn (int **matrix, int column, int width, int height)
{
int **newMatrix = malloc (height * sizeof (int *));
int i;
for (i = 0; i < height; i++)
{
newMatrix[i] = malloc ((width - 1) * sizeof (int));
}
int j;
for (i = 0; i < height; i++)
{
for (j = column; j < width - 1; j++)
{
matrix[i][j] = matrix[i][j + 1];
}
}
for (i = 0; i < height; i++)
{
for (j = 0; j < width - 1; j++)
{
newMatrix[i][j] = matrix[i][j];
}
}
return newMatrix;
}
int **
submatrix (int row, int order, int **matrix)
{
int i;
int **submatrix;
submatrix = malloc (sizeof (int *) * (order - 1));
for (i = 0; i < order - 1; i++)
{
submatrix[i] = malloc (sizeof (int) * (order - 1));
}
submatrix = deleteRow (deleteColumn (matrix, 0, 3, 3), row, 2, 3);
return submatrix;
}
int
determinantFn (int **matrix, int order)
{
int determinant = 0;
int j;
if (order > 2)
{
for (j = 0; j <= order; j++)
{
determinant = determinant + (matrix[1][j] * powerOfOne (1 + j) *
determinantFn (submatrix
(j, order, matrix),
order - 1));
}
}
else
{
determinant = matrix[0][0] * matrix[1][1] - matrix[1][0] * matrix[0][1];
}
return determinant;
}
int
powerOfOne (int power)
{
int result = -1;
int i;
if (power > 1)
{
for (i = 2; i <= power; i++)
{
result = result * -1;
}
}
return result;
}
int
main (int argc, char **argv)
{
int **inMatrix;
int result;
int order;
inMatrix = inputMatrix (&order);
result = determinantFn (inMatrix, order);
printf ("Determinant of Inputted Matrix is %d\n", result);
return 0;
}
int powerOfOne (int power);
int **submatrix (int row, int order, int **matrix);
int determinantFn (int **matrix, int order);
void *malloc (size_t size);
int **deleteRow (int **matrix, int row, int width, int height);
int **deleteColumn (int **matrix, int column, int width, int height);
int **inputMatrix (int *orderptr);
int **
inputMatrix (int *orderptr)
{
int i, j;
printf ("Input the order of the matrix:\n");
scanf ("%d", orderptr);
int **matrix = malloc (*orderptr * sizeof (int *));
for (i = 0; i < (*orderptr); i++)
{
matrix[i] = malloc (*orderptr * sizeof (int));
}
for (i = 0; i < *orderptr; i++)
{
for (j = 0; j < *orderptr; j++)
{
printf ("row %d, column %d:\n", i, j);
scanf ("%d", &matrix[i][j]);
}
}
return matrix;
}
int **
deleteRow (int **matrix, int row, int width, int height)
{
int **newMatrix = malloc ((height - 1) * sizeof (int *));
int i;
for (i = 0; i < height - 1; i++)
{
newMatrix[i] = malloc (width * sizeof (int));
}
int j;
for (j = 0; j < width; j++)
{
for (i = row; i < height - 1; i++)
{
matrix[i][j] = matrix[i + 1][j];
}
}
for (i = 0; i < height - 1; i++)
{
for (j = 0; j < width; j++)
{
newMatrix[i][j] = matrix[i][j];
}
}
}
}
return newMatrix;
}
int **
deleteColumn (int **matrix, int column, int width, int height)
{
int **newMatrix = malloc (height * sizeof (int *));
int i;
for (i = 0; i < height; i++)
{
newMatrix[i] = malloc ((width - 1) * sizeof (int));
}
int j;
for (i = 0; i < height; i++)
{
for (j = column; j < width - 1; j++)
{
matrix[i][j] = matrix[i][j + 1];
}
}
for (i = 0; i < height; i++)
{
for (j = 0; j < width - 1; j++)
{
newMatrix[i][j] = matrix[i][j];
}
}
return newMatrix;
}
int **
submatrix (int row, int order, int **matrix)
{
int i;
int **submatrix;
submatrix = malloc (sizeof (int *) * (order - 1));
for (i = 0; i < order - 1; i++)
{
submatrix[i] = malloc (sizeof (int) * (order - 1));
}
submatrix = deleteRow (deleteColumn (matrix, 0, 3, 3), row, 2, 3);
return submatrix;
}
int
determinantFn (int **matrix, int order)
{
int determinant = 0;
int j;
if (order > 2)
{
for (j = 0; j <= order; j++)
{
determinant = determinant + (matrix[1][j] * powerOfOne (1 + j) *
determinantFn (submatrix
(j, order, matrix),
order - 1));
}
}
else
{
determinant = matrix[0][0] * matrix[1][1] - matrix[1][0] * matrix[0][1];
}
return determinant;
}
int
powerOfOne (int power)
{
int result = -1;
int i;
if (power > 1)
{
for (i = 2; i <= power; i++)
{
result = result * -1;
}
}
return result;
}
int
main (int argc, char **argv)
{
int **inMatrix;
int result;
int order;
inMatrix = inputMatrix (&order);
result = determinantFn (inMatrix, order);
printf ("Determinant of Inputted Matrix is %d\n", result);
return 0;
}