Pagini recente » Cod sursa (job #1953024) | Cod sursa (job #2955805) | Cod sursa (job #2818596) | Cod sursa (job #177283) | Cod sursa (job #2629898)
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
ifstream in("gauss.in");
ofstream out("gauss.out");
const int dim = 305;
const double eps = 0.00000001;
int n,m;
double a[dim][dim],x[dim];
bool Gauss()
{
int ec = 1;
int var = 1;
while (ec <= n && var <= m)
{
int cec = ec;
for (cec=ec; cec <= n; cec++)
{
if (a[cec][var] < -eps || a[cec][var] > eps)
{
break ;
}
}
if (cec == n+1)
{
var++;
continue ;
}
if (cec != ec)
{
swap(a[cec],a[ec]);
}
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;
}
ec++;
var++;
}
for (int i=n; i>=1; i--)
{
for (int j=1; j<=m+1; j++)
{
if (a[i][j] < -eps || a[i][j] > eps)
{
if (j == m+1) return 0;
x[j] = a[i][m+1];
for (int w=j+1; w<=m; w++)
{
x[j] -= x[w] * a[i][w];
}
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];
}
}
if (!Gauss())
{
out << "Imposibil";
}
else
{
for (int i=1; i<=m; i++)
{
out << fixed << setprecision(10) << x[i] << " ";
}
}
return 0;
}