Pagini recente » Cod sursa (job #616136) | Cod sursa (job #1809201) | Cod sursa (job #955884) | Cod sursa (job #129287) | Cod sursa (job #717455)
Cod sursa(job #717455)
#include<stdio.h>
FILE*f=fopen("gauss.in","r");
FILE*g=fopen("gauss.out","w");
int n,m,u,i,j,t,tt,ok;
double y,v[302],aux,x,a[302][302];
double intreg (double a)
{
if(a<0)
return -a;
return a;
}
inline int min(int a,int b)
{
if(a<b)
return a;
return b;
}
int main()
{
fscanf(f,"%d%d",&n,&m);
for(i=1;i<=n;++i)
for(j=1;j<=m+1;++j)
fscanf(f,"%lf",&a[i][j]);
x=min(n,m-1);
for(i=1;i<=x;++i)
for(j=i+1;j<=n;++j)
{
t=i;
while(!a[t][i])
++t;
for(tt=i;tt<=m+1;++tt)
{
aux=a[i][tt];
a[i][tt]=a[t][tt];
a[t][tt]=aux;
}
y=a[j][i]/a[i][i];
a[j][i]=0;
for(t=i+1;t<=m+1;++t)
a[j][t]-=y*a[i][t];
}
if(n==m)
{
for(i=m;i;--i)
{
for(j=m;j>i;--j)
a[i][m+1]-=v[j]*a[i][j];
v[i]=a[i][m+1]/a[i][i];
}
for(i=1;i<=m;++i)
fprintf(g,"%.8lf ",v[i]);
}
else if(n>m)
{
v[m]=a[n][m+1]/a[n][m];
for(i=m+1;i<=n;++i)
if(intreg(v[m]-a[i][m+1]/a[i][m])>0.0000000001)
{
ok=1;
fprintf(g,"Imposibil");
break;
}
if(!ok)
{
for(i=m-1;i;--i)
{
for(j=m;j>i;--j)
a[i][m+1]-=v[j]*a[i][j];
v[i]=a[i][m+1]/a[i][i];
}
for(i=1;i<=m;++i)
fprintf(g,"%.8lf ",v[i]);
}
}
else
{
for(i=n;i;--i)
{
for(j=m;j>i;--j)
a[i][m+1]-=v[j]*a[i][j];
v[i]=a[i][m+1]/a[i][i];
}
for(i=1;i<=m;++i)
fprintf(g,"%.8lf ",v[i]);
}
fclose(f);
fclose(g);
return 0;
}