Pagini recente » Cod sursa (job #720319) | Cod sursa (job #997454) | Cod sursa (job #1746033) | Cod sursa (job #1877259) | Cod sursa (job #3334481)
#include <fstream>
#include <iomanip>
#define NMAX 302
#define EPS 0.0000001
using namespace std;
ifstream in("gauss.in");
ofstream out("gauss.out");
int n, m;
double a[NMAX][NMAX], sol[NMAX];
int main()
{
in >> n >> m;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m + 1; j++)
in >> a[i][j];
int i = 1, j = 1, k;
while (i <= n && j <= m)
{
bool gasit = false;
for (k = i; k <= n && gasit == false; k++)
if (a[k][j] < -EPS || a[k][j] > EPS)
gasit = true;
if (gasit == false)
j++;
else
{
k--;
if (k != i)
{
for (int g = j; g <= m + 1; g++)
{
double aux = a[i][g];
a[i][g] = a[k][g];
a[k][g] = aux;
}
}
for (int g = j + 1; g <= m + 1; g++)
a[i][g] /= a[i][j];
a[i][j] = 1;
for (int l = i + 1; l <= n; l++)
{
for (int c = j + 1; c <= m + 1; c++)
a[l][c] -= a[l][j] * a[i][c];
a[l][j] = 0;
}
i++;
j++;
}
}
for (int i = n; i >= 1; i--)
{
bool calc = false;
for (int j = 1; j <= m + 1 && calc == false; j++)
if (a[i][j] < -EPS || a[i][j] > EPS)
{
if (j == m + 1)
{
out << "Imposibil";
return 0;
}
sol[j] = a[i][m + 1];
for (int k = j + 1; k <= m; k++)
sol[j] -= a[i][k] * sol[k];
calc = true;
}
}
for (int i = 1; i <= m; i++)
out << fixed << setprecision(8) << sol[i] << " ";
return 0;
}