Pagini recente » Cod sursa (job #2064049) | Cod sursa (job #2021423) | Cod sursa (job #2743396) | Cod sursa (job #823271) | Cod sursa (job #2741660)
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream in("gauss.in");
ofstream out("gauss.out");
const double eps = 1e-10;
const int maxn = 300;
int n, m;
double A[maxn + 1][maxn + 2],
x[maxn + 1];
void afisare()
{
out.setf(ios::fixed, ios::floatfield);
out.precision(10);
for(int i = 1; i <= n; i++)
out << x[i] << ' ';
}
void gauss()
{
int i = 1, j = 1, k, p;
while(i <= n && j <= m)
{
if(abs(A[i][j]) <= eps)
{
bool ok = 0;
for(k = i + 1; k <= n; k++)
if(abs(A[k][j] > eps))
{
ok = 1;
for(p = j; j <= m + 1; ++p)
swap(A[i][p], A[k][p]);
break;
}
if(!ok)
{
j++;
continue;
}
}
for(k = j + 1; k <= m + 1; k++)
A[i][k] /= A[i][j];
A[i][j] = 1.0;
for(k = i + 1; k <= n; k++)
{
for(p = j + 1; p <= m + 1; p++)
A[k][p] -= A[k][j] * A[i][p];
A[k][j] = 0.0;
}
i++;
j++;
}
}
bool solutie()
{
for(int i = n; i >= 1; i--)
for(int j = i; j <= m + 1; j++)
if(abs(A[i][j]) > eps)
{
if(j == m + 1)
return 0;
x[j] = A[i][m + 1];
for(int k = j + 1; k <= m; k++)
x[j] -= x[k] * A[i][k];
break;
}
return 1;
}
int main()
{
in >> n >> m;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= m + 1; j++)
in >> A[i][j];
gauss();
if(solutie())
afisare();
else
out << "Imposibil";
return 0;
}