domingo, 2 de diciembre de 2012

Gauss-Jordan

Compilador: Borland C++
Código:

#include <conio.h>
#include <math.h>
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>

class gauss
{
 private:
  int n,k,Piv,f,c,a[4][4];
      float cero;
   public:
      gauss();
  int Lee_Datos(float a[4][4]);
  void Pivoteo(int n, int i, float a[4][4]);
  void Mueve_Ceros(int n, int i, float a[4][4]);
  void Imprime_matriz(int n, float a[4][4]);
      void Comprobacion(int n,  float a[4][4]);
};
gauss::gauss(){}
int gauss::Lee_Datos(float a[4][4])
{
 int n;
 int k,j;
 cout<<"\n  Número de Ecuaciones =";
 cin>>n;
 cout<<"\n";
 cout<<"\n Sistema de Ecuaciones Lineales:";
 cout<<"\n";
 for ( k=0; k < n; k++)
 {
  for (j=0; j< n+1; j++)
  {
   cout<<"\n["<<(k+1)<<","<<(j+1)<<"] = ";
   cin>>a[k][j];
  }
  cout<<endl;
 }
 return n;
}
void gauss::Pivoteo(int n, int i, float a[][4])
{
 int j;
 float Piv;
 Piv = a[i][i];
 for (j=i; j < n+1; j++)
  a[i][j] = a[i][j]/ Piv;
}
void gauss::Mueve_Ceros(int n, int i, float a[][4])
{
 int k,j;
 float Cero;
 for (k=0; k < n; k++)
 {
  if (k != i)
  {
   Cero = a[k][i];
   for (j=i; j<n+1; j++)
    a[k][j] = a[k][j] - (Cero * a[i][j]);
  }
 }
}

void gauss::Imprime_matriz(int n, float a[][4])
{
 int f,c;
 for (f=0; f< n; f++)
 {
  cout<<"\n";
  for (c=0; c< n+1; c++)
  {
   if (c == n)
    cout<<a[f][c];
   else
    cout<<"\t"<<a[f][c]<<"X"<<(c+1)<<"\t";
  }
 }
}
 void gauss:: Comprobacion(int n,  float a[4][4])
 {
  cout<<"Comprobacion"<<endl;
   cout<<"I1\t"<<a[0][n]<<"\n";
   cout<<"I2\t"<<a[1][n]<<"\n";
   cout<<"I3\t"<<a[2][n]<<"\n";
}
int main()
{
  int     N;
  int     f;
  int     i;
  float   A[4][4];

  gauss obj;
  inicio:
  cout<<"\n\tMétodo de eliminación de Gauss-Jordan";
  N=obj.Lee_Datos(A);
  for (i= 0; i < N; i++)
   {
    cout<<"\nRenglon"<<(i+1)<<"\n";
    obj.Imprime_matriz(N,A);
    cout<<"\n";
    obj.Pivoteo(N,i,A);
    obj.Imprime_matriz(N,A);
    cout<<"\n";
    obj.Mueve_Ceros(N,i,A);
    obj.Imprime_matriz(N,A);
    cout<<"\n";
   }
  cout<<"\n Resultado del sistema:\n";
  for (f =0; f < N; f++)
  cout<<" X "<<(f+1)<<" = \t"<<A[f][N]<<endl;
  obj.Comprobacion(N,A);
  getch();
  clrscr();
  goto inicio;
 return 0;
}

1 comentario: