Pagini recente » Cod sursa (job #382307) | Monitorul de evaluare | Profil baueer | Cod sursa (job #938540) | Cod sursa (job #2070541)
#include<fstream>
#include<iomanip>
using namespace std;
ifstream fin("gauss.in");
ofstream fout("gauss.out");
const double EPS = 1e-10;
int i, j, n, m;
double A[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 >> A[i][j];
i = j = 1;
while( i <= n && j <= m ){
bool ok = false;
for( int ii = i; ii <= n; ii++ ){
if( A[ii][j] < -EPS || A[ii][j] > EPS ){
ok = true;
if( ii != i )
for( int jj = 1; jj <= m + 1; jj++ )
swap( A[ii][jj], A[i][jj] );
break;
}
}
if( ok == false ){
j++;
continue;
}
for( int jj = j + 1; jj <= m + 1; jj++ )
A[i][jj] /= A[i][j];
A[i][j] = 1.0;
for( int ii = i + 1; ii <= n; ii++ ){
for( int jj = j + 1; jj <= m + 1; jj++ )
A[ii][jj] -= A[ii][j] * A[i][jj];
A[ii][j] = 0;
}
i++;
j++;
}
for( int i = n; i >= 1; i-- ){
int pos = 0;
for( int j = 1; j <= m + 1; j++ ){
if( A[i][j] < -EPS || A[i][j] > EPS ){
pos = j;
break;
}
}
if( pos == m + 1 ){
fout << "Imposibil\n";
return 0;
}
if( pos == 0 )
continue;
for( int j = pos + 1; j <= m; j++ )
A[i][m + 1] -= A[i][j] * sol[j];
sol[pos] = A[i][m + 1];
}
for( int i = 1; i <= m; i++ )
fout << setprecision(10) << fixed << sol[i] << " ";
return 0;
}