Pagini recente » Cod sursa (job #823651) | Cod sursa (job #981460) | Cod sursa (job #2799941) | Rating Vlad Prismareanu (Vlad_pris) | Cod sursa (job #681028)
Cod sursa(job #681028)
#include<fstream>
#include<algorithm>
#include<iomanip>
using namespace std;
#define eps 0.000000001
ifstream fin("gauss.in");
ofstream fout("gauss.out");
int n, m;
double a[250][250];
void Read();
void Solve();
void Write();
double sol[251];
int main()
{
Read();
Solve();
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 Solve()
{
int k = 1;
while( k <= m )
{
double numar = 0;
int l = 0;
for( int i = k; i <= n; ++i )
if( a[i][k] > eps || a[i][k] < -eps )
{
numar = a[i][k];
l = i;
break;
}
else
{
for( int j = 1; j <= m+1; ++j )
swap( a[i][j], a[i+1][j] );
i--;
}
for( int j = k; j <= m+1; ++j)
a[l][j] /= numar;
for( int i = l+1; i <= n; ++i )
{
numar = a[i][k];
for( int j = k; j <= m + 1; j++ )
a[i][j] -= (numar * a[l][j]);
}
k++;
}
}
void Write()
{
double suma = a[n][m+1] / a[n][m];
sol[n] = suma;
for( int i = n - 1; i >= 1; --i )
{
sol[i] = (a[i][m+1] - suma) / a[i][i];
suma += (a[i][m+1] - suma) / a[i][i];
}
for( int i = 1; i <= n; ++i )
fout << setprecision(8) << sol[i] << ' ';
}