Pagini recente » Cod sursa (job #3305153) | Cod sursa (job #3305663) | Cod sursa (job #2361008) | Cod sursa (job #2361845) | Cod sursa (job #3304063)
#include <fstream>
#include <iomanip>
#include <cmath>
using namespace std;
ifstream in("gauss.in");
ofstream out("gauss.out");
int n, m;
long double v[305][305];
long double ans[305];
long double err=1e-17;
void show()
{
for(int i = 1; i<=n; i++)
{
for(int j = 1; j<=m + 1; j++)
{
out<<v[i][j]<<" ";
}
out<<'\n';
}
out<<'\n';
}
int main()
{
in>>n>>m;
for(int i = 1; i<=n; i++)
{
for(int j = 1; j<=m + 1; j++)
{
in>>v[i][j];
}
}
//show();
int lin = 1;
for(int j = 1; j<=m && lin <= n; j++, lin++)
{
int gasit = 0;
for(int i = lin; i<=n; i++)
{
if(v[i][j] != 0)
{
gasit = i;
break;
}
}
if(gasit == 0)
{
ans[j] = 0;
continue;
}
swap(v[lin], v[gasit]);
long double x = v[lin][j];
for(int j1 = 1; j1<=m + 1; j1++)
{
v[lin][j1] /= x;
}
for(int i1 = lin + 1; i1<=n; i1++)
{
x = v[i1][j];
for(int j1 = 1; j1<=m + 1; j1++)
{
v[i1][j1] -= (long double)x * v[lin][j1];
}
}
//show();
}
for(int i = n; i>=1; i--)
{
int ok = 0;
for(int j = 1; j<=m; j++)
{
if(v[i][j] != 0)
{
ok = 1;
long double rez = v[i][m + 1];
for(int j1 = j + 1; j1<=m; j1++)
{
rez -= (long double)v[i][j1] * ans[j1];
}
ans[j] = rez;
break;
}
}
if(ok == 0 && abs(v[i][m + 1]) > err)
{
out<<"Imposibil";
return 0;
}
}
for(int i = 1; i<=m; i++)
{
out<<setprecision(10)<<fixed<<ans[i]<<" ";
}
return 0;
}