Pagini recente » Cod sursa (job #2535184) | Cod sursa (job #2563151) | Cod sursa (job #2652740) | Cod sursa (job #2437435) | Cod sursa (job #892351)
Cod sursa(job #892351)
#include<fstream>
#include<iomanip>
#include<cstdlib>
#include<cmath>
using namespace std;
ifstream fin("gauss.in");
ofstream fout("gauss.out");
const double Eps = 0.00000000000001;
const int Nmax = 303;
double A[Nmax][Nmax]; int P; int N; int M;double Sol[Nmax];
void Read(){
fin >> N >> M;
for(int i = 1; i <= N; ++i)
for(int j = 1; j <= M + 1; j++)
fin >> A[i][j];
}
void Gauss(){
int X = 1; int Y = 1;
while(X <= N && Y <= M){
int P = -1;
for(int i = X; i <= N; ++i)
if(fabs(A[i][Y]) > Eps){
P = i; break;
}
if(P == -1){ fout << "Imposibil"; exit(0);}
if(P != X)
for(int j = 1; j <= M + 1; ++j)
swap(A[P][j], A[X][j]);
double D = A[X][Y];
for(int j = 1; j <= M + 1; ++j)
A[X][j] = A[X][j] / D;
for(int i = X + 1; i <= N; ++i){
D = -A[i][Y];
for(int j = Y; j <= M + 1; ++j)
A[i][j] = A[i][j] + D * A[X][j];
}
++X; ++Y;
}
}
void Solution(){
for(int i = N; i >= 1 ; --i){
bool ok = false;
for(int j = 1; j <= M ; ++j)
if(fabs(A[i][j]) > Eps){
ok = true;
Sol[j] = A[i][M + 1];
for(int k = j + 1; k <= M; ++k)
Sol[j] -= Sol[k] * A[i][k];
break;
}
if(ok == false){
fout <<"Imposibil"; exit(0);
}
}
for(int i = 1; i <= M ; ++i)
fout << fixed << setprecision(8) << Sol[i]<<" ";
}
int main(){
Read(); Gauss(); Solution();
return 0;
}