
#include <iostream>
#include <fstream>
#include <cstdlib>
#include "ratio.h"

using namespace std;


int main(int narg, char* args[])
{
   ratio a[20][40];
   
   cout << "introduzca el orden de la matriz:\n";
   int n;
   cin >> n;

   cout << "introduzca la matriz:\n";
   for (int i=0; i<n; i++)
     {
      for (int j=0; j<n; j++)
         cin >> a[i][j];
      for (int j=0; j<n; j++)
         a[i][n+j]=  i==j;     // La identidad!!
     }

   for (int i=0; i<n; i++)     // eliminacion de Gauss
     {
      // poner en a[i][i] el elemento de mayor valor absoluto en la columna i
      int m= i;
      for (int k=i+1; k<i; k++)
         if (abs(a[m][i]) < abs(a[k][i]))
            m= k;

      // intercambiamos la fila m y la fila i
      for (int j=0; j<2*n; j++)
          {
           ratio x= a[i][j];
           a[i][j]= a[m][j];
           a[m][j]= x;
          }

      if (a[i][i]==0)
         {
          cerr << "Error - Matriz singular\n";
          return EXIT_FAILURE; 
         }

      // eliminacion de Gauss
      for (int k=i+1; k<n; k++)
         {
          ratio t= -a[k][i]/a[i][i];
          for (int j=i; j<2*n; j++)
             a[k][j]= a[k][j] + t*a[i][j];
         }
      for (int k=0; k<i; k++)
         {
          ratio t= -a[k][i]/a[i][i];
          for (int j=i; j<2*n; j++)
             a[k][j]= a[k][j] + t*a[i][j];
         }

      ratio x= a[i][i];
      for (int j=i; j<2*n; j++)
             a[i][j]= a[i][j] / x;
     }

   for (int i=0; i<n; i++)
      {
       for (int j=0; j<n; j++)
           cout << "\t" << a[i][n+j];
       cout << endl;
      }
   

   return EXIT_SUCCESS;
}

