Pagini recente » Cod sursa (job #304122) | Cod sursa (job #2442041) | Cod sursa (job #1154824) | Cod sursa (job #2245785) | Cod sursa (job #2117140)
#include <bits/stdc++.h>
using namespace std;
ifstream f("gauss.in");
ofstream g("gauss.out");
const int MAXN = 305;
const double eps = 0.000001;
double mat[MAXN][MAXN];
double sol[MAXN];
int main(){
int n, m;
f >> n >> m;
for(int i = 1; i <= n; ++i)
for(int j = 1 ; j <= m + 1; ++j)
f >> mat[i][j];
int i = 1, j = 1, k;
while(i <= n && j <= m){
for(k = i; k <= n; ++k){
if(mat[k][j] < -eps || mat[k][j] > eps) break;
}
if(k == n+1){
++j;
continue;
}
if(k != i){
for(int p = 1; p <= m + 1; ++p){
swap(mat[k][p], mat[i][p]);
}
}
for(int p = m + 1; p >= j; --p) mat[i][p] /= mat[i][j];
for(int ec = i + 1; ec <= n; ++ec){
for(int p = m+1; p >= j; --p){
mat[ec][p] -= mat[ec][j] * mat[i][p];
}
}
++i, ++j;
}
for(int i = n; i; --i){
for(int j = 1; j <= m+1; ++j){
if(mat[i][j] < -eps || mat[i][j] > eps){
if(j == m+1){
g << "Imposibil";
return 0;
}
sol[j] = mat[i][m+1];
for(int p = j+1; p <= m; ++p){
sol[j] -= mat[i][p] * sol[p];
}
break;
}
}
}
for(int i = 1; i <= m; ++i){
g << setprecision(10) << fixed << sol[i] << ' ';
}
return 0;
}