Pagini recente » Cod sursa (job #3319190) | Cod sursa (job #1058810) | Cod sursa (job #1225987) | Cod sursa (job #3341458) | Cod sursa (job #3314164)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("gauss.in");
ofstream fout("gauss.out");
const int NMAX = 301;
const double EPS = 0.0000001;
int n, m;
double A[NMAX][NMAX + 1], x[NMAX];
void swap_lines(int i, int j)
{
for(int k = 1; k <= m + 1; k++)
swap(A[i][k], A[j][k]);
}
void gauss()
{
int i = 1, j = 1, k;
while(i <= n && j <= m)
{
for(k = i; k <= n; k++)
if(abs(A[k][j]) > EPS)
break;
if(k == n + 1)
{
j++;
continue;
}
swap_lines(i, k);
for(int l = j + 1; l <= m + 1; l++)
A[i][l] /= 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--)
{
for(int j = 1; j <= m + 1; j++)
{
if(abs(A[i][j]) > EPS)
{
if(j == m + 1)
{
fout << "Imposibil";
return;
}
x[j] = A[i][m + 1];
for(int k = j + 1; k <= m; k++)
x[j] -= x[k] * A[i][k];
break;
}
}
}
}
int main()
{
fin >> n >> m;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= m + 1; j++)
fin >> A[i][j];
gauss();
for(int i = 1; i <= m; i++)
fout << fixed << setprecision(10) << x[i] << " ";
fin.close();
fout.close();
return 0;
}