Pagini recente » Cod sursa (job #2472742) | Cod sursa (job #2187282) | Cod sursa (job #2668448) | Cod sursa (job #105685) | Cod sursa (job #2887131)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <iomanip>
#include <algorithm>
using namespace std;
const string filename = "gauss";
ifstream fin(filename + ".in");
ofstream fout(filename + ".out");
const double eps = 1e-8;
int n, m;
double ec[305][305], sol[305];
int main()
{
fin >> n >> m;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= m + 1; j++)
fin >> ec[i][j];
int i = 1, j = 1, k;
while(i <= n && j <= m)
{
for(k = i; k <= n; k++)
if(ec[k][j] < -eps || ec[k][j] > eps)
break;
if(k == n + 1)
{
j++;
continue;
}
for(int poz = 1; poz <= m + 1; poz++)
swap(ec[k][poz], ec[i][poz]);
for(k = j + 1; k <= m + 1; k++)
ec[i][k] = ec[i][k] / ec[i][j];
ec[i][j] = 1;
for(k = i + 1; k <= n; k++)
{
for(int l = j + 1; l <= m + 1; l++)
ec[k][l] -= ec[k][j] * ec[i][l];
ec[k][j] = 0;
}
i++, j++;
}
for(i = n; i; i--)
{
for(j = 1; j <= m + 1; j++)
{
if(ec[i][j] > eps || ec[i][j] < -eps)
{
if(j == m + 1)
{
fout << "Imposibil";
return 0;
}
sol[j] = ec[i][m + 1];
for(k = j + 1; k <= m; k++)
sol[j] -= sol[k] * ec[i][k];
break;
}
}
}
fout << fixed << setprecision(8);
for(int i = 1; i <= m; i++)
fout << sol[i] << ' ';
return 0;
}