Pagini recente » Cod sursa (job #2945300) | Cod sursa (job #928883) | Cod sursa (job #272920) | Cod sursa (job #2293368) | Cod sursa (job #2554090)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <iomanip>
#include <cmath>
using namespace std;
typedef long double ld;
ifstream fin("gauss.in");
ofstream fout("gauss.out");
int n, m;
vector<ld> gau[314];
ld sol[314];
void div(vector<ld> &v, ld a){
for(auto &b : v){
b /= a;
}
}
void sum(vector<ld> &v1, const vector<ld> &v2, ld a){
for(int i = 0; i < v1.size(); ++i){
v1[i] += a*v2[i];
}
}
void deb(){
for(int i = 0; i < n; ++i){
for(auto a : gau[i]){
cout << a << "\t";
}
cout << "\n";
}
}
int main(){
fin >> n >> m;
for(int i = 0; i < n; ++i){
for(int j = 0; j <= m; ++j){
ld a;fin >> a;
gau[i].push_back(a);
}
}
for(int i = 0; i < m; ++i){
bool found = false;
for(int j = i; j < n; ++j){
if(gau[j][i] != 0){
swap(gau[j], gau[i]);
found = true;
break;
}
}
if(found){
div(gau[i], gau[i][i]);
for(int j = i+1; j < n; ++j){
sum(gau[j], gau[i], -gau[j][i]);
}
}
}
bool fml = false;
for(int i = m-1; i >= 0; --i){
if(abs(gau[i][i]) <= 0.0000000001){
fml = true;
}
ld v = gau[i][m];
for(int j = i; j < m; ++j){
v -= sol[j]*gau[i][j];
}
sol[i] = v;
}
if(!fml){
fout << setprecision(10) << fixed;
for(int i = 0; i < n; ++i){
fout << sol[i] << " ";
}
}else{
fout << "Imposibil";
}
return 0;
}