Pagini recente » Cod sursa (job #81845) | Cod sursa (job #1790250) | Cod sursa (job #81685) | Cod sursa (job #2471785) | Cod sursa (job #903498)
Cod sursa(job #903498)
#include <fstream>
#include <iomanip>
#include <cstdlib>
using namespace std;
#define EPS 0.0000001
fstream f("gauss.in", ios::in), g("gauss.out", ios::out);
double a[303][303],X[303];
int m,n;
void solve();
int main()
{
f>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m+1;j++)
f>>a[i][j];
solve();
for(int i=1;i<=m;i++)
{
g<<fixed<<setprecision (8)<<X[i]<<" ";
}
return 0;
}
void solve()
{
for(int i=1,j=1;i<=n && j<=m;j++,i++)
{
int P = -1;
for(int k = i; k <= n; ++k)
if(a[k][j] >EPS || a[k][j] < -EPS){
P = k; break;
}
if(P == -1)
{
g << "Imposibil";
exit(0);
}
if(P != n)
for(int k = 1; k <= m + 1; ++k)
swap(a[P][k], a[i][k]);
double D = a[i][j];
for(int k = 1; k <= m + 1; ++k)
a[i][k] = a[i][k] / D;
for(int l = i + 1; l <= n; ++l)
{
D = -a[l][j];
for(int k = j; k <= m + 1; ++k)
a[l][k] = a[l][k] + D * a[i][k];
}
}
for(int i = n; i>0; --i)
for(int j = 1; j <= m+1; ++j)
if(a[i][j]>EPS || a[i][j]<-EPS)
{
if(j == m+1)
{
g<<"Imposibil"<<endl;
exit(0);
}
X[j] = a[i][m+1];
for(int k = j+1; k <= m; ++k)
X[j] -= X[k] * a[i][k];
break;
}
}