Pagini recente » Cod sursa (job #1191650) | Cod sursa (job #1695244) | Cod sursa (job #1039848) | Cod sursa (job #1068638) | Cod sursa (job #1289718)
#include<fstream>
#define abs(x) ((x)<0?(-(x)):(x))
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];
int N,M,st[Nmax];
int zero(double x){
return abs(x)<eps;
}
void swapr(int x,int y,int col){
for(int i=col;i<=M+1;i++) swap(A[x][i],A[y][i]);
}
int has(int x,int y){
for(int i=x;i<=N;i++) if(!zero(A[i][y])){
swapr(x,i,y);
return 1;
}
return 0;
}
void das(int x,int y){
for(int i=x;i<=N;i++){
double c=A[i][y];
if(!zero(c)){
for(int j=y;j<=M+1;j++){
A[i][j]/=c;
if(i>x) A[i][j]-=A[x][j];
}
}
}
}
void print(){for(int i=1;i<=N;i++){for(int j=1;j<=M+1;j++){out<<A[i][j]<<' ';}out<<'\n';}out<<"\n\n";}
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;
while(row<=N && col<=M){
if(!has(row,col)) col++;
else{
st[row]=col;
//divide(row,col);
//substract(row,col);
das(row,col);
row++;
}
}
int e=row-1;
for(;row<=N;row++) if(!zero(A[row][M+1])){
out<<"Imposibil\n";
return 0;
}
for(int j=M;j>=1;j--){
if(st[e]!=j) Sol[j]=0.;
else{
double val=0.;
for(int k=j+1;k<=M;k++) val+=Sol[k]*A[e][k];
Sol[j]=A[e][M+1]-val;
e--;
}
}
out.precision(11);
for(int i=1;i<M;i++) out<<fixed<<Sol[i]<<' ';
out<<fixed<<Sol[M]<<'\n';
return 0;
}