Pagini recente » Cod sursa (job #2896235) | Cod sursa (job #1440842) | Cod sursa (job #3288589) | Cod sursa (job #1658736) | Cod sursa (job #623418)
Cod sursa(job #623418)
#include <fstream>
#include <iomanip>
#define EHeight 301
#define EWidth 302
#define XSize 301
using namespace std;
ifstream in;
ofstream out;
double E[EHeight][EWidth];
double X[XSize];
int main()
{
int M,N;
in.open("gauss.in");
in>>M>>N;
for(int i=1;i<=M;++i)
for(int j=1;j<=N+1;++j)
in>>E[i][j];
in.close();
out.open("gauss.out");
for(int row=1,col=1;row<=M&&col<=N;++row,++col)
{
for(int pos;E[row][col]==0&&col<=N;++col)
{
pos=0;
for(int i=row+1;i<=M;++i)
if(E[i][col]!=0)
{
pos=i;
break;
}
if(pos)
{
for(int j=col;j<=N+1;++j)
{
double aux=E[row][j];
E[row][j]=E[pos][j];
E[pos][j]=aux;
}
break;
}
}
if(col>N)
{
out<<"Imposibil\n";
out.close();
return 0;
}
for(int j=col+1;j<=N+1;++j)
E[row][j]/=E[row][col];
E[row][col]=1;
for(int i=row+1;i<=M;++i)
if(E[i][col]!=0)
{
for(int j=col+1;j<=N+1;++j)
E[i][j]-=E[row][j]*E[i][col];
E[i][col]=0;
}
}
for(int i=1;i<=N;++i) X[i]=0;
for(int row=(M<N) ? M:N,col=N;row>0;--row,--col)
{
while(E[row][col]!=1&&col) --col;
if(col<1)
{
out<<"Imposibil\n";
out.close();
return 0;
}
X[col]=E[row][N+1];
for(int j=col+1;j<=N;++j)
X[col]-=E[row][j]*X[j];
}
out<<fixed;
for(int i=1;i<N;++i)
out<<setprecision(8)<<X[i]<<' ';
out<<setprecision(8)<<X[N]<<'\n';
out.close();
return 0;
}