Pagini recente » Cod sursa (job #987618) | Cod sursa (job #3195494) | Cod sursa (job #997193) | Cod sursa (job #181122) | Cod sursa (job #815472)
Cod sursa(job #815472)
#include<fstream>
#include<algorithm>
#include<iomanip>
using namespace std;
const double eps=0.00001;
int n,m;
bool imposibil;
double a[302][302],x[302];
int main(){
ifstream fin("gauss.in");
ofstream fout("gauss.out");
fin>>n>>m;
for (int i=1;i<=n;i++)
for (int j=1;j<=m+1;j++) fin>>a[i][j];
int j=1;
for (int i=1;i<=n &&j<=m;i++,j++)
{
int k;
for (k=i;k<=n;k++)
if (a[k][j]<-eps || a[k][j]>eps) break;
if (k==n+1) {j++; continue;}
for (int l=1;l<=m+1;l++) swap(a[i][l],a[k][l]);
for (int l=j+1;l<=m+1;l++) a[i][l]/=a[i][j];
a[i][j]=1;
for (int l=i+1;l<=n;l++)
{
for (int q=j+1;q<=m+1;q++) a[l][q]-=a[i][q]*a[l][j];
a[l][j]=0;
}
}
for (int i=n;i>=1;i--)
for (int j=1;j<=m+1;j++)
if (a[i][j]<-eps || a[i][j]>eps)
{
if (j==m+1) {imposibil=true; break; }
x[j]=a[i][m+1];
for (int k=i-1;k>=1;k--)
{
a[k][m+1]-=x[j]*a[k][j];
a[k][j]=0;
}
break;
}
if (imposibil) fout<<"Imposibil";
else for (int i=1;i<=m;i++) fout<<fixed<<setprecision(8)<<x[i]<<" ";
fout<<'\n'; fin.close(); fout.close();
}