Pagini recente » Cod sursa (job #2150074) | Cod sursa (job #523941) | Cod sursa (job #1656924) | Cod sursa (job #1724261) | Cod sursa (job #1393460)
#include <cstdio>
#include <algorithm>
#define Nmax 305
#define EPS 0.00000001
using namespace std;
double D[Nmax][Nmax],X[Nmax];
int N,M;
bool is_zero(double d)
{
if(d < 0) d *= -1;
if(d < EPS)
return 1;
return 0;
}
void swap_line(int A,int B)
{
for(int i = 1; i <= M+1; ++i)
swap(D[A][i],D[B][i]);
}
void Read()
{
int aux;
scanf("%d%d",&N,&M);
for(int i = 1; i <= N; ++i)
for(int j = 1; j <= M + 1; ++j){
scanf("%d",&aux);
D[i][j] = aux;
}
}
void Killing_Gauss(){/// lol :D poor Gauss
int i = 1,j = 1,k,l;
for(int step = 1; step < N; ++step,++i,++j)
{
k = 1;
while( k <= M && D[i][k] == 0 )
++k;
if(k != j)
swap_line(i,k);
for(k = i + 1; k <= N; ++k)
{
double val = - D[k][j] / D[i][j];
for(l = j; l <= M + 1; ++l)
{
D[k][l] += D[i][l] * val;
if(is_zero(D[k][l]))
D[k][l] = 0;
}
}
}
}
void Get_sol()
{
for(int i = N; i >= 1; --i)
{
X[i] = D[i][M+1];
for(int j = M; j >= i; --j)
{
if(j == i)
{
if(D[i][j])
X[i] /= D[i][j];
else
{
printf("Imposibil");
exit(0);
}
continue;
}
X[i] -= D[i][j] * X[j];
}
}
double aux;
for(int i = 1; i <= M; ++i)
{
aux = X[i];
printf("%.10lf ",aux);
}
}
int main()
{
freopen("gauss.in","r",stdin);
freopen("gauss.out","w",stdout);
Read();
Killing_Gauss();
Get_sol();
return 0;
}