Pagini recente » Cod sursa (job #594655) | Cod sursa (job #3185447) | Cod sursa (job #1408393) | Cod sursa (job #813100) | Cod sursa (job #831975)
Cod sursa(job #831975)
#include <fstream>
#include <algorithm>
#include <iomanip>
#define eps 0.000001
using namespace std;
int i, j, p, l, c, n, m;
double a[350][350], x[350];
int main()
{
ifstream fi("gauss.in");
ofstream fo("gauss.out");
fi >> n >> m;
for(i = 1; i <= n; i++)
for(j = 1; j <= m+1; j++)
fi >> a[i][j];
i = 1; j = 1;
while(i <= n and j <= m)
{
for(p = i; p <= n; p++)
if(a[p][j] < -eps or a[p][j] > eps)
break;
if(p == n+1)
{
j++;
continue;
}
if(i != p)
for(l = 1; l <= m+1; l++) swap(a[p][l], a[i][l]);
for(l = j+1; l <= m+1; l++)
a[i][l] = (double)a[i][l] / a[i][j];
a[i][j] = 1;
for(l = i+1; l <= n; l++)
{
for(c = j+1; c <= m+1; c++)
a[l][c] -= (double)a[i][c]*a[l][j];
a[l][j] = 0;
}
i++; j++;
}
for(i = n; i > 0; i--)
for(j = 1; j <= m+1; j++)
if(a[i][j] < -eps or a[i][j] > eps)
{
if(j == m+1)
{
fo << "Imposibil\n";
return 0;
}
x[j] = a[i][m+1];
for(p = j+1; p <= m; p++) x[j] -= (double)x[p]*a[i][p];
break;
}
fo << setprecision(9) << fixed;
for(i = 1; i <= m; i++) fo << x[i] << " ";
fo << "\n";
return 0;
}