You are on page 1of 3

#include<conio.

h>
#include<stdlib.h>
#include<stdio.h>
#include<math.h>
#include <iostream>
using namespace std;
class gauss
{
int n;
float m_uno[10],m_dos[10],mx[10][10],w,z;
public:
int i,j;
gauss();
void ms();
void datos();
void gauss_simple();
void gauss_jordan();
void cambio ();
};
gauss::gauss(){
for(i=0;i<10;i++){
m_uno[i]=0;
m_dos[i]=0;
for(j=0;j<10;j++)
mx[i][j]=0;
}}
void gauss::datos(){
cout<<"cuantas ecuaciones tiene la matriz a resolver?"<<endl;
scanf("%d",&n);
cout<<"ingrese la matriza resolver\n"<<endl;
int z;
for(i=0;i<n;i++){
for(j=0;j<=n;j++){
if(j!=n)
cout<<"x"<<i+1<<j+1<<"=";
else cout<<" C"<<i+1<<"=";
cin >> z;
mx[i][j]=z;
}
cout<<endl;
}
system("cls");
}
void gauss::ms(){
cout<<"\n\n\n";
for(i=0;i<n;i++){
cout<<" ";
for(j=0;j<=n;j++){
if(j!=n)
cout<<" ";
else cout<<" ";
printf("%.2f",mx[i][j]);
}
cout<<" "<<endl;
}}
void gauss::cambio(){

for(int x=0;x<n;x++){
if(mx[x][x]==0)
for(int s=0;s<=n;s++){
if(x!=n-1){
m_uno[s]=mx[x][s];
m_dos[s]=mx[x+1][s];
mx[x+1][s]=m_uno[s];
mx[x][s]=m_dos[s];
}
else
m_uno[s]=mx[x][s];
m_dos[s]=mx[0][s];
mx[0][s]=m_uno[s];
mx[x][s]=m_dos[s];
}
else
cout<<"";
}
ms();
}
void gauss::gauss_simple(){
for(int s=0;s<n-1;s++){
z=mx[s][s];
for(j=0;j<=n;j++)
mx[s][j]=mx[s][j]/z;
cout<<"\nse divide la fila "<<s+1<<" entre "<<z<<"\n"; ms();
for(int i=1;i<n;i++){
w=mx[s+i][s];
for(int r=0;r<=n;r++){
mx[s+i][r]-=mx[s][r]*w;
}
cout<<"\nse resta la fila "<<s+1<<" multiplicada por "<<-w<<" a la fila "<<s+i
+1<<"\n"; ms();
}}
cout<<"\n\n\necuaciones\n\n";
cout<<"("<<mx[n-1][n-1]<<")"<<"x"<<n<<" = "<<mx[n-1][n];
for(int s=n-2;s>=0;s--){
cout<<endl;
for(j=s;j<=n;j++){
if(j==n)
cout<<"= "<<mx[s][j];
else
cout<<"("<<mx[s][j]<<") x"<<j+1<<" + ";
}}
mx[n-1][n]=mx[n-1][n]/mx[n-1][n-1];
cout<<"\n\n\n";
for(int s=2;s<=n;s++){
for(int x=1;x<s;x++)
mx[n-s][n]-=mx[n-s][n-x]*mx[n-x][n];
}
for(int x=0;x<n;x++)
cout<<"\nx "<<x+1<<" = "<<mx[x][n];
cout<<"\n\n\n";
}
void gauss::gauss_jordan(){
for(int s=0;s<n-1;s++){
z=mx[s][s];
for(j=0;j<=n;j++)

mx[s][j]=mx[s][j]/z;
cout<<"\nse divide la fila "<<s+1<<" entre "<<z<<"\n"; ms();
for(int i=1;i<n;i++){
w=mx[s+i][s];
for(int r=0;r<=n;r++){
mx[s+i][r]-=mx[s][r]*w;
}
cout<<"\nse resta la fila "<<s+1<<" multiplicada por "<<-w<<" a la fila "<<s+i
+1<<"\n"; ms();
}}
for(int s=n-1;s>0;s--){
z=mx[s][s];
for(j=0;j<=n;j++)
mx[s][j]=mx[s][j]/z;
cout<<"\nse divide la fila "<<s+1<<" entre "<<z<<"\n"; ms();
for(int i=1;i<n;i++){
w=mx[s-i][s];
for(int r=0;r<=n;r++){
mx[s-i][r]-=mx[s][r]*w;
}
cout<<"\nse resta la fila "<<s+1<<" multiplicada por "<<-w<<" a la fila "<<s<<
"\n"; ms();
}}
for(int s=0;s<n;s++)
cout<<"\nx"<<s+1<<" = "<<mx[s][n];
}
int main ()
{
char p;
cout<<"Programa que calcula los coeficientes de una matriz con el metodo gauss
-jordan o gauss simple\n"<<endl;
do{
int o;
gauss m;
m.datos();
m.ms();
m.cambio();
cout<<"\nCon que metodo quiere resolver la matriz?"<<endl;
cout<<"1.-Gauss-Jordan\n2.-Gauss simple"<<endl;
cin>>o;
switch(o){
case 1:m.gauss_jordan();
break;
case 2:m.gauss_simple();
break;}
cout<<"\nQuiere resolver otra matriz?(S/N)"<<endl;
cin>>p;
system("cls");
}while(p=='s'|p=='S');
}

You might also like