Pagini recente » Cod sursa (job #1315786) | Cod sursa (job #2509744) | Cod sursa (job #534806) | Cod sursa (job #1972153) | Cod sursa (job #767043)
Cod sursa(job #767043)
#include<fstream>
#include<iomanip>
using namespace std;
ifstream in("gauss.in");
ofstream out("gauss.out");
const int N = 309;
const double eps = 0.00000001;
int n, m;
double a[N][N], x[N];
inline void swapl(const int &l1, const int &l2) {
for(int i = 1; i<=m + 1; ++i) {
double aux = a[l1][i];
a[l1][i] = a[l2][i];
a[l2][i] = aux;
}
}
int main() {
int i, j, k, l, u;
in >> n >> m;
for(i = 1; i<=n; ++i)
for(j = 1; j<=m + 1; ++j)
in >> a[i][j];
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)
swapl(i, k);
for(l = j + 1; l<=m + 1; ++l)
a[i][l] /= a[i][j];
a[i][j] = 1;
for(u = i + 1; u<=n; ++u) {
for(l = j + 1; l<=m + 1; ++l)
a[u][l] -= a[u][j] * a[i][l];
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) {
out << "Imposibil\n";
return 0;
}
x[j] = a[i][m + 1];
for(k = j + 1; k<=m; ++k)
x[j] -= x[k] * a[i][k];
break;
}
for(i = 1; i<=m; ++i)
out << setprecision(15) << x[i] << " ";
out << "\n";
return 0;
}