Pagini recente » Cod sursa (job #2233121) | Cod sursa (job #1791611) | Cod sursa (job #2024875) | Cod sursa (job #922683) | Cod sursa (job #1610835)
#include <fstream>
#include <algorithm>
#include <iomanip>
using namespace std;
const int Mn = 3e2 + 3;
const double zero = 0.001;
int n, m;
double sol[Mn];
double ar[Mn][Mn];
int main()
{
ifstream fi("gauss.in");
ofstream fo("gauss.out");
fo << fixed << setprecision(10);
fi >> n >> m;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m + 1; j++)
fi >> ar[i][j];
int i = 1, j = 1, l;
for (; i <= n && j <= m;)
{
for (l = i; l <= n; l++)
if (ar[l][j] < -zero || ar[l][j] > zero)
break;
if (l > n)
{
j++;
continue;
}
if (l != i)
for (int it = 1; it <= m + 1; it++)
swap(ar[i][it], ar[l][it]);
for (int it = j + 1; it <= m + 1; it++)
ar[i][it] /= ar[i][j];
ar[i][j] = 1;
for (int rw = i + 1; rw <= n; rw++)
{
for (int cl = j + 1; cl <= m + 1; cl++)
ar[rw][cl] -= ar[rw][j] * ar[i][cl];
ar[rw][j] = 0;
}
i++; j++;
}
for (int i = n; i > 0; i--)
for (int j = 1; j <= m + 1; j++)
if (ar[i][j] < -zero || ar[i][j] > zero)
{
if (j == m + 1)
{
fo << "Imposibil\n";
return 0;
}
sol[j] = ar[i][m + 1];
for (int it = j + 1; it <= m; it++)
sol[j] -= sol[it] * ar[i][it];
break;
}
for (int i = 1; i <= m; fo << sol[i] << " ", i++);
fo << "\n";
return 0;
}