Pagini recente » Cod sursa (job #2379760) | Cod sursa (job #3325536) | Cod sursa (job #3314619) | Cod sursa (job #3332262)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("gauss.in");
ofstream fout ("gauss.out");
const double err = 1e-7;
int n, m;
int ord[305];
vector <double> ec[305];
double rez[305];
void gauss ()
{
for (int i = 1; i <= m; i++)
ord[i] = -1;
int i = 1, j = 1;
while (i <= n && j <= m)
{
int poz = i;
for (int ii = i; ii <= n; ii++)
{
if (fabs (ec[ii][j]) > fabs (ec[poz][j]))
poz = ii;
}
if (fabs (ec[poz][j]) >= err)
{
swap (ec[i], ec[poz]);
ord[j] = i;
for (int ii = 1; ii <= n; ii++)
{
if (ii != i)
{
double z = ec[ii][j] / ec[i][j];
for (int jj = j; jj <= m + 1; jj++)
ec[ii][jj] -= ec[i][jj] * z;
}
}
i++;
}
j++;
}
for (int i = 1; i <= m; i++)
{
rez[i] = 0;
if (ord[i] != -1)
rez[i] = ec[ord[i]][m + 1] / ec[ord[i]][i];
}
for (int i = 1; i <= n; i++)
{
double sum = 0;
for (int j = 1; j <= m; j++)
sum += rez[j] * ec[i][j];
if (fabs (sum - ec[i][m + 1]) > err)
{
fout << "Imposibil";
return;
}
}
fout << fixed << setprecision (10);
for (int i = 1; i <= m; i++)
fout << rez[i] << " ";
}
int main ()
{
fin >> n >> m;
for (int i = 1; i <= n; i++)
{
ec[i].resize (m + 2);
for (int j = 1; j <= m + 1; j++)
fin >> ec[i][j];
}
gauss();
return 0;
}