Pagini recente » Cod sursa (job #1663925) | Cod sursa (job #1101836) | Cod sursa (job #176472) | Cod sursa (job #660944) | Cod sursa (job #2182443)
#include <bits/stdc++.h>
using namespace std;
#define precizie 0.0000000001
double a[305][305],d=1,r[305];
int n,m,nr;
int zero(double x){
if (x>-precizie&&x<precizie) return 1;
return 0;
}
void swapl(int x, int y){
int i;
if (x==y) return;
for (i=1;i<=m+1;i++) swap(a[x][i],a[y][i]);
}
void xl(int x){
double d=a[x][x];
d=1/d;
for (int i=x;i<=m+1;i++) a[x][i]*=d;
}
void add(int x){
int i,j;
double d;
for (i=x+1;i<=n;i++){
d=-a[i][x];
for (j=x;j<=m+1;j++)
a[i][j]+=d*a[x][j];
}
}
void afis(){
int i,j;
for (i=m;i>=1;i--){
for (j=m;j>i;j--)
a[i][m+1]-=a[i][j]*r[j];
if (a[i][i]==0) r[i]=0;
else r[i]=a[i][m+1]/a[i][i];
}
for (i=1;i<=m;i++) printf("%.10lf ",r[i]);
}
int main()
{
freopen("gauss.in","r",stdin);
freopen("gauss.out","w",stdout);
int i,j,p,ok=1;
scanf("%d%d",&n,&m);
for (i=1;i<=n;i++)
for (j=1;j<=m+1;j++)
scanf("%lf",&a[i][j]);
for (i=1;i<=m;i++){
p=0;
if (zero(a[i][i])){
for (j=i+1;j<=n;j++)
if (!zero(a[i][j])) {p=j;break;}
}
else p=i;
if (p==0) {nr++;continue;}
swapl(p,i);
xl(i);
add(i);
}
if (m-nr>n) printf("Imposibil");
else afis();
/*if (ok){
afis();
}
else printf("Imposibil");*/
return 0;
}