Pagini recente » Cod sursa (job #68242) | Cod sursa (job #1235083) | Cod sursa (job #330366) | Cod sursa (job #2608683) | Cod sursa (job #662966)
Cod sursa(job #662966)
#include<stdio.h>
#define maxDim 305
#define eps 1e-7
FILE*f=fopen("gauss.in","r");
FILE*g=fopen("gauss.out","w");
int n,m,i,j,k,ii,jj,ok = 1; double x;
double A[maxDim][maxDim],Sol[maxDim];
inline void citire () {
fscanf(f,"%d %d",&n,&m);
for ( i = 1 ; i <= n ; ++i ){
for ( j = 1 ; j <= m + 1 ; ++j ){
fscanf(f,"%lf",&A[i][j]);
}
}
}
inline double abs ( double j ){
if ( j < 0 )
return -j;
return j;
}
inline bool equal ( double a , double b ){
if ( abs(a-b) < eps )
return 1;
return 0;
}
inline void swap ( double &a, double &b ){
double aux;
aux = a; a = b; b = aux;
}
inline void gauss () {
for ( i = j = 1 ; i <= n && j <= m ; ){
for ( k = 1 ; k <= n ; ++k ){
if ( !equal(A[k][j],0.0) )
break ;
}
if ( k == n + 1 ){
++j;
continue ;
}
if ( i != k ){
for ( ii = 1 ; ii <= m + 1 ; ++ii ){
swap(A[i][ii],A[k][ii]);
}
}
for ( ii = j + 1 ; ii <= m + 1 ; ++ii ){
A[i][ii] /= A[i][j];
}
A[i][j] = 1;
for ( ii = i + 1 ; ii <= n ; ++ii ){
x = A[ii][j];
for ( jj = 1 ; jj <= m + 1 ; ++jj ){
A[ii][jj] = A[i][jj] * x - A[ii][jj];
}
}
++i; ++j;
}
for ( i = n ; i >= 1 && ok ; --i ){
for ( j = 1 ; j <= m + 1 ; ++j ){
if ( !equal(A[i][j],0.0) ){
if ( j == m + 1 ){
ok = 0; break ;
}
Sol[j] = A[i][m+1];
for ( ii = j + 1 ; ii <= m ; ++ii ){
Sol[j] -= A[i][ii] * Sol[ii];
}
break ;
}
}
}
}
inline void afisare () {
if ( !ok ){
fprintf(g,"Imposibil\n");
}
else{
for ( ii = 1 ; ii <= m ; ++ii ){
fprintf(g,"%.8lf ",Sol[ii]);
}
fprintf(g,"\n");
}
}
int main () {
citire();
gauss();
afisare();
fclose(f);
fclose(g);
return 0;
}