Pagini recente » Cod sursa (job #1341604) | Cod sursa (job #1041205) | Clasamentul arhivei de probleme | Cod sursa (job #1795188) | Cod sursa (job #1970334)
#include<fstream>
#include<iomanip>
#define EPS 1e-7
using namespace std;
ifstream fin("gauss.in");
ofstream fout("gauss.out");
int n, m;
double ec[305][305], sol[305];
int main(){
fin >> n >> m;
for( int i = 1; i <= n; i++ ){
for( int j = 1; j <= m + 1; j++ ){
fin >> ec[i][j];
}
}
for( int i = 1, j = 1; i <= n && j <= m; ){
int ok = 0;
for( int ii = i; ii <= n; ii++ ){
if( !( -EPS < ec[ii][j] && ec[ii][j] < EPS ) ){
ok = 1;
if( ii != i )
for( int jj = j; jj <= m; jj++ ){
swap( ec[ii][jj], ec[i][jj] );
}
break;
}
}
if( ok == 0 ){
j++;
continue;
}
for( int jj = j + 1; jj <= m + 1; jj++ ){
ec[i][jj] /= ec[i][j];
}
ec[i][j] = 1.0;
for( int ii = i + 1; ii <= n; ii++ ){
for( int jj = j + 1; jj <= m + 1; jj++ ){
ec[ii][jj] -= ec[i][jj] * ec[ii][j];
}
ec[ii][j] = 0.0;
}
i++;
j++;
}
for( int i = n; i >= 1; i-- ){
int p = 0;
for( int j = 1; j <= m; j++ ){
if( !( -EPS < ec[i][j] && ec[i][j] < EPS ) ){
p = j;
break;
}
}
if( p == 0 && ( -EPS < ec[i][m + 1] && ec[i][m + 1] < EPS ) ){
fout << "Imposibil\n";
return 0;
}
sol[p] = ec[i][m + 1] / ec[i][p];
for( int ii = i - 1; ii >= 1; ii-- ){
ec[ii][m + 1] -= sol[p] * ec[ii][p];
}
}
for( int i = 1; i <= m; i++ ){
fout << setprecision(10) << fixed << sol[i] << " ";
}
return 0;
}