Pagini recente » Cod sursa (job #3196815) | Cod sursa (job #2344953) | Cod sursa (job #897491) | Cod sursa (job #2493315) | Cod sursa (job #979478)
Cod sursa(job #979478)
#include<stdio.h>
#include<cstring>
#define maxn 305
using namespace std;
int n,m;
double sol[maxn],v[maxn];
double a[maxn][maxn];
void read()
{
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]);
}
void copy(int i,int pos)
{
memcpy(v,a[i],sizeof(a[i]));
memcpy(a[i],a[pos],sizeof(a[pos]));
memcpy(a[pos],v,sizeof(v));
}
void print()
{
for(int i=1;i<=m;i++)
printf("%.8lf ",sol[i]);
}
void solve()
{
int i,j,k;
int line=1;
double nr;
for(j=1;j<=m && line<n;j++)
{
for(i=line;i<=n;i++) if(a[i][j]) break;
if(i>n) continue;
if(i!=line) copy(line,i);
for(i=line+1;i<=n;i++)
{
nr=a[i][j]/a[line][j];
for(k=j;k<=m+1;k++)
a[i][k]-=a[line][k]*nr;
a[i][j]=0;
}
line++;
}
/*for(i=1;i<=n;i++)
{
for(j=1;j<=m+1;j++)
printf("%.8lf ",a[i][j]);
printf("\n");
}*/
for(int i=n;i>=1;i--)
{
for(j=1;j<=m+1;j++) if(a[i][j]) break;
if(j==m+1) {printf("Imposibil"); return;}
sol[j]=a[i][m+1];
for(k=j+1;k<=m;k++)
sol[j]-=sol[k]*a[i][k];
sol[j]/=a[i][j];
}
print();
}
int main()
{
freopen("gauss.in","r",stdin);
freopen("gauss.out","w",stdout);
read();
solve();
fclose(stdin);
fclose(stdout);
return 0;
}