Pagini recente » Cod sursa (job #89264) | Cod sursa (job #3204073) | Cod sursa (job #1468475) | Cod sursa (job #2399536) | Cod sursa (job #1025854)
#include<fstream>
#include<iomanip>
#include<string.h>
using namespace std;
#define max_n 305
#define eps 0.0000001
ifstream f("gauss.in");
ofstream g("gauss.out");
int n , m;
double V[max_n][max_n] , Sol[max_n] , aux[max_n];
inline double abs( double x ){
return x < 0 ? -x : x;
}
inline bool zero( double x ){
return abs(x) < eps ? 1 : 0;
}
inline void read(){
f>>n>>m;
for( int j , i = 1 ; i <= n ; i++ )
for( j = 1 ; j <= m + 1 ; j++ )
f>>V[i][j];
}
void solve(){
int i = 1 , j = 1 , k , i1 , j1;
double d;
while( i <= n && j <= m ){
for( k = i ; k <= n && zero(V[k][j]) ; k++ );
if( k > n ){
j++;
continue;
}
if( k != i ){
memcpy( aux , V[i] , sizeof(aux) );
memcpy( V[i] , V[k] , sizeof(aux) );
memcpy( V[k] , aux , sizeof(aux) );
}
d = V[i][j]; V[i][j] = 1;
for( k = j+1 ; k <= m + 1 ; k++ )
V[i][k] /= d;
for( i1 = i + 1 ; i1 <= n ; i1++ ){
for( j1 = j + 1 ; j1 <= m + 1 ; j1++ )
V[i1][j1] -= V[i][j1] * V[i1][j];
V[i1][j] = 0;
}
i++; j++;
}
for( i = n ; i >= 1 ; i-- ){
for( j = 1 ; j <= m+1 ; j++ ){
if( !zero(V[i][j]) ){
if( j == m+1 ){
g<<"Imposibil\n";
return;
}
Sol[j] = V[i][m+1];
for( k = j+1 ; k <= m ; k++ )
Sol[j] -= V[i][k]*Sol[k];
break;
}
}
}
for( i = 1 ; i <= m ; i++ ){
g<<fixed<<setprecision(8)<<Sol[i]<<" ";
}
g<<"\n";
}
int main(){
read();
solve();
return 0;
}