Pagini recente » Cod sursa (job #1528766) | Cod sursa (job #1535932) | Cod sursa (job #1247158) | Cod sursa (job #2574773) | Cod sursa (job #2334447)
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
FILE* si=fopen("gauss.in", "r");
FILE* so=fopen("gauss.out", "w");
const double nul=0.00000000001;
double v[305][305];
double sol[305];
int main() {
int n,m;
fscanf(si, "%i %i", &n, &m);
m++;
for(int i=1; i<=n; ++i)
for(int j=1; j<=m; ++j)
fscanf(si, "%lf", &v[i][j]);
int k,l;
for(int i=1, j=1; i<=n&&j<m; ++j) {
for(k=i; k<=n&&!(v[k][j]>nul||v[k][j]<-nul); ++k);
if(k==n+1)
continue;
swap(v[i],v[k]);
for(l=j+1; l<=m; ++l)
v[i][l]=v[i][l]/v[i][j];
v[i][j]=1;
for(k=i+1; k<=n; ++k) {
for(l=j+1; l<=m; ++l)
v[k][l]=v[k][l]-v[i][l]*v[k][j];
v[k][j]=0;
}
++i;
}
bool bun=true;
for(int i=n; i&&bun; --i) {
for(k=1; k<=m&&!(v[i][k]>nul||v[i][k]<-nul); ++k);
if(k==m) {
bun=false;
break;
}
sol[k]=v[i][m];
for(int j=k+1; j<m; ++j) {
sol[k]-=sol[j]*v[i][j];
}
}
if(bun) {
for(int i=1;i<m;++i) {
fprintf(so, "%.10f ", sol[i]);
}
}
else {
fprintf(so, "Imposibil");
}
return 0;
}