Pagini recente » Cod sursa (job #1753214) | Cod sursa (job #963805) | Cod sursa (job #2793814) | Solutii preONI 2007, Runda 3 | Cod sursa (job #1383318)
#include<fstream>
#include<iomanip>
#include<cmath>
using namespace std;
typedef int var;
ifstream fin("gauss.in");
ofstream fout("gauss.out");
#define MAXN 501
double A[MAXN][MAXN], B[MAXN][MAXN];
double SOL[MAXN];
var n, m;
bool diagonalizare() {
for(var step=1; step<=n; step++) {
if(A[step][step] == 0) {
var j;
for(j=step+1; j<=n; j++)
if(A[j][step]) {
for(var k=step; k<=m+1; k++) {
A[step][k] += A[j][k];
}
break;
}
if(A[step][step] == 0)
continue;
}
//Acum A[step][step] != 0
double aux = A[step][step];
for(var j=step; j<=m+1; j++) {
A[step][j] /= aux;
}
for(var j=step+1; j<=n; j++) {
if(A[j][step] == 0) continue;
double aux = A[j][step];
for(var k=step; k<=m+1; k++) {
A[j][k] = A[j][k] / aux - A[step][k];
}
}
}
return true;
}
int main() {
fin>>n>>m;
for(var i=1; i<=n;i++) {
for(var j=1; j<=m+1; j++) {
fin>>A[i][j];
B[i][j] = A[i][j];
}
}
diagonalizare();
/*
for(var i=1; i<=n; i++) {
for(var j=1; j<=m+1; j++) {
fout<<A[i][j]<<" ";
}
fout<<'\n';
}
*/
double rez;
for(var i=n; i>=1; i--) {
rez = A[i][m+1];
for(var j=n; j>i; j--) {
rez -= SOL[j]*A[i][j];
}
SOL[i] = rez;
}
fout<<fixed<<setprecision(12);
for(var i=1; i<=n; i++) {
double rez = 0;
for(var j=1; j<=m; j++) {
rez += SOL[j]*B[i][j];
}
if(abs(rez - B[i][m+1]) > 1e-12) {
fout<<"Imposibil";
return 0;
}
}
for(var i=1; i<=m; i++) {
fout<<SOL[i]<<" ";
}
return 0;
}