Pagini recente » Cod sursa (job #880305) | Cod sursa (job #2880566) | Cod sursa (job #1063539) | Cod sursa (job #1062858) | Cod sursa (job #3157459)
#include <bits/stdc++.h>
using namespace std;
const int N = 303;
ifstream fin("gauss.in");
ofstream fout("gauss.out");
#define cin fin
#define cout fout
int n, m;
vector<vector<long double>> matr(N, vector<long double>(N));
vector<long double> p(N);
int main(){
cin >> n >> m;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m + 1; j++){
cin >> matr[i][j];
}
}
int i = 1, j = 1;
while(i <= n && j <= m){
int ok1 = 0;
for(int k = i; k <= n; k++){
if(matr[k][j] != 0){
swap(matr[i], matr[k]);
ok1 = 1;
break;
}
}
if(ok1){
long double pl = (1 / (matr[i][j] * 1.0));
for(int k = 1; k <= m + 1; k++){
matr[i][k] *= pl;
}
for(int k = i + 1; k <= n; k++){
for(int l = 1; l <= m + 1; l++){
matr[k][l] -= matr[i][l] * matr[k][j];
}
}
i++;
j++;
}else{
p[j] = 1;
j++;
}
}
for(int i = n; i >=1 ; i--){
int pi = 0;
for(int j = 1; j <= m; j++){
if(matr[i][j]){
pi = j;
break;
}
}
if(pi == 0 && matr[i][m + 1]){
cout << "Imposibil";
return 0;
}
for(int j = m; j > pi; j--){
p[pi] -= matr[i][j] * p[j];
}
p[pi] += matr[i][m + 1];
}
for(int i = 1; i <= m; i++){
cout << fixed << setprecision(8) << p[i] << " ";
}
}