Pagini recente » Cod sursa (job #749049) | Cod sursa (job #1910769) | Cod sursa (job #2967576) | Cod sursa (job #2267743) | Cod sursa (job #2743133)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("gauss.in");
ofstream fout("gauss.out");
const double EPS=1e-10;
const int NMAX=305;
int N,M;
double A[NMAX][NMAX],X[NMAX];
void gauss()
{
int i=1,j=1,k,p;
while(i<=N&&j<=M)
{
if(abs(A[i][j])<=EPS)
{
bool ok=0;
for(k=i+1;k<=N;k++)
{
if(abs(A[k][j])>EPS)
{
ok=1;
for(p=j;p<=M+1;p++)
{
swap(A[i][p],A[k][p]);
}
break;
}
}
if(ok==0)
{
j++;
continue;
}
}
for(k=j+1;k<=M+1;k++)
{
A[i][k]/=A[i][j];
}
A[i][j]=1.0;
for(k=i+1;k<=N;k++)
{
for(p=j+1;p<=M+1;p++)
{
A[k][p]-=A[k][j]*A[i][p];
}
A[k][j]=0.0;
}
i++;
j++;
}
}
int solutie()
{
for(int i=N;i>=1;i--)
{
for(int j=i;j<=M+1;j++)
{
if(abs(A[i][j])>EPS)
{
if(j==M+1)return 0;
X[j]=A[i][M+1];
for(int k=j+1;k<=M;k++)
X[j]-=X[k]*A[i][k];
break;
}
}
}
return 1;
}
void afisare()
{
fout.setf(ios::fixed,ios::floatfield);
fout.precision(10);
for(int i=1;i<=M;i++)
{
fout<<X[i]<<' ';
}
}
int main()
{
fin>>N>>M;
for(int i=1;i<=N;i++)
{
for(int j=1;j<=M+1;j++)
{
fin>>A[i][j];
}
}
gauss();
if(solutie())afisare();
else fout<<"Imposibil";
return 0;
}