Pagini recente » Istoria paginii runda/solares | Cod sursa (job #1149797) | Cod sursa (job #1750918) | Cod sursa (job #731592) | Cod sursa (job #1148488)
#include <fstream>
#include <algorithm>
#include <iomanip>
#define EPS 0.00000001
using namespace std;
ifstream f("gauss.in");
ofstream g("gauss.out");
int N,M;
bool ok=1;
double A[305][305];
double X[305];
void Read()
{
f>>N>>M;
int i,j;
for(i=1;i<=N;i++)
for(j=1;j<=M+1;j++)
f>>A[i][j];
}
void Print()
{
for(int i=1;i<=M;i++)
g<<fixed<<setprecision(10)<<X[i]<<" ";
g<<"\n";
}
void Solve()
{
int i=1,j=1;
while(i<=N&&j<=M)
{
int k;
for(k=i;(A[k][j]<EPS&&A[k][j]>-EPS)&&k<=N;k++);
if(k==N+1)
{
j++;
continue;
}
if(k!=i)
swap(A[i],A[k]);
for(int l=j+1;l<=M+1;l++)
A[i][l]/=A[i][j];
A[i][j]=1;
for(k=i+1;k<=N;k++)
{
for(int l=j+1;l<=M+1;l++)
A[k][l]-=A[i][l]*A[k][j];
A[k][j]=0;
}
++i;++j;
}
double S=0;
for(i=N;i>=1;i--)
{
S=0;
for(j=1;j<=M+1;j++)
if(A[i][j]>EPS || A[i][j]<-EPS)
break;
if(j==M+1)
{
g<<"Imposibil\n";
ok=0;
return;
}
for(int k=j+1;k<=M;k++)
S+=A[i][k]*X[k];
X[i]=(A[i][M+1]-S)/A[i][i];
}
}
int main()
{
Read();
Solve();
if(ok==1)
Print();
return 0;
}