Pagini recente » Cod sursa (job #1058011) | Cod sursa (job #8529) | Cod sursa (job #1638002) | Cod sursa (job #941524) | Cod sursa (job #1149780)
#include <fstream>
#include <iomanip>
using namespace std;
int n,m;
double a[302][302],x[302];
void sw(int l1,int l2)
{
for(int i=1;i<m+2;++i)
{
double aux=a[l1][i];
a[l1][i]=a[l2][i];
a[l2][i]=aux;
}
}
inline bool nenul(double d)
{
return d<-0.0000001 || d>0.0000001;
}
ifstream fin("gauss.in");
ofstream fout("gauss.out");
int main()
{
int i,j,k,l;
fin>>n>>m;
for(i=1;i<=n;++i)
for(j=1;j<m+2;++j)
fin>>a[i][j];
for(i=j=1;i<=n && j<=m;++i,++j)
{
for(k=i;k<=n;++k)
if(nenul(a[k][j]))
break;
if(k==n+1)
{
++j;
continue;
}
if(k!=i)
sw(i,k);
for(k=j+1;k<m+2;++k)
a[i][k]/=a[i][j];
a[i][j]=1;
for(k=i+1;k<=n;++k)
{
for(l=j+1;l<m+2;++l)
a[k][l]-=a[k][j]*a[i][l];
a[k][j]=0;
}
}
for(i=n;i;--i)
for(j=1;j<m+2;++j)
if(nenul(a[i][j]))
{
if(j==m+1)
{
fout<<"Imposibil\n";
return 0;
}
x[j]=a[i][m+1];
for(k=j+1;k<=m;++k)
x[j]-=x[k]*a[i][k];
break;
}
fout<<setprecision(8)<<fixed;
for(i=1;i<=m;++i)
fout<<x[i]<<" ";
fout<<"\n";
return 0;
}