Pagini recente » Cod sursa (job #626767) | Cod sursa (job #2260202) | Cod sursa (job #2866801) | Cod sursa (job #2388223) | Cod sursa (job #708666)
Cod sursa(job #708666)
#include <fstream>
using namespace std;
const int N=105;
const double E=1e-10;
double v[N][N],rez[N];
int n,m;
ifstream in("gauss.in");
ofstream out("gauss.out");
inline double abs(double x)
{
return x>0 ? x : -x;
}
inline bool zero(double x)
{
return abs(x)<E;
}
inline void sch(double &a,double &b)
{
double c=a;a=b;b=c;
}
void sch(double a[],double b[])
{
for (int i=1;i<=m+1;i++)
sch(a[i],b[i]);
}
int find(int x,int i)
{
for (;i<=n;i++)
if (!zero(v[i][x]))
return i;
return -1;
}
void reduce(double a[],double b[],double x)
{
for (int i=1;i<=m+1;i++)
a[i]-=x*b[i];
}
bool gauss()
{
int L=1,i,j;
for (i=1;i<=m;i++)
{
j=find(i,L);
if (j==-1)
continue;
if (j!=L)
sch(v[j],v[L]);
double x=v[L][i];
for (j=1;j<=m+1;j++)
v[L][j]/=x;
for (int j=1;j<=n;j++)
if (j!=L)
reduce(v[j],v[L],v[j][i]);
L++;
}
for (i=1;i<=n;i++)
{
for (j=1;j<=m+1 && zero(v[i][j]);j++);
if (j==m+1)
return false;
rez[j]=v[i][m+1];
}
return true;
}
int main()
{
in>>n>>m;
for (int i=1;i<=n;i++)
for (int j=1;j<=m+1;j++)
in>>v[i][j];
if (!gauss())
{
out<<"Imposibil\n";
return 0;
}
for (int i=1;i<=m;i++)
out<<rez[i]<<" ";
out<<"\n";
return 0;
}