Pagini recente » Cod sursa (job #2807602) | Cod sursa (job #2502513) | Cod sursa (job #2515256) | Cod sursa (job #1604325) | Cod sursa (job #2427669)
#include<fstream>
#include<iomanip>
using namespace std;
ifstream cin("gauss.in");
ofstream cout("gauss.out");
#define epsilon 0.0000001
#define maxn 305
int N,M;
double sistem[maxn][maxn], result[maxn];
int solve(){
for(int i=N; i>0; --i)
for(int j=1; j<=M+1; ++j){
if(sistem[i][j]< -epsilon || epsilon<sistem[i][j]){
if(j==M+1){
cout<<"Imposibil\n";
return 0;
}
result[j]=sistem[i][M+1];
for(int k=j+1; k<=M; k++)
result[j]-=result[k]*sistem[i][k];
break;
}
}
for(int i=1; i<=M; i++)
cout<<fixed<<setprecision(8)<<result[i]<<' ';
cout<<'\n';
}
void gauss_algorithm(){
int aux, i=1, j=1,k;
while(i<=N && j<=M){
for(k=i; k<=N; ++k)
if(sistem[k][j]<-epsilon || epsilon<sistem[k][j])
break;
if(k==N+1){
++j;
continue;
}
if(k!=i)
for(int l=1; l<=M+1; ++l){
aux=sistem[i][l];
sistem[i][l]=sistem[k][l];
sistem[k][l]=aux;
}
for(int l=j+1; l<=M+1; ++l)
sistem[i][l]/=sistem[i][j];
sistem[i][j]=1;
for(int u=i+1; u<=N; ++u){
for(int l=j+1; l<=M+1; ++l)
sistem[u][l]-=sistem[u][j]*sistem[i][l];
sistem[u][j]=0;
}
i++; j++;
}
}
int main(){
cin>>N>>M;
for(int i=1; i<=N; i++)
for(int j=1; j<=M+1; j++)
cin>>sistem[i][j];
gauss_algorithm();
solve();
return 0;
}