Pagini recente » Cod sursa (job #320483) | Cod sursa (job #2549205) | Cod sursa (job #611825) | Cod sursa (job #2891288) | Cod sursa (job #1182482)
#include <cmath>
#include <fstream>
#include <iomanip>
#include <algorithm>
using namespace std;
const double eps = 1e-4;
int N, M;
double A[302][302], res[302];
int main()
{
ifstream fin("gauss.in");
ofstream fout("gauss.out");
fin >> N >> M;
for (int i = 1; i <= N; ++i)
for (int j = 1; j <= M + 1; ++j)
fin >> A[i][j];
for (int i = 1, j = 1; i <= N && j <= M; ++i, ++j)
{
int w = 0;
for (int k = i; k <= N; ++k)
if (fabs(A[k][j]) >= eps)
{
w = k;
break;
}
if (w == 0)
{
--i;
continue;
}
for (int k = 1; k <= M + 1; ++k)
swap(A[i][k], A[w][k]);
for (int k = M + 1; k >= j; --k)
A[i][k] /= A[i][j];
for (int l = i + 1; l <= N; ++l)
if (fabs(A[l][j]) >= eps)
{
for (int k = M + 1; k >= j; --k)
A[l][k] /= A[l][j];
for (int k = M + 1; k >= j; --k)
A[l][k] -= A[i][k];
}
}
bool imp = false;
for (int i = N; i >= 1 && !imp; --i)
for (int j = 1; j <= M + 1 && !imp; ++j)
if (fabs(A[i][j]) >= eps)
{
if (j == M + 1)
{
imp = true;
continue;
}
res[j] = A[i][M + 1] / A[i][j];
for (int l = i - 1; l >= 1; --l)
{
A[l][M + 1] -= res[j] * A[l][j];
A[l][j] = 0;
}
break;
}
if (imp)
fout << "Imposibil" << '\n';
else
{
for (int i = 1; i <= M; ++i)
fout << fixed << setprecision(9) << res[i] << ' ';
fout << '\n';
}
fin.close();
fout.close();
}