Pagini recente » Cod sursa (job #119948) | Cod sursa (job #2264948) | Cod sursa (job #2025162) | Cod sursa (job #1953977) | Cod sursa (job #1218329)
#include <fstream>
#include <algorithm>
#include <iomanip>
#define rint register int
#define EPS 0.0000001
const char IN [ ] = "gauss.in" ;
const char OUT [ ] = "gauss.out" ;
const int MAX = 314 ;
using namespace std;
ifstream fin ( IN ) ;
ofstream fout ( OUT ) ;
double mat [ MAX ] [ MAX ] , sol [ MAX ] ;
inline void inter ( int i , int j , int m )
{
for ( rint k = 1 ; k <= m + 1 ; ++ k )
swap ( mat [ i ] [ k ] , mat [ j ] [ k ] ) ;
}
int main( )
{
int n , m ;
fin >> n >> m ;
for ( rint i = 1 ; i <= n ; ++ i )
for ( rint j = 1 ; j <= m + 1 ; ++ j )
fin >> mat [ i ] [ j ] ;
int i = 1 , j = 1 , k ;
while ( i <= n and j <= m )
{
for ( k = i ; k <= n ; ++ k )
if ( mat [ k ] [ j ] < -EPS or mat [ k ] [ j ] > EPS )
break ;
if ( k == n + 1 ){
++ j ;
continue;
}
else if ( i != k ) swap ( i , k ) ;
for ( rint z = j + 1 ; z <= m + 1 ; ++ z )
mat [ i ] [ z ] = mat [ i ] [ z ] / mat [ i ] [ j ] ;
mat [ i ] [ j ] = 1 ;
for ( rint u = i + 1 ; u <= n ; ++ u )
{
for ( rint z = j + 1 ; z <= m + 1 ; ++ z )
mat [ u ] [ z ] -= mat [ u ] [ j ] * mat [ i ] [ z ] ;
mat [ u ] [ j ] = 0 ;
}
++ i , ++ j ;
}
for ( i = n ; i >= 1 ; -- i )
for ( j = 1 ; j <= m + 1 ; ++ j )
if ( mat [ i ] [ j ] < -EPS or mat [ i ] [ j ] > EPS ){
if ( j == m + 1 )
{
fout << "Imposibil" << '\n' ;
return 0 ;
}
sol [ j ] = mat [ i ] [ m + 1 ] ;
for ( k = j + 1 ; k <= m ; ++ k )
sol [ j ] -= sol [ k ] * mat [ i ] [ k ] ;
break ;
}
for ( j = 1 ; j <= m ; ++ j)
fout << fixed << setprecision( 10 ) << sol [ j ] << ' ' ;
return 0;
}