Pagini recente » Borderou de evaluare (job #2243316) | Cod sursa (job #2946810) | Cod sursa (job #1412389) | Cod sursa (job #2203581) | Cod sursa (job #623450)
Cod sursa(job #623450)
#include <fstream>
#include <iomanip>
#define EHeight 301
#define EWidth 302
#define vHeight 301
#define vWidth 302
#define XSize 301
using namespace std;
ifstream in;
ofstream out;
long double E[EHeight][EWidth];
double v[vHeight][vWidth];
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];
v[i][j]=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;
X[col]=E[row][N+1];
for(int j=col+1;j<=N;++j)
X[col]-=E[row][j]*X[j];
}
for(int end=((M<N)?N:M),i=((M<N)?M:N)+1;i<=end;++i)
{
double aux=0;
for(int j=1;j<=N;++j) aux+=X[j]*v[i][j];
aux-=v[i][N+1];
if(aux>0.00000001||aux<-0.00000001)
{
out<<"Imposibil\n";
out.close();
return 0;
}
}
out<<fixed;
for(int i=1;i<N;++i)
out<<setprecision(8)<<X[i]<<' ';
out<<setprecision(8)<<X[N]<<'\n';
out.close();
return 0;
}