Pagini recente » Cod sursa (job #207917) | Cod sursa (job #10840) | Cod sursa (job #285480) | Cod sursa (job #2521936) | Cod sursa (job #2794876)
#include <bits/stdc++.h>
using namespace std;
ifstream in("gauss.in");
ofstream out("gauss.out");
typedef long double ld;
ld a[305][305];
ld x[305];
int n,m;
int main()
{
in>>n>>m;
for(int i=1;i<=n;++i)
for(int j=1;j<=m+1;++j)
in>>a[i][j];
int i=1,j=1;
while(i<=n and j<=m)
{
int x=i;
while(x<=n and a[x][j]==0)
++x;
if(x==n+1)
{
++j;
continue;
}
for(int k=1;k<=m+1;++k)
swap(a[i][k],a[x][k]);
ld aux=a[i][j];
for(int k=1;k<=m+1;++k)
a[i][k]/=aux;
for(int u=i+1;u<=n;++u)
{
aux=a[u][j];
for(int k=1;k<=m+1;++k)
a[u][k]-=aux*a[i][k];
}
++i,++j;
}
for(int i=n;i>=1;--i)
{
int pi=1;
while(pi<=m and a[i][pi]==0)
++pi;
if(pi==m+1)
{
if(a[i][m+1]!=0)
{
out<<"Imposibil"<<'\n';
return 0;
}
continue;
}
x[pi]=a[i][m+1];
for(int j=m;j>=pi+1;--j)
x[pi]-=a[i][j]*x[j];
}
out<<fixed<<setprecision(10);
for(int i=1;i<=m;++i)
out<<x[i]<<' ';
return 0;
}