The following function finds the inverse of a matrix (actually its not complete at all):

Code:
void Matrix::Inverse()
{
  float det;
  det = this->Determinant();
  if(det == 0)
  {
    cout << "The matrix does not have an inverse.";
    return;
  }
  
  Matrix *identity = new Matrix(a,b); // creates nxn matrix
  identity->Identity(); // make it an identity matrix

  Matrix *temp = new Matrix(a,b);
  temp = this; // so we don't change the original matrix

  // forward elimination steps
  for(x = 0; x < a; x++) // a is the number of rows
  {
      y = 0;
      temp->elimination(((float)(temp->Array[x+1][y]/temp->Array[y][y])), (y+1), (x+2));
      temp->showMatrix();

  }    
}

elimination is defined as:

Code:
void Matrix::elimination(float multiple, int row1, int row2)
{
  // subtracts multiple*row1 from row2

  float temp;
  
  for(y = 0; y < b; y++)
  {
    temp = Array[row2-1][y] - (multiple*Array[row1-1][y]);
    Array[row2-1][y] = temp;
  }
}

Anyways, if I have the matrix A:

2 1 3
1 2 3
4 2 1


if I do A.Inverse() it SHOULD do this:

2 1 3
0 1.5 1.5
4 2 1

2 1 3
0 1.5 1.5
0 0 -5


But it only does ONE step - it should display a second matrix, even if it isn't right, shouldn't it?

here's rest of the code for reference:

http://dydx.no-ip.com:8080/matrix.cpp
http://dydx.no-ip.com:8080/matrix.h

Thanks!