Pagini recente » Cod sursa (job #608132) | Borderou de evaluare (job #1963944) | Cod sursa (job #729017) | Borderou de evaluare (job #1288234) | Cod sursa (job #608707)
Cod sursa(job #608707)
#include <stdio.h>
using namespace std;
const int maxn=305;
const double EPS=0.000001;
int i,j,x,k,u,N,M;
double A[maxn][maxn],aux[maxn],X[maxn];
int main() {
freopen("gauss.in","r",stdin);
freopen("gauss.out","w",stdout);
scanf("%d %d",&N,&M);
for(i=1;i<=N;i++)
for(j=1;j<=M+1;j++)
scanf("%lf",&A[i][j]);
i=1; j=1;
while(i<=N && j<=M) {
for(x=i;x<=N && A[x][j]>-EPS && A[x][j]<EPS;x++);
if(x<=N) {
if(x!=i) {
double aux;
for(k=1;k<=M+1;k++) {
aux=A[i][k];
A[i][k]=A[x][k];
A[x][k]=aux;
}
}
for(k=j+1;k<=M+1;k++)
A[i][k]=A[i][k]/A[i][j];
A[i][j]=1;
for(u=i+1;u<=N;u++) {
for(k=j+1;k<=M+1;k++)
A[u][k]-=A[i][k]*A[u][j];
A[u][j]=0;
}
i++;
}
j++;
}
for(i=N;i;i--)
for(j=1;j<=M+1;j++)
if(A[i][j]>EPS || A[i][j]<-EPS) {
if(j==M+1) {
printf("Imposibil");
return 0;
}
X[i]=A[i][M+1];
for(k=j+1;k<=M;k++) X[i]-=A[i][k]*X[k];
break;
}
for(i=1;i<=M;i++)
printf("%.8lf ",X[i]);
}