Pagini recente » Cod sursa (job #1934072) | Cod sursa (job #2758141) | ONIS 2014, Clasament Runda 1 | Cod sursa (job #2832787) | Cod sursa (job #797583)
Cod sursa(job #797583)
#include <stdio.h>
#define NMAX 305
#define eps 1e-6
int n,m;
double A[NMAX][NMAX],rez[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 i,int k)
{
int j;
double aux;
for (j=1; j<=m+1; j++)
aux=A[i][j],A[i][j]=A[k][j],A[k][j]=aux;
}
void solve()
{
int i=1,j=1,k,t;
double val;
while (i<=n && j<=m)
{
for (k=i; k<=n; k++)
if (A[k][j]<-eps || A[k][j]>eps)
break ;
if (k==n+1)
{
j++;
continue ;
}
if (k!=i)
swap_l(i,k);
for (k=i+1; k<=n; k++)
{
val=A[k][j]/A[i][j];
for (t=j; t<=m+1; t++)
A[k][t]-=A[i][t]*val;
}
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 ;
}
rez[j]=A[i][m+1];
for (t=j+1; t<=m; t++)
rez[j]-=A[i][t]*rez[t];
rez[j]/=A[i][j];
break ;
}
for (i=1; i<=m; i++)
printf("%.8lf ",rez[i]);
printf("\n");
}
int main()
{
freopen("gauss.in","r",stdin);
freopen("gauss.out","w",stdout);
read();
solve();
return 0;
}