Pagini recente » Cod sursa (job #2586941) | Cod sursa (job #314534) | Cod sursa (job #408226) | Cod sursa (job #2271236) | Cod sursa (job #676689)
Cod sursa(job #676689)
#include <fstream>
#include <vector>
#include <algorithm>
#include <iomanip>
#define DIM 301
#define EPS 0.00000001
using namespace std;
ofstream fout("gauss.out");
int n, m;
vector<vector<double> > a;
vector<double > sol;
bool imposibil;
void Read();
void Gauss();
void Write();
int main()
{
Read();
Gauss();
Write();
return 0;
}
void Read()
{
ifstream fin("gauss.in");
fin >> n >> m;
a.resize(n+1);
sol.resize(m+1);
for (int i = 1; i <= n; ++i)
{
a[i].resize(m+2);
for (int j = 1; j <= m + 1; ++j)
fin >> a[i][j];
}
fin.close();
}
void Gauss()
{
int i(1), j(1);
while (i <= n && j <= m)
{
int k;
for (k = i; k <= n; ++k)
if (a[k][j] < -EPS || a[k][j] > EPS)
break;
if (k == n + 1)
{
j++; // j - var libera
continue;
}
if (i != k) swap(a[i], a[k]);
for (int k = j + 1; k <= m + 1; ++k)
a[i][k] = a[i][k] / a[i][j];
a[i][j] = 1;
for (int ec = i + 1; ec <= n; ++ec)
{
for (int var = j + 1; var <= m + 1; ++var)
a[ec][var] = a[ec][var] - a[i][var] * a[ec][j];
a[ec][j] = 0;
}
i++; j++;
}
/* for (int i = 1; i <= n; ++i)
{
for (int j = 1; j <= m + 1; ++j)
fout << fixed << setprecision(8) << a[i][j] << ' ';
fout << '\n';
}*/
for (int i = n; i > 0; --i)
for (int j = 1; j <= m + 1; ++j)
if (a[i][j] < -EPS || a[i][j] > EPS)
{
if (j == m+1)
{
imposibil = true;
return;
}
sol[j] = a[i][m+1];
for (int var = j + 1; var <= m; ++var)
sol[j] -= a[i][var] * sol[var];
break;
}
}
void Write()
{
//ofstream fout("gauss.out");
if (imposibil) fout << "imposibil\n";
else
for (int i = 1; i <= n; ++i)
fout << fixed << setprecision(8) << sol[i] << ' ';
fout.close();
}