Pagini recente » Cod sursa (job #2934546) | Cod sursa (job #402022) | Cod sursa (job #1379058) | Cod sursa (job #2796772) | Cod sursa (job #1357725)
#include<iostream>
#include<fstream>
#define Nmax 305
#define eps 0.0000001
using namespace std;
ifstream in("gauss.in");
ofstream out("gauss.out");
double a[Nmax][Nmax], sol[Nmax], rez[Nmax];
int main()
{
int n, m;
in >> n >> m;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <=m; j++)
in >> a[i][j];
in >> sol[i];
}
int i = 1;
int j = 1;
while (i <= n && j <= m)
{
int line;
double f;
for (line = j; line <= n; line++)
if (a[line][j] > eps || a[line][j] < -eps)
break;
if (line == n+1)
{
j++;
continue;
}
for (int k = j; k <= m; k++)
{
double aux = a[i][k];
a[i][k] = a[line][k];
a[line][k] = aux;
}
double aux = sol[i];
sol[i] = sol[line];
sol[line] = aux;
f = a[i][j];
for (int k = j; k <= m; k++)
a[i][k] /= f;
sol[i] /= f;
for (int k = i + 1; k <= n; k++)
{
f = a[k][j];
for (int q = j; q <= m; q ++)
a[k][q] -= (f * a[i][q]);
sol[k] -= (f * sol[i]);
}
i++;
j++;
}
j = m;
for (int i = n; i >= 1; i--)
{
while (a[i][j-1] > eps || a[i][j-1] < -eps)
{
rez[0] = 0;
j--;
}
if (a[i][j] < eps && a[i][j] > -eps)
{
if (sol[i] < eps && sol[i] > -eps)
continue;
out << "Imposibil\n";
return 0;
}
rez[j] = sol[i];
for (int k = j + 1; k <= m; k++)
rez[j] -= (rez[k] * a[i][k]);
}
out.setf(ios::fixed);
out.precision(9);
for (int i = 1; i <= m; i++)
out << rez[i] << " ";
}