Pagini recente » Cod sursa (job #1140188) | Cod sursa (job #1985739) | Cod sursa (job #2463034) | Cod sursa (job #3141637) | Cod sursa (job #3262937)
#include <fstream>
#include <iostream>
#include <iomanip>
using namespace std;
ifstream fin("gauss.in");
ofstream fout("gauss.out");
bool zeroAcc(double x){
return (x > -1e-8) && (x < 1e-8);
}
double A[305][305];
int rez[305];
int main()
{
int N, M;
fin >> N >> M;
++ M;
for(int i = 1; i <= N; ++ i){
for(int j = 1; j <= M; ++ j){
fin >> A[i][j];
}
}
int r = 1, c = 1;
while(r <= N && c < M){
if(zeroAcc(A[r][c])){
int i = r + 1;
while(i <= N && zeroAcc(A[i][c])){
++ i;
}
if(i > N){
++ c;
continue;
}
swap(A[r], A[i]);
}
// cout << r << ' ' << c << '\n';
if(rez[c] != -1){
for(int i = 1; i <= N; ++ i){
if(i != r){
double coef = A[i][c] * 1.0 / A[r][c];
for(int j = 1; j <= M; ++ j){
A[i][j] -= coef * 1.0 * A[r][j];
}
}
}
rez[c] = r;
++ r;
++ c;
}
}
if(c > M){
for(int i = r; i <= N; ++ i){
if(!zeroAcc(A[i][M])){
fout << "Imposibil\n";
return 0;
}
}
}
for(int i = 1; i < M; ++ i){
if(A[rez[i]][M] == 0){
fout << 0 << ' ';
} else {
fout << setprecision(10) << A[rez[i]][M] * 1.0 / A[i][i] << ' ';
}
}
return 0;
}