Pagini recente » Cod sursa (job #1899877) | Cod sursa (job #2209354) | Cod sursa (job #1835534) | Cod sursa (job #1160413) | Cod sursa (job #1713685)
#include <cstdio>
using namespace std;
FILE *in,*out;
double m[301][302],sol[301];
int main()
{
in=fopen("gauss.in","r");
out=fopen("gauss.out","w");
int n,ec,i,j,k,q,aux;
bool found;
fscanf(in,"%d%d",&n,&ec);
for(i=1;i<=n;++i)for(j=1;j<=ec+1;++j)fscanf(in,"%lf",&m[i][j]);
i=j=1;
while(i<=n&&j<=ec)
{
found=0;
for(k=i;k<=n;++k)if(m[k][j]>0.0000001||m[k][j]<-0.0000001)
{
found=1;
if(k!=i)for(q=j;q<=ec+1;++q)
{
aux=m[i][q];
m[i][q]=m[k][q];
m[k][q]=aux;
}
for(q=j+1;q<=ec+1;++q)m[i][q]/=m[i][j];
m[i][j]=1;
break;
}
if(found)
{
for(k=i+1;k<=n;++k)
{
for(q=j+1;q<=ec+1;++q)m[k][q]-=m[k][j]*m[i][q];
m[k][j]=0;
}
++i;++j;
}
else ++j;
}
for(i=n;i;--i)for(j=1;j<=ec+1;++j)if(m[i][j]>0.0000001||m[i][j]<-0.0000001)
{
if(j>ec)
{
fprintf(out,"Imposibil\n");
fclose(in);fclose(out);
return 0;
}
sol[j]=m[i][ec+1];
for(k=j+1;k<=ec;++k)sol[j]-=sol[k]*m[i][k];
break;
}
for(i=1;i<=ec;++i)fprintf(out,"%.8f ",sol[i]);
fclose(in);fclose(out);
return 0;
}