Pagini recente » Cod sursa (job #2372431) | Cod sursa (job #2155746) | Cod sursa (job #2629261) | Cod sursa (job #81620) | Cod sursa (job #1364555)
#include<cstdio>
#include<string>
#include<cmath>
using namespace std;
#ifdef HOME
const string inputFile = "input.txt";
const string outputFile = "output.txt";
#else
const string problemName = "gauss";
const string inputFile = problemName + ".in";
const string outputFile = problemName + ".out";
#endif
const int NMAX = 300 + 5;
const double EPS = 1e-16;
int N, M;
double A[NMAX][NMAX];
double B[NMAX];
void gauss() {
int i, j, k, l;
for(j = 1; i <= M; j++) {
for(i = j; i <= N; i++)
if(fabs(A[i][j]) > EPS)
break;
if(i > N)
continue;
for(k = i + 1; k <= N; k++) {
B[k] -= B[i] * A[k][j] / A[i][j];
for(l = M; l >= j; l--)
A[k][l] -= A[i][l] * A[k][j] / A[i][j];
}
B[i] /= A[i][j];
for(k = M; k >= j; k--)
A[i][k] /= A[i][j];
}
}
int solve() {
int i, j, k;
for(i = N; i >= 1; i--) {
for(k = i; k <= M; k++)
if(fabs(A[i][k]) > EPS)
break;
for(j = M; j >= k + 1; j--)
B[i] -= B[j] * A[i][j];
if(fabs(A[i][k]) < EPS && fabs(B[i]) > EPS)
return 0;
if(fabs(A[i][k]) > EPS)
B[k] = B[i] / A[i][j];
}
return 1;
}
int main() {
int i, j;
freopen(inputFile.c_str(), "r", stdin);
freopen(outputFile.c_str(), "w", stdout);
scanf("%d%d", &N, &M);
for(i = 1; i <= N; i++) {
for(j = 1; j <= M; j++)
scanf("%lf", &A[i][j]);
scanf("%lf", &B[i]);
}
gauss();
if(solve())
for(i = 1; i <= M; i++)
printf("%.10f ", B[i]);
else
printf("Imposibil\n");
return 0;
}