Pagini recente » Cod sursa (job #1982354) | Cod sursa (job #1602883) | Cod sursa (job #2761666) | Cod sursa (job #3140414) | Cod sursa (job #2840935)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 300;
double a[NMAX + 1][NMAX + 1];
double eps = 0.001;
int line[NMAX + 1];
double solutions[NMAX + 1];
double modul( double a ) {
if ( a < 0 )
return -a;
return a;
}
int main() {
ifstream fin( "gauss.in" );
ofstream fout( "gauss.out" );
int n, m, i, j, maxim, l;
fin >> n >> m;
l = 1;
for ( i = 1; i <= n; i ++ ) {
for ( j = 1; j <= m + 1; j ++ )
fin >> a[i][j];
}
for ( j = 1; j <= m; j ++ ) {
maxim = l;
for ( i = l + 1; i <= n; i ++ ) {
if ( modul( a[i][j] ) > modul( a[maxim][j] ) )
maxim = i;
}
if ( modul( a[maxim][j] ) > eps ) {
line[j] = l;
for ( int k = 1; k <= m + 1; k ++ ) {
swap( a[l][k], a[maxim][k] );
}
for ( i = 1; i <= n; i ++ ) {
if ( i != l ) {
double aux = a[i][j] / a[l][j];
for ( int k = 1; k <= m + 1; k ++ ) {
a[i][k] -= a[l][k] * aux;
}
}
}
}
l ++;
}
for ( j = 1; j <= m; j ++ ) {
if ( line[j] ) {
solutions[j] = a[line[j]][m + 1] / a[line[j]][j];
}
}
for ( i = 1; i <= n; i ++ ) {
for ( j = 1; j <= m; j ++ ) {
a[i][m + 1] -= a[i][j] * solutions[j];
}
if ( a[i][m + 1] > eps ) {
fout << "Imposibil";
return 0;
}
}
for ( j = 1; j <= m; j ++ )
fout << fixed << setprecision( 9 ) << solutions[j] << ' ';
return 0;
}