Pagini recente » Cod sursa (job #382974) | Cod sursa (job #60377) | Cod sursa (job #779033) | Cod sursa (job #487517) | Cod sursa (job #2728685)
#include <cmath>
#include <fstream>
#include <iomanip>
using namespace std;
ifstream cin ("gauss.in");
ofstream cout ("gauss.out");
int n, m;
double a[505][505];
double zero = 1e-10;
double sol[505];
int main()
{
int i, j;
cin >> n >> m;
for (i = 1; i <= n; i++)
for (j = 1; j <= m + 1; j++)
cin >> a[i][j];
j = 1;
i = 1;
while (j <= m && i <= n)
{
if (abs(a[i][j]) <= zero)
{
int col = -1;
for (int ii = i + 1; ii <= n; ii++)
{
if (abs(a[ii][j]) > zero)
{
col = ii;
for (int jj = j; jj <= m + 1; jj++)
swap(a[ii][jj], a[i][jj]);
break;
}
}
if (col == -1)
{
j++;
continue;
}
}
for(int jj = j + 1; jj <= m + 1; jj++)
a[i][jj] = a[i][jj] / a[i][j];
a[i][j] = 1;
for(int ii = i + 1; ii <= n; ii++)
{
for(int jj = j + 1; jj <= m + 1; jj++)
a[ii][jj] -= a[ii][j] * a[i][jj];
a[ii][j] = 0;
}
i++;
j++;
}
/* for (i = 1; i <= n; i++)
{for (j = 1; j <= m + 1; j++)
cout << a[i][j] << " ";
cout << endl;
}*/
for (i = n; i; i--)
for (j = i; j <= m + 1; j++)
{
if (abs(a[i][j]) > zero)
{
if (j == m + 1)
return 0;
for (int jj = j + 1 ; jj <= m; jj++)
sol[j] -= sol[jj] * a[i][jj];
sol[j] += a[i][m + 1];
break;
}
}
for (i = 1; i <= n; i++)
cout << fixed << setprecision(10) << sol[i] << " ";
return 0;
}