I figure you're gonna need a lot of functions that perform row-wise operations. Some rough code
Code:
int main ()
{
int * m, * identity;
int aspect, i, temp;
getMatrix (&m, &aspect);
makeIdentity (&identity, aspect);
// Now we have 2 matrices. Let's do the math...
for (i = 0; i < aspect; i++)
{
// Selects a row such that the ith element of the row is not 0
j = getithRow (m);
/* Example, performed on matrix:
0 5 6
3 4 5
2 3 5
will return 1... */
if (j != i)
{
// Anything we do to one matrix, we do to the other.
swapRows (m, j, i);
swapRows (identity, j, i);
}
/* 3 4 5 0 1 0
0 5 6 1 0 0
2 3 5 0 0 1 */
temp = m[i][i];
divideRow (m, i, temp);
divideRow (identity, i, temp);
/* 1 1.33 1.67 0 0 .33
0 5 6 1 0 0
2 3 5 0 1 0 */
for (j = 0; j < aspect; j++)
{
temp = m[j][i];
// This function does a lot, it subtracts
// from row j, row i's values times temp.
subRow (m, j, i, temp);
}
/* 1 1.33 1.67 0 0 .33
0 5 6 1 0 0
0 .33 1.67 0 1 .66 */
} // Then you move on to the next row.
return 0;
}
In addition to needing the functions, the code I posted will not work, but it should get the idea across (and it takes very little modification to repair).