Pagini recente » Cod sursa (job #269286) | Cod sursa (job #952135) | Cod sursa (job #411515) | Cod sursa (job #1202975) | Cod sursa (job #1127252)
#include<cstdio>
using namespace std;
#define MAX 305
#define zr 0.0000001
int N , M ;
double A[MAX][MAX] , X[MAX];
void read();
bool solve();
void write();
int main()
{
read();
if(solve())
write();
else printf("Imposibil");
return 0;
}
void read()
{
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]);
}
bool solve()
{
int i , j , p,k;
double aux;
i = j = 1;
while(i <= N && j<= M)
{
for(p = i ; p <= N ; ++p )
if(A[p][j] < zr || A[p][j] > zr)
break;
if(p == N+1)
{
j++;
continue;
}
if( p != i)
for( k = j ; k <= M ; ++k )
{
aux = A[i][j];
A[i][j] = A[p][j];
A[p][j] = aux;
}
for( k = j+1 ; k<= M+1 ; ++k )
A[i][k] /=A[i][j];
A[i][j] = 1;
for( p = i+1 ; p <= N ; ++p)
{
for(k = j+1 ; k <= M+1 ; ++k )
A[p][k] -= A[p][j]*A[i][k];
A[p][j] = 0;
}
i++;j++;
}
for(i = N ; i ; i--)
{
for(j = 1 ; j <= M ; ++j )
if(A[i][j] < -zr || A[i][j] > zr)
break;
if(j == M+1 && (A[i][M+1] < -zr || A[i][M+1] > zr ))return 0;
X[j] = A[i][M+1];
for(k = j+1 ; k <= M ; ++k )
X[j] -= A[i][k]*X[k];
}
return 1;
}
void write()
{
for(int i = 1 ; i<= M ; ++i )
printf("%.10lf " , X[i]);
}