Pagini recente » Cod sursa (job #80191) | Cod sursa (job #1758129) | Cod sursa (job #1891231) | Cod sursa (job #2794446) | Cod sursa (job #1330512)
#include<algorithm>
#include<cstdio>
#include<iomanip>
using namespace std;
#define Nmax 302
#define EPS 0.0000001
double A[Nmax][Nmax], X[Nmax];
int N, M;
int main ()
{
freopen("gauss.in","r",stdin);
freopen("gauss.out","w",stdout);
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]);
for(int k=1; k<N && k<=M; k++)
{
int nr=N;
for(int i=k; i<=nr;i++)
if(A[i][k] <EPS && A[i][k]> -EPS)
{
for(int u=k; u<=M+1; u++)
swap( A[nr][u], A[i][u]);
nr--;
i--;
}
for(int i=k+1; i<=N; i++)
{
if(A[i][k]!=0)
{
double aux= A[k][k] / A[i][k];
for(int j=k; j<=M+1; j++)
{
A[i][j] *=aux;
A[i][j] -=A[k][j];
}
}
}
}
for(int i=N; i>=1; i--)
for(int j=1; j<=M+1; j++)
if( A[i][j]>EPS || A[i][j] <-EPS)
{
if(j==M+1)
{
printf("imposibil");
return 0;
}
X[j]= (double)A[i][M+1];
for(int u=j+1; u<=M; ++u)
X[j] = X[j] - A[i][u]*X[u];
X[j] = X[j]/A[i][j];
break;
}
for(int i=1;i<=M;i++)
printf("%.8lf ", X[i]);
return 0;
}