Pagini recente » Cod sursa (job #3192472) | Cod sursa (job #882733) | Cod sursa (job #2767747) | Cod sursa (job #1235703) | Cod sursa (job #2249658)
#include <cstdio>
#include <fstream>
#include <cmath>
#include <iomanip>
#define Nmax 303
#define ld long double
#define eps 0.000000001
using namespace std;
ifstream f("gauss.in");
ofstream g("gauss.out");
int n,m,k;
double mat[Nmax][Nmax];
double 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()
{
f>>n>>m;
for (int i=1;i<=n;i++) for (int j=1;j<=m+1;j++) f>>mat[i][j];
k = 1;
for (int j=1;j<=m;j++){
if (abs(mat[k][j])<eps)
for (int i=k;i<=n;i++)
if (abs(mat[i][j])>eps){
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=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 && abs(mat[i][m+1])>eps){
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(10)<<ans[i]<<' ';
return 0;
}