Pagini recente » Cod sursa (job #2897872) | Cod sursa (job #126372) | Cod sursa (job #1431218) | Cod sursa (job #1339849) | Cod sursa (job #2027231)
#include <fstream>
#include <iomanip>
#include <iostream>
#include <vector>
using namespace std;
ifstream fin("gauss.in");
ofstream fout("gauss.out");
const int MAX = 310;
const double eps = 0.0000001;
int N, M;
double a[MAX][MAX];
double res[MAX];
bool imp;
void Read();
void Gauss();
void Write();
int main()
{
Read();
Gauss();
Write();
fin.close();
fout.close();
return 0;
}
void Read()
{
fin >> N >> M;
for ( int i = 1; i <= N; ++i )
for ( int j = 1; j <= M + 1; ++j )
fin >> a[i][j];
}
void Gauss()
{
int i{1}, j{1}, k;
while ( i <= N && j <= M )
{
// Caut o nilie k pentru care a[i][k] e nenul si daca acea linie
// nu e linia i o voi interschimba cu linia i
for ( k = i; k <= N; ++k )
if ( a[k][j] < -eps || a[k][j] > eps )
break;
if ( k == N + 1 )
{
++j;
continue;
}
if ( k != i )
{
for ( int col = 1; col <= M + 1; ++col )
swap(a[k][col], a[i][col]);
}
for ( int col = j + 1; col <= M + 1; ++col )
a[i][col] /= a[i][j];
a[i][j] = 1.;
for ( int lin = i + 1; lin <= N; ++lin )
{
for ( int col = j + 1; col <= M + 1; ++col )
a[lin][col] -= a[lin][j] * a[i][col];
a[lin][j] = 0;
}
++i; ++j;
}
for ( i = N; i > 0; --i )
for ( j = 1; j <= M + 1; ++j )
if ( a[i][j] < -eps || a[i][j] > eps )
{
if ( j == M + 1 )
{
imp = true;
return;
}
res[j] = a[i][M + 1];
//res.push_back(a[i][M + 1]);
for ( k = j + 1; k <= M; ++k )
res[j] -= res[k] * a[i][k];
break;
}
}
void Write()
{
if ( imp )
{
fout << "Imposibil\n";
return;
}
for ( int i = 1; i <= M; ++i )
fout << fixed << setprecision(10) << res[i] << ' ';
}