Pagini recente » Arhiva de probleme | Cod sursa (job #292023) | Cod sursa (job #1373757) | Cod sursa (job #2078225) | Cod sursa (job #931175)
Cod sursa(job #931175)
#include<stdio.h>
#define max 310
#define eps 0.0000001
int n,m;
double A[max][max];
double X[max];
int main()
{
freopen("gauss.in","r",stdin);
freopen("gauss.out","w",stdout);
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=m+1;j++)
scanf("%lf ",&A[i][j]);
int i,j,k;
double aux;
i=j=1;
while(i<=n && j<=m)
{
for(k=i;k<=n;i++)
if(A[k][j]<-eps || A[k][j]>eps)
break;
if(k==n+1)
{
j++;
continue;
}
if(i!=k)
{
for(int q=1;q<=m+1;q++)
{
aux=A[i][q];
A[i][q]=A[k][q];
A[k][q]=aux;
}
}
for(int w=j+1;w<=m+1;w++)
A[i][w]=A[i][w]/A[i][j];
A[i][j]=1;
for(int p=i+1;p<=n;p++)
{
for(int l=j+1;l<=m+1;l++)
A[p][l]-=A[i][l]*A[p][j];
A[p][j]=0;
}
i++;j++;
}
for(int i=n;i>0;i--)
{
for(int j=1;j<=m+1;j++)
if(A[i][j]<-eps || A[i][j]>eps)
{
if(j==m+1)
{
printf("Imposibil\n");
return 0;
}
X[j]=A[i][m+1];
for(int k=j+1;k<=m;k++)
X[j]-=A[i][k]*X[k];
break;
}
}
for(int i=1;i<=m;i++)
printf("%.8lf ",X[i]);
return 0;
}