Pagini recente » Monitorul de evaluare | Cod sursa (job #1196937) | Cod sursa (job #1760007) | Istoria paginii utilizator/ruxyrezidenttm | Cod sursa (job #2087016)
#include <fstream>
#include <iomanip>
#define EPS 1e-10
#define DIM 303
using namespace std;
ifstream f("gauss.in");
ofstream g("gauss.out");
int n, m;
double sol[DIM], a[DIM][DIM];
int main()
{
f>>n>>m;
for(int i = 1; i <= n; ++ i)
for(int j = 1; j <= m + 1; ++ j)
f>>a[i][j];
int i = 1, j = 1;
while(i <= n && j <= m){
int ic = i;
while(ic <= n){
if(a[ic][j])
break;
++ ic;
}
if(ic == n + 1){
++ j;
continue;
}
if(ic != i)
for(int jc = j; jc <= m + 1; ++ jc)
swap(a[i][jc], a[ic][jc]);
for(int jc = j + 1; jc <= m + 1; ++ jc)
a[i][jc] /= a[i][j];
a[i][j] = 1;
for(int ic = i + 1; ic <= n; ++ ic){
if(a[ic][j] == 0)
continue;
for(int jc = j + 1; jc <= m + 1; ++ jc){
a[ic][jc] -= a[ic][j] * a[i][jc];
}
a[ic][j] = 0;
}
++ i;
++ j;
}
i = n, j = m;
while(i >= 1){
int jc = 1;
while(jc <= m + 1){
if(a[i][jc] < -EPS || a[i][jc] > EPS)
break;
++ jc;
}
if(jc == m + 1){
g<<"Imposibil";
return 0;
}
if(jc == m + 2){
-- i;
continue;
}
double s = 0;
for(int jn = jc + 1; jn <= m; ++ jn)
s += a[i][jn] * sol[jn];
sol[jc] = (a[i][m + 1] - s);
-- i;
}
for(int i = 1; i <= n; ++ i)
g<<fixed<<setprecision(10)<<sol[i]<<" ";
return 0;
}