Pagini recente » Cod sursa (job #594333) | Cod sursa (job #883581) | Cod sursa (job #2747913) | Cod sursa (job #2755463) | Cod sursa (job #2221400)
#include <fstream>
#include <iomanip>
using namespace std;
ifstream fin ("gauss.in");
ofstream fout ("gauss.out");
const int Dim = 305;
const double eps = 0.0000001;
int n,m;
double A[Dim][Dim];
double X[Dim];
bool Gauss();
int main()
{
fin >> n >> m;
for ( int i = 1; i <= n; ++i)
for ( int j = 1;j <= m + 1; ++j)
fin >> A[i][j];
if ( Gauss() == false)
fout << "Imposibil";
else
for ( int i = 1; i <= m; ++i)
fout << fixed << setprecision(10) << X[i] << " ";
return 0;
}
bool Gauss() {
int ec = 1,var = 1;
while ( ec <= n and var <= m) {
int cec = ec;
for ( cec = ec; cec <= n; ++cec)
if ( A[cec][var] < -eps or A[cec][var] > eps)
break;
if ( cec == n + 1){
++var;
continue;
}
if ( cec != ec) {
for ( int j = 1; j <= m + 1; ++j)
swap(A[ec][j], A[cec][j]);
}
for ( int j = var+1; j <= m + 1; ++j)
A[ec][j] /= A[ec][var];
A[ec][var] = 1;
for(int i = ec+1; i <= n; ++i) {
for(int j = var+1; j <= m+1; ++j)
A[i][j] -= A[i][var] * A[ec][j];
A[i][var] = 0;
}
++var, ++ec;
}
for ( int i = n; i >= 1; --i)
for ( int j = 1; j <= m + 1; ++j)
if ( A[i][j] > eps or A[i][j] < -eps ) {
if ( j == m + 1)
return false;
X[j] = A[i][m+1];
for ( int w = j + 1; w <= m; ++w)
X[j] -= X[w] * A[i][w];
break;
}
return true;
}