Pagini recente » Istoria paginii runda/anotheroji2020/clasament | Cod sursa (job #997809) | Cod sursa (job #167692) | Cod sursa (job #2944283) | Cod sursa (job #1232787)
#include <fstream>
#include <iomanip>
#define DIM 305
#define EPS 0.0000001
#define ERROR_CODE "Imposibil"
#define infile "gauss.in"
#define outfile "gauss.out"
using namespace std;
ifstream f(infile);
ofstream g(outfile);
int n, m, k, i, j, l;
double A[DIM][DIM], Res[DIM];
int main() {
f >> n >> m;
for (i = 1; i <= n; ++i)
for (j = 1; j <= m + 1; ++j)
f >> A[i][j];
int i = 1, j = 1;
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 (l = 1; l <= m + 1; ++l) {
double tmp = A[i][l];
A[i][l] = A[k][l];
A[k][l] = tmp;
}
for (l = j + 1; l <= m + 1; ++l)
A[i][l] /= A[i][j];
A[i][j] = 1;
for (k = i + 1; k <= n; ++k) {
for (l = j + 1; l <= m + 1; ++l)
A[k][l] -= A[i][l] * A[k][j];
A[k][j] = 0;
}
++i; ++j;
}
for (i = n; i >= 1; --i)
for (j = 1; j <= m + 1; ++j)
if (A[i][j] < -EPS || A[i][j] > EPS) {
if (j == m + 1) {
g << ERROR_CODE;
return 0;
}
Res[j] = A[i][m + 1];
for (k = j + 1; k <= m; ++k)
Res[j] -= Res[k]*A[i][k];
break;
}
g << setprecision(8) << fixed;
for (i = 1; i <= m; ++i)
g << Res[i] << " ";
return 0;
}
//This room. This bullet. There's a bullet for everyone. And a time. And a place. Yes... maybe this is how it has to be. - 47