Pagini recente » Cod sursa (job #978776) | Cod sursa (job #2654451) | Cod sursa (job #1408470) | Cod sursa (job #1616216) | Cod sursa (job #2629534)
#include <iostream>
#include <fstream>
#include <iomanip>
const int MAXN = 300 + 1;
using namespace std;
typedef long double ld;
ifstream in("gauss.in");
ofstream out("gauss.out");
int n,m;
ld v[MAXN + 1][MAXN + 1];
ld ans[MAXN];
bool viz[MAXN];
void afis(){
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m + 1; j++)
cout<<setprecision(7)<<fixed<<v[i][j]<<" ";
cout<<endl;
}
cout<<endl;
}
int main()
{
in>>n>>m;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= m + 1; j++)
in>>v[i][j];
int inceput = 1;
for(int j = 1; j <= m - 1; j++){
for(int i = inceput + 1; i <= n; i++){
ld x1 = v[inceput][j];
ld x2 = v[i][j];
ld inmulteste = -x1/x2;
//cout<<"linia "<<i<<" "<<inmulteste<<endl;
for(int k = 1; k <= m + 1; k++){
v[i][k] *= inmulteste;
v[i][k] += v[inceput][k];
}
}
inceput++;
}
bool ok = true;
for(int i = n; i >= 1 && ok; i--){
int cnt = 0,index;
for(int j = 1; j <= m && ok; j++){
if(v[i][j] != 0){
index = j;
cnt++;
}
if(cnt > 1)
ok = false;
}
if(viz[index]){
if(v[i][m + 1] != v[i][index])
ok = false;
}else{
//cout<<v[i][m + 1]<<" "<<v[i][index]<<endl;
ld xj = v[i][m + 1] / v[i][index];
ans[index] = xj;
viz[index] = true;
for(int linie = i - 1; linie >= 1 && ok; linie--){
v[linie][m + 1] -= v[linie][index] * xj;
v[linie][index] = 0;
}
}
}
if(!ok)
out<<"Imposibil";
else{
for(int i = 1; i <= m; i++)
out<<setprecision(13)<<fixed<<ans[i]<<" ";
}
return 0;
}