Pagini recente » Cod sursa (job #3159642) | Cod sursa (job #2898408) | Cod sursa (job #208342) | Cod sursa (job #2089635) | Cod sursa (job #1584108)
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cmath>
using namespace std;
ifstream f("gauss.in");
ofstream g("gauss.out");
int n,m,lin,col,sol=1;
double a[305][305],val,ans[305],sum;
int main()
{ int i,j,ok,pos;
f>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m+1;j++)
f>>a[i][j];
lin=1; col=1;
while(lin<=n && col<=m)
{
ok=0;
for(i=lin;i<=n;i++)
if (a[i][col]!=0) {ok=i; break;}
if (ok)
{
if (ok!=lin)
for(j=1;j<=m+1;j++)
swap(a[lin][j],a[ok][j]);
val=a[lin][col];
for(j=1;j<=m+1;j++)
a[lin][j]/=val;
for(i=lin+1;i<=n;i++)
{ val=a[i][col];
for(j=col;j<=m+1;j++)
a[i][j]-=a[lin][j]*val;
}
}
lin++; col++;
}
for(i=n;i>=1;i--)
{
pos=0;
for(j=1;j<=m;j++)
if (a[i][j]!=0) {pos=j; break;}
if (pos)
{ sum=a[i][m+1];
for(j=pos+1;j<=m;j++)
if (a[i][j]!=0) sum-=(double)a[i][j]*ans[j];
ans[pos]=sum/a[i][pos];
}
}
if (sol)
for(i=1;i<=n;i++)
{for(j=1;j<=m;j++)
a[i][m+1]-=(double) a[i][j]*ans[j];
if (a[i][m+1]>1e-9 || a[i][m+1]<-1e-9) {sol=0; break;}
}
if (sol)
for(i=1;i<=m;i++)
g<<fixed<<setprecision(10)<<ans[i]<<" ";
else g<<"Imposibil\n";
return 0;
}