Pagini recente » Cod sursa (job #1212064) | Cod sursa (job #2011227) | Cod sursa (job #2283528) | Cod sursa (job #40091) | Cod sursa (job #1289752)
#include<fstream>
#include<algorithm>
using namespace std;
ifstream in("gauss.in");
ofstream out("gauss.out");
const int Nmax = 303;
const double eps = 1e-10;
double A[Nmax][Nmax],Sol[Nmax],c;
int N,M,st[Nmax];
inline int has(int &x,int &y){
for(int i=x;i<=N;i++) if(A[i][y]<-eps || eps<A[i][y]){
if(x!=i) swap(A[x],A[i]);
return 1;
}
return 0;
}
int main(){
in>>N>>M;
for(int i=1;i<=N;i++) for(int j=1;j<=M+1;j++) in>>A[i][j];
int row=1,col=1,e;
while(row<=N && col<=M){
if(!has(row,col)) col++;
else{
st[row]=col;
for(int l=row;l<=N;l++){
c=A[l][col];
if(c<-eps || eps<c) for(int j=col;j<=M+1;j++) A[l][j]/=c;
}
for(int l=row+1;l<=N;l++){
if(A[l][col]<-eps || eps<A[l][col]) for(int j=col;j<=M+1;j++) A[l][j]-=A[row][j];
}
row++;
}
}
e=row-1;
for(;row<=N;row++) if(A[row][M+1]<-eps || eps<A[row][M+1]){
out<<"Imposibil\n";
return 0;
}
for(int j=M;j>=1;j--){
if(st[e]!=j) Sol[j]=0.;
else{
Sol[j]=A[e][M+1];
for(int k=j+1;k<=M;k++) Sol[j]-=Sol[k]*A[e][k];
e--;
}
}
out.precision(11);
for(int i=1;i<M;i++) out<<fixed<<Sol[i]<<' ';
out<<fixed<<Sol[M]<<'\n';
return 0;
}