Pagini recente » Cod sursa (job #855551) | Cod sursa (job #447121) | Borderou de evaluare (job #1792848) | Cod sursa (job #264102) | Cod sursa (job #3306203)
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cmath>
using namespace std;
const double EPS=1e-10;
const int MAXN=300;
ifstream f("gauss.in");
ofstream g("gauss.out");
int N,M;
double a[MAXN+1][MAXN+2],x[MAXN+1];
void gauss() {
int i=1,j=1,k,p;
while(i<=N&&j<=M) {
if(abs(a[i][j])<=EPS) {
bool ok=0;
for(k=i+1; k<=N; k++)
if(abs(a[k][j])>EPS) {
ok=1;
for(p=j; p<=M+1; p++){
swap(a[i][p],a[k][p]);
}
break;
}
if(ok==0) { //if(k==n+1)
j++;
continue;
}
}
for(k=j+1; k<=M+1; k++) {
a[i][k]/=a[i][j];
}
a[i][j]=1.0;
for(k=i+1; k<=N; k++) {
for(p=j+1; p<=M+1; p++) {
a[k][p]-=a[k][j]*a[i][p];
}
a[k][j]=0.0;
}
i++;
j++;
}
}
bool solutie() {
for(int i=N; i>=1; i--) {
for(int j=i; j<=M+1; j++) {
if(abs(a[i][j])>EPS) {
if(j==M+1) {
return 0;
}
x[j]=a[i][M+1];
for(int k=j+1; k<=M; k++) {
x[j]-=x[k]*a[i][k];
}
break;
}
}
}
return 1;
}
void afisare() {
g.setf(ios::fixed,ios::floatfield);
g.precision(10);
for(int i=1; i<=M; i++) {
g<<x[i]<<' ';
}
}
int main() {
f>>N>>M;
for(int i=1; i<=N; i++)
for(int j=1; j<=M+1; j++)
f>>a[i][j];
gauss();
if(solutie()) {
afisare();
} else {
g<<"Imposibil";
}
f.close();
g.close();
return 0;
}