Pagini recente » Cod sursa (job #2785012) | Cod sursa (job #524873) | Cod sursa (job #1971334) | Cod sursa (job #2093580) | Cod sursa (job #669183)
Cod sursa(job #669183)
#include <cstdio>
using namespace std;
const int N = 305;
const double EPS = 0.000000001;
double a[N][N], SOL[N];
int n, m;
int main(){
freopen("gauss.in", "r", stdin);
freopen("gauss.out", "w", stdout);
int i, j;
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; int k, aux;
while(i <= n && j <= m){
for(k = i; k <= n; ++k)
if(a[k][j] < -EPS || a[k][j] > EPS)
break;
if(k == n + 1){
++j;
continue;
}
if(k != i)
for(int q = 1; q <= m + 1; ++q){
aux = a[i][q];
a[i][q] = a[k][q];
a[k][q] = aux;
}
for(int c = j + 1; c <= m + 1; ++c)
a[i][c] /= a[i][j];
a[i][j] = 1;
for(int u = i + 1; u <= n; ++u){
for(int c = j + 1; c <= m + 1; ++c)
a[u][c] -= a[i][c] * a[u][j];
a[u][j] = 0;
}
++i; ++j;
}
for(i = n; i; --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;
}
SOL[j] = a[i][m + 1];
for(k = j + 1; k <= m; ++k)
SOL[j] -= SOL[k] * a[i][k];
break;
}
for(i = 1; i <= m; ++i)
printf("%.8lf ", SOL[i]);
return 0;
}