Pagini recente » Cod sursa (job #443014) | Cod sursa (job #3281427) | Cod sursa (job #1239498) | Cod sursa (job #2216105) | Cod sursa (job #2126091)
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
FILE* si=fopen("gauss.in","r");
FILE* so=fopen("gauss.out","w");
const double nul=0.00000000001;
double v[305][305];
double sol[305];
int main()
{
int n,m;
fscanf(si,"%i %i",&n,&m);
m++;
int i,j;
for(i=1;i<=n;++i)
for(j=1;j<=m;++j)
fscanf(si,"%lf",&v[i][j]);
int k,l;
for(i=1,j=1;i<=n&&j<m;++j)
{
for(k=i;k<=n&&!(v[k][j]>nul||v[k][j]<-nul);++k);
if(k==n+1)
continue;
swap(v[i],v[k]);
for(l=j+1;l<=m;++l)
v[i][l]=v[i][l]/v[i][j];
v[i][j]=1;
for(k=i+1;k<=n;++k)
{
for(l=j+1;l<=m;++l)
v[k][l]=v[k][l]-v[i][l]*v[k][j];
v[k][j]=0;
}
++i;
}
bool bun=true;
for(i=n;i&&bun;--i)
{
for(k=1;k<=m&&!(v[i][k]>nul||v[i][k]<-nul);++k);
if(k==m)
{
bun=false;
break;
}
sol[k]=v[i][m];
for(j=k+1;j<m;++j)
{
sol[k]-=sol[j]*v[i][j];
}
}
if(bun)
{
for(i=1;i<m;++i)
{
fprintf(so,"%.10f ",sol[i]);
}
}
else
{
fprintf(so,"Imposibil");
}
return 0;
}