Pagini recente » Cod sursa (job #1899887) | Cod sursa (job #1295582) | Cod sursa (job #1679135) | Cod sursa (job #756473) | Cod sursa (job #2712387)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("gauss.in");
ofstream fout("gauss.out");
int n,m;
bool use[1005],ok;
long double v[305][305],ans[1005];
int main()
{
fin>>n>>m;
for(int i=1;i<=n;i++)
{
bool found=0;
for(int j=1;j<=m+1;j++)
{
fin>>v[i][j];
if(j<=m&&v[i][j]!=0)
found=1;
}
if(v[i][m+1]!=0)
ok=1;
/*if(!found&&v[i][m+1]==0)
{
fout<<"Imposibil";
return 0;
}*/
}
if(!ok)
{
for(int i=1;i<=m;i++)
fout<<0<<" ";
return 0;
}
int i=1;
int j=1;
while(j<=m)
{
int x=i;
while(x<=n&&v[x][j]<1e-17)
x++;
if(x>n)
{
j++;
continue;
}
if(x!=i)
swap(v[x],v[i]);
long double X=v[i][j];
for(int p=1;p<=m+1;p++)
v[i][p]/=X;
for(int u=i+1;u<=n;u++)
{
long double z=v[u][j];
for(int p=1;p<=m+1;p++)
v[u][p]-=z*v[i][p];
}
i++;
j++;
}
for(i=n;i>=1;i--)
{
int poz=m+1;
for(int j=1;j<=m;j++)
if(v[i][j]!=0)
{
poz=j;
break;
}
if(poz==m+1&&v[i][m+1]<1e-17)
{
fout<<"Imposibil";
return 0;
}
if(poz==m+1)
continue;
ans[poz]=v[i][m+1];
for(int j=poz+1;j<=m;j++)
ans[poz]-=v[i][j]*ans[j];
ans[poz]/=v[i][poz];
}
for(int i=1;i<=m;i++)
fout<<fixed<<setprecision(10)<<ans[i]<<" ";
return 0;
}