Pagini recente » Cod sursa (job #1270041) | Cod sursa (job #137958) | Cod sursa (job #1875396) | Cod sursa (job #2021191) | Cod sursa (job #1846983)
#include <cstdio>
using namespace std;
#define epsilon 1e-7
int n, m,i,j,l,u,k;
const int MAX=310;
double a[MAX][MAX];
double X[MAX];
double aux;
int main()
{
freopen("gauss.in", "r", stdin);
freopen("gauss.out", "w", stdout);
scanf("%d%d", &n, &m);
for (i=1; i<=n; ++i) for (j=1; j<=m+1; ++j) scanf("%lf", &a[i][j]);
i=1;
j=1;
while(i<=n && j<=m)
{
for (k=i; k<=n; ++k) if(a[k][j]<-epsilon || a[k][j]>epsilon)
break;
if(k==n+1)
{
++j;
continue;
}
if(k != i)
for(l = 1; l <= m+1; ++l)
{
aux = a[i][l];
a[i][l] = a[k][l];
a[k][l] = aux;
}
for(l = j+1; l <= m+1; ++l) a[i][l] = a[i][l] / a[i][j];
a[i][j] = 1;
for(u = i+1; u <= n; ++u)
{
for(l = j+1; l <= m+1; ++l) a[u][l] -= a[u][j] * a[i][l];
a[u][j] = 0;
}
i++,j++;
}
for (i=n; i>0; --i) for(j = 1; j <= m+1; ++j)
if(a[i][j]>epsilon || a[i][j]<-epsilon)
{
if(j == m+1)
{
printf("Imposibil\n");
return 0;
}
X[j] = a[i][m+1];
for(k = j+1; k <= m; ++k) X[j] -= X[k] * a[i][k];
break;
}
for(i = 1; i <= m; ++i) printf("%.8lf ", X[i]);
printf("\n");
return 0;
}