Pagini recente » Istoria paginii runda/splunge8/clasament | Cod sursa (job #2529835) | Cod sursa (job #2748690) | Cod sursa (job #1713217) | Cod sursa (job #1338405)
#include <fstream>
#include <algorithm>
#include <iomanip>
#define DIM 305
#define EPS 0.0000001
#define ERROR_MESSAGE "Imposibil"
#define infile "gauss.in"
#define outfile "gauss.out"
using namespace std;
ifstream f(infile);
ofstream g(outfile);
double a[DIM][DIM];
double ans[DIM];
int main() {
int n, m;
f >> n >> m;
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= m + 1; ++j)
f >> a[i][j];
for (int i = 1, j = 1; i <= n && j <= m; ++i, ++j) {
for (int k = i; k <= n; ++k) {
if (a[k][j] < -EPS || a[k][j] > EPS) {
for (int l = 1; l <= m + 1; ++l)
swap(a[k][l], a[i][l]);
break;
}
}
if (a[i][j] > -EPS && a[i][j] < EPS) {
--i;
continue;
}
for (int l = j + 1; l <= m + 1; ++l)
a[i][l] /= a[i][j];
a[i][j] = 1;
for (int k = i + 1; k <= n; ++k) {
for (int l = j + 1; l <= m + 1; ++l)
a[k][l] -= a[k][j] * a[i][l];
a[k][j] = 0;
}
}
for (int i = n; i; --i) {
for (int j = 1; j <= m + 1; ++j) {
if (a[i][j] > EPS || a[i][j] < -EPS) {
if (j == m + 1) {
g << ERROR_MESSAGE;
return 0;
}
ans[j] = a[i][m + 1];
for (int l = j + 1; l <= m; ++l)
ans[j] -= ans[l] * a[i][l];
break;
}
}
}
g << setprecision(8) << fixed;
for (int i = 1; i <= m; ++i)
g << ans[i] << ' ';
return 0;
}
//Trust me, I'm the Doctor!