Pagini recente » Cod sursa (job #2936456) | Cod sursa (job #2148773) | Cod sursa (job #2767878) | Cod sursa (job #2291015) | Cod sursa (job #2300371)
#include <bits/stdc++.h>
using namespace std;
vector <vector<double>> mat;
vector <double> sol;
const double eps = 1e-9;
inline double myabs(double x){
if(x < 0)
return -x;
return x;
}
int main()
{
int n, m, i, j;
ifstream fin("gauss.in");
ofstream fout("gauss.out");
fin >> n >> m;
mat.resize(n);
sol.resize(m);
for(i = 0; i < n; i++)
mat[i].resize(m + 1);
for(i = 0; i < n; i++){
for(j = 0; j <= m; j++){
fin >> mat[i][j];
//cout << mat[i][j] << ' ';
}
//cout << '\n';
}
int l = 0, c = 0;
while(l < n && c < m){
i = l;
while(i < n && myabs(mat[i][c]) < eps)
i++;
if(i == n)
c++;
else{
for(j = c; j <= m; j++)
swap(mat[i][j], mat[l][j]);
for(j = c + 1; j <= m; j++)
mat[l][j] /= mat[l][c];
mat[l][c] = 1;
for(i = l + 1; i < n; i++){
for(j = c + 1; j <= m; j++)
mat[i][j] -= mat[i][c] * mat[l][j];
mat[i][c] = 0;
}
l++;
c++;
}
}
for(i = n - 1; i >= 0; i--){
j = 0;
while(j < m && myabs(mat[i][j]) < eps)
j++;
if(j == m){
if(myabs(mat[i][j]) > eps){
fout << "Imposibil";
return 0;
}
}
else{
for(int p = j + 1; p <= c; p++)
mat[i][m] -= sol[p] * mat[i][p];
sol[j] = mat[i][m];
}
}
fout.precision(8);
for(i = 0; i < m; i++)
fout << fixed << sol[i] << ' ';
fin.close();
fout.close();
return 0;
}