Pagini recente » Profil Djok | Cod sursa (job #1828703) | Arhiva de probleme | Cod sursa (job #1768617) | Cod sursa (job #2303016)
#include <fstream>
#include <vector>
#include <iomanip>
std::ifstream cin("gauss.in");
std::ofstream cout("gauss.out");
#define dif 0.0000001
#define maxn 305
int N,M;
double v[maxn][maxn],sol[maxn];
int i=1,j=1;
inline void equalize(){
for(int j=::j+1;j<=M+1;j++){
v[::i][j]/=v[::i][::j];
}
v[::i][::j]=1;
}
inline void makeUnique(){
for(int i=::i+1;i<=N;i++){
for(int j=::j+1;j<=M+1;j++)
v[i][j]-=v[::i][j]*v[i][::j];
v[i][::j]=0;
}
}
int main()
{
cin>>N>>M;
for(int a=1;a<=N;a++)
for(int b=1;b<=M+1;b++)
cin>>v[a][b];
while(i<=N&&j<=M){
int k;
for(k=i;k<=N;k++)
if(v[k][j]<-dif||v[k][j]>dif)
break;
if(k==N+1){ //variabila livera
++j;
continue;
}
if(k!=i){
int aux;
for(int x=1;x<=M+1;x++)
aux=v[i][x],v[i][x]=v[k][x],v[k][x]=aux;
}
equalize();
makeUnique();
i++;j++;
}
//creare solutie daca posibil
for(int k=N;k>0;--k){
for(int j=1;j<=M+1;j++){
if(v[k][j]<-dif||v[k][j]>dif){
if(j==M+1){
cout<<"Imposibil";
return 0;
}
sol[j]=v[k][M+1];
for(int x=j+1;x<M+1;x++)
sol[j]-= sol[x]*v[k][x];
break;
}
}
}
//Afisare
for(int i=1;i<=N;i++)
cout<<std::fixed<<std::setprecision(10)<<sol[i]<<' ';
}