Pagini recente » Cod sursa (job #422124) | Cod sursa (job #2425724) | Cod sursa (job #1869588) | Cod sursa (job #1570639) | Cod sursa (job #2087575)
#include <fstream>
#include <iomanip>
#define EPSILON 0.0000000001
#define DEF 310
using namespace std;
ifstream fin ("gauss.in");
ofstream fout ("gauss.out");
int n, m, i, j, k;
double A[DEF][DEF], v[DEF];
int main () {
fin >> n >> m;
for (int i = 1; i <= n; ++ i) {
for (int j = 1; j <= m + 1; ++ j) {
fin >> A[i][j];
}
}
i = 1; j = 1;
while (i <= n && j <= m) {
for (k = i; k <= n; ++ k) /// Caut primul sir nenul
if (A[k][j])
break;
if (k == n + 1) { /// Nu il gasesc, trec mai departe
++ j;
continue;
}
if (k != i) { /// L-am gasit, asa ca il mut pe linia i
for (int l = 1; l <= m + 1; ++ l) {
swap (A[i][l], A[k][l]);
}
}
for (int l = j + 1; l <= m + 1; ++ l) {
A[i][l] /= A[i][j];
}
A[i][j] = 1;
for (int l = i + 1; l <= n; ++ l) {
for (int p = j + 1; p <= m + 1; ++ p) {
A[l][p] -= A[i][p] * A[l][j];
/// Fac scaderea cu scopul de a reduce lini i
/// numai la elem. nule
}
A[l][j] = 0;
}
++ i;
++ j;
}
for (int i = n; i >= 1; -- i) {
for (j = 1; j <= m + 1; ++ j) {
if (A[i][j] < -EPSILON || EPSILON < A[i][j])
/// Echivalent cu A[i][j] == 0
break;
}
if (j == m + 2)
continue;
if (j == m + 1) {
fout << "Imposibil\n";
return 0;
}
v[j] = A[i][m + 1];
for (int k = j + 1; k <= m; ++ k) {
v[j] -= v[k] * A[i][k];
}
}
for (int i = 1; i <= m; ++ i)
fout << setprecision(10) << fixed << v[i] << " ";
return 0;
}