Pagini recente » Cod sursa (job #1899568) | Cod sursa (job #1017400) | Cod sursa (job #1788192) | Cod sursa (job #2364484) | Cod sursa (job #1584060)
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
ifstream f("gauss.in");
ofstream g("gauss.out");
int n,m,lin,col,sol=1,calc[305];
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;
for(i=1;i<=n;i++)
{for(j=1;j<=m+1;j++)
cout<<a[i][j]<<" ";
cout<<"\n";
}
cout<<"\n\n";
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=1;i<=n;i++)
{for(j=1;j<=m+1;j++)
cout<<a[i][j]<<" ";
cout<<"\n";
}
cout<<"\n\n";
}
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)
{ if (calc[j]) sum-=(double)a[i][j]*ans[j];
else {sol=0; break;}
}
calc[pos]=1; ans[pos]=sum/a[i][pos];
if (!sol) break;
}
}
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) {sol=0; break;}
}
if (sol)
for(i=1;i<=m;i++)
g<<fixed<<setprecision(10)<<ans[i]<<" ";
else g<<"Imposibil\n";
return 0;
}