Pagini recente » Cod sursa (job #2382356) | Cod sursa (job #2037464) | Cod sursa (job #1379932) | Cod sursa (job #1420746) | Cod sursa (job #1377809)
#include <fstream>
#include <iomanip>
#include <cmath>
using namespace std;
#define eps 1E-8
#define MaxN 305
ifstream is("gauss.in");
ofstream os("gauss.out");
int n, m;
double x[MaxN];
double A[MaxN][MaxN];
void Calc();
int main()
{
is >> n >> m;
for ( int i = 1; i <= n; ++i )
for ( int j = 1; j <= m + 1; ++j )
is >> A[i][j];
int i = 1, j = 1, k;
double aux;
while ( i <= n && j <= m )
{
for ( k = i; k <= n; ++k )
if ( fabs(A[k][j]) > eps )
break;
if ( k == n + 1 )
{
j++;
continue;
}
if(k != i)
swap(A[i], A[k]);
for ( k = j + 1; k <= m + 1; ++k )
A[i][k] /= A[i][j];
A[i][j] = 1;
for ( int l = i + 1; l <= n; ++l )
{
for ( int c = j + 1; c <= m + 1; ++c )
A[l][c] -= A[l][j] * A[i][c];
A[l][j] = 0;
}
++i;
++j;
}
Calc();
is.close();
os.close();
return 0;
}
void Calc()
{
for ( int i = n; i > 0; --i )
for ( int j = 1; j <= m + 1; ++j )
if ( fabs(A[i][j]) > eps )
{
if ( j == m + 1 )
{
os << "Imposibil";
return;
}
x[j] = A[i][m + 1];
for ( int k = j + 1; k <= m; ++k )
x[j] -= x[k] * A[i][k];
break;
}
for ( int i = 1; i <= m; ++i )
os << fixed << setprecision(10) << x[i] << ' ';
return;
}