Pagini recente » Cod sursa (job #2175612) | Cod sursa (job #2393535) | Cod sursa (job #2281689) | Istoria paginii runda/oni2014ziua1_11/clasament | Cod sursa (job #1165678)
#include <fstream>
#include <algorithm>
using namespace std;
int n,m;
double sol[305];
bool prost;
class sistem
{
public:
double mat[305][305];
void eliminare_gauss()
{
int i,j,det=0;
for(j=1;j<=m;j++)
{
int i=det+1;
while(i<=n)
{
if(mat[i][j]!=0)
break;
i++;
}
if(i==(n+1))
continue;
det++;
schimb(det,i);
imp(det,mat[det][j]);
for(i=det+1;i<=n;i++)
scade(i,mat[i][j],det);
}
for(i=det+1;i<=n;i++)
if(mat[i][m+1]!=0)
{
prost=true;
return;
}
double val;
for(;det>=1;det--)
{
val=mat[det][m+1];
for(j=1;j<=m;j++)
val-=mat[det][j]*sol[j];
sol[det]=val;
}
}
private:
inline void schimb(int lin1,int lin2)
{
int i;
for(i=1;i<=(m+1);i++)
swap(mat[lin1][i],mat[lin2][i]);
}
inline void imp(int lin,double cat)
{
int i;
for(i=1;i<=(m+1);i++)
mat[lin][i]/=cat;
}
inline void scade(int lin1,double cat,int lin2)
{
int i;
for(i=1;i<=(m+1);i++)
mat[lin1][i]-=(cat*mat[lin2][i]);
}
}x;
int main()
{
ifstream cin("gauss.in");
ofstream cout("gauss.out");
int i,j;
cin>>n>>m;
m++;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
cin>>x.mat[i][j];
m--;
x.eliminare_gauss();
if(prost)
{
cout<<"Imposibil\n";
return 0;
}
for(i=1;i<=m;i++)
cout<<sol[i]<<' ';
cout<<'\n';
cin.close();
cout.close();
return 0;
}