Pagini recente » Cod sursa (job #1201929) | Cod sursa (job #866478) | Cod sursa (job #1759051) | Cod sursa (job #11060) | Cod sursa (job #754497)
Cod sursa(job #754497)
#include <stdio.h>
#define NMAX 305
#define eps 1e-10
int n,m;
double A[NMAX][NMAX],sol[NMAX];
void read()
{
scanf("%d%d",&n,&m);
int i,j;
for (i=1; i<=n; i++)
{
for (j=1; j<=m+1; j++)
scanf("%lf",&A[i][j]);
}
}
void swap_l(int l1,int l2)
{
double aux;
for (int i=1; i<=m+1; i++)
aux=A[l1][i],A[l1][i]=A[l2][i],A[l2][i]=aux;
}
void solve()
{
int i=1,j=1,k,t,poz;
double aux;
while (i<=n && j<=m)
{
poz=-1;
for (k=i; k<=n; k++)
if (A[k][j]<-eps || A[k][j]>eps)
{
poz=k;
break ;
}
if (poz==-1)
{
j++;
continue ;
}
if (poz!=i)
swap_l(i,poz);
for (k=j+1; k<=m+1; k++)
A[i][k]/=A[i][j];
A[i][j]=1;
for (k=i+1; k<=n; k++)
{
aux=A[k][j];
for (t=j; t<=m+1; t++)
A[k][t]-=aux*A[i][t];
}
i++; j++;
}
for (i=n; i>=1; i--)
for (j=1; j<=m+1; j++)
if (A[i][j]<-eps || A[i][j]>eps)
{
if (j==m+1)
{
printf("Imposibil\n");
return ;
}
sol[j]=A[i][m+1];
for (k=m; k>j; k--)
sol[j]-=sol[k]*A[i][k];
break ;
}
for (i=1; i<=m; i++)
printf("%.8lf ",sol[i]);
printf("\n");
}
int main()
{
freopen("gauss.in","r",stdin);
freopen("gauss.out","w",stdout);
read();
solve();
return 0;
}