Pagini recente » Cod sursa (job #1464320) | Cod sursa (job #378736) | Cod sursa (job #2137132) | Cod sursa (job #1326171) | Cod sursa (job #737615)
Cod sursa(job #737615)
#include <cstdio>
#define nmax 310
#define eps 0.0000001
int n, m;
double a[nmax][nmax], val[nmax];
void swap(int x, int y)
{
int i;
double aux;
for (i=1; i<=m+1; i++)
{
aux=a[x][i];
a[x][i]=a[y][i];
a[y][i]=aux;
}
}
int main()
{
freopen("gauss.in","r",stdin);
freopen("gauss.out","w",stdout);
scanf("%d %d", &n, &m);
int i, j, k, x, y;
for (i=1; i<=n; i++)
for (j=1; j<=m+1; j++) scanf("%lf", &a[i][j]);
for (i=1, j=1; i<=n && j<=m; )
{
for (k=i; k<=n; k++)
if (a[k][j]<-eps || a[k][j]>eps) break;
if (k>n) j++; else
{
if (i!=k) swap(i, k);
for (y=j+1; y<=m+1; y++) a[i][y]/=a[i][j];
a[i][j]=1;
for (x=i+1; x<=n; x++)
{
for (y=j+1; y<=m+1; y++)
a[x][y]-=a[x][j]*a[i][y];
a[x][j]=0;
}
i++, j++;
}
}
for (i=n; i>0; i--)
for (j=1; j<=m+1; j++)
if (a[i][j]>eps || a[i][j]<-eps)
{
if (j==m+1)
{
printf("Imposibil\n");
return 0;
}
val[j]=a[i][m+1];
for (k=j+1; k<=m; k++) val[j]-=val[k]*a[i][k];
break;
}
for (i=1; i<=m; i++) printf("%.8lf ",val[i]);
}