Pagini recente » Cod sursa (job #1968373) | Cod sursa (job #1219508) | Cod sursa (job #731013) | Cod sursa (job #2168177) | Cod sursa (job #1205557)
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#define Nmax 305
#define EPS 0.00000001
using namespace std;
double A[Nmax][Nmax];
double X[Nmax];
int N,M;
void read()
{
scanf("%d%d",&N,&M);
for(int i = 1; i <= N; ++i)
for(int j = 1; j <= M + 1; ++j)
scanf("%lf",&A[i][j]);
}
void swap_line(int i,int k)
{
for(int j = 1; j <= M + 1; ++j)
swap(A[i][j],A[k][j]);
}
void gauss()
{
int i,j,k,l;
double value;
for(i = 1, j = 1; i <= N && j <= M; ++i,++j)
{
for(k = i; k <= N; ++k)
if(A[k][j] > EPS || A[k][j] < - EPS)
break;
if(k == N + 1)continue;
if(i != k) swap_line(i,k);
for(k = i + 1; k <= N; ++k)
{
value = A[k][j]/A[i][j];
for(l = j; l <= M + 1; ++l)
{
A[k][l] = A[k][l] - value * A[i][l];
if( A[k][l] < EPS && A[k][l] > - EPS)
A[k][l] = 0;
}
}
}
}
void get_answers()
{
int i,j,k,l;
for(i = N; i >= 1; --i)
{
for(j = 1; j <= M && !A[i][j]; ++j);
if(j == M + 1 && N <= M){
printf("Imposibil\n");
exit(0);
}
X[i] = A[i][M+1];
for(k = j + 1; k <= M; ++k)
X[i] -= X[k]*A[i][k];
X[i] /= A[i][j];
}
}
void print_answers()
{
for(int i = 1; i <= M; ++i){
printf("%.8lf ",X[i]);
}
}
int main()
{
freopen("gauss.in","r",stdin);
freopen("gauss.out","w",stdout);
read();
gauss();
get_answers();
print_answers();
return 0;
}