Pagini recente » Cod sursa (job #1026164) | Cod sursa (job #2592261) | Cod sursa (job #1573775) | Cod sursa (job #736433) | Cod sursa (job #2171593)
#include <cstdio>
#include <fstream>
#include <cmath>
#include <iomanip>
#define Nmax 303
#define ld long double
#define eps 0.000000001
using namespace std;
FILE *f = fopen("gauss.in","r");
ofstream g("gauss.out");
int n,m,k;
double mat[Nmax][Nmax];
ld ans[Nmax];
void change(int a,int b,int c){
for (int i=c;i<=m+1;i++) swap(mat[a][i],mat[b][i]);
}
void divide(int a,ld b,int c){
for (int i=c;i<=m+1;i++) mat[a][i] /= b;
}
void sub(int a,int b,ld c,int d){
for (int i=d;i<=m+1;i++) mat[a][i] -= mat[b][i]*c;
}
int main()
{
fscanf(f,"%d%d",&n,&m);
for (int i=1;i<=n;i++) for (int j=1;j<=m+1;j++) fscanf(f,"%lf",&mat[i][j]);
k = 1;
for (int j=1;j<=m;j++){
if (mat[k][j]==0)
for (int i=k;i<=n;i++)
if (mat[i][j]!=0){
change(i,k,j);
break;
}
if (abs(mat[k][j])<eps) continue;
divide(k,mat[k][j],j);
for (int i=k+1;i<=n;i++) sub(i,k,mat[i][j],j);
k++;
}
for (int i=min(m,n);i>=1;i--){
int sav = -1;
for (int j=1;j<=m;j++){
if (abs(mat[i][j])>eps){
sav = j;
break;
}
}
if (sav==-1 && mat[i][m+1]){
g<<"Imposibil\n";
return 0;
}
for (int j=sav+1;j<=m;j++) mat[i][m+1] -= ans[j] * mat[i][j];
ans[sav] = mat[i][m+1];
}
for (int i=1;i<=m;i++) g<<fixed<<setprecision(8)<<ans[i]<<' ';
return 0;
}