Pagini recente » Cod sursa (job #2475176) | Cod sursa (job #141290) | Cod sursa (job #589468) | Cod sursa (job #1657015) | Cod sursa (job #1144692)
#include <fstream>
#include <vector>
#include <iomanip>
using std::vector;
const long double EPS=0.0000000001L;
inline bool egal(long double a, long double b){
if(a<b) return (b-a)<EPS;
else return (a-b)<EPS;
}
int main(){
std::ifstream fin("gauss.in");
std::ofstream fout("gauss.out");
unsigned n,m; fin>>n>>m;
vector< vector<long double> > matr(n,vector<long double>(m+1));
for(unsigned i=0;i<n;++i)
for(unsigned j=0;j<=m;++j)
fin>>matr[i][j];
for(unsigned i=0,j=0; i<n && j<m; ++j, ++i){
unsigned x=i;
for(;x<n;++x) if(!egal(0,matr[x][j])) break;
if(x==n) continue; //variabila libera
else if(x!=i) matr[i].swap(matr[x]);
for(unsigned j2=j+1;j2<=m;++j2) matr[i][j2]/=matr[i][j];
matr[i][j]=1;
for(unsigned i2=i+1;i2<n;++i2){
long double z=matr[i2][j];
for(unsigned j2=j;j2<=m;++j2) matr[i2][j2] -= z*matr[i][j2];
}
}
//necunoscute
vector<long double> x(m,0);
bool posibil=true;
for(int i=n-1;i>=0&&posibil;--i)
for(unsigned j=0;j<=m&&posibil;++j)
if(!egal(0,matr[i][j])){
if(j==m) posibil=false;
else{
x[j]=matr[i][m];
for(unsigned j2=j+1;j2<m;++j2) x[j]-=matr[i][j2]*x[j2];
}
break;
}
fout<<std::fixed<<std::setprecision(8);
if(posibil){
for(unsigned j=0;j<m;++j) fout<<x[j]<<' ';
fout<<'\n';
}
else fout<<"Imposibil\n";
}