Pagini recente » Cod sursa (job #2659131) | Cod sursa (job #1678323) | Cod sursa (job #3189758) | Cod sursa (job #1124919) | Cod sursa (job #1759590)
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
const int NMAX = 300;
const int MMAX = 300;
const double eps = 1e-7;
double a[NMAX+1][MMAX+2], ans[MMAX+1];
int main()
{
freopen("gauss.in", "r", stdin);
freopen("gauss.out", "w", stdout);
int n, m, q, f;
scanf("%d%d", &n, &m);
for(int i=1; i<=n; i++)
for(int j=1; j<=m+1; j++)
scanf("%lf", &a[i][j]);
for(int i=1, j=1; i<=n, j<=m; i++, j++)
{
int line;
for(line=i; line<=n && fabs(a[line][j]) < eps; line++);
if(line==n+1) j++;
else
{
if(i!=line)
for(int k=1; k<=m+1; k++)
swap(a[i][k], a[line][k]);
for(int k=j+1; k<=m+1; k++)
a[i][k] /= a[i][j];
a[i][j] = 1;
for(int k=i+1; k<=n; k++)
{
for(q=j+1; q<=m+1; q++)
a[k][q] -= a[k][j]*a[i][q];
a[k][j]=0;
}
}
}
bool sol = true;
for(int i=n; i>0 && sol; i--)
{
for(int j=1; j<=m+1; j++)
if(fabs(a[i][j]) >= eps)
{
if(j==m+1) sol = false;
ans[j] = a[i][m+1];
for(int l=j+1; l<=m; l++)
ans[j] -= ans[l]*a[i][l];
break;
}
}
if(!sol) printf("Imposibil\n");
else
{
for(int i=1; i<=m; i++)
printf("%.8lf ", ans[i]);
printf("\n");
}
return 0;
}