Pagini recente » Cod sursa (job #1869486) | Cod sursa (job #2695625) | Cod sursa (job #2290375) | Cod sursa (job #2430573) | Cod sursa (job #1778616)
#include <fstream>
#define nmax 310
#include <iomanip>
using namespace std;
double x[nmax];
double eps=0.0000000001;
double a[nmax][nmax];
bool ap(double x)
{
return (-eps<=x && x<=eps);
}
int main()
{
ifstream f("gauss.in");
ofstream g("gauss.out");
int n,m,i,j,ii,jj;bool ok=true;
f>>n>>m;
for (i=1;i<=n;i++)
for (j=1;j<=m+1;j++)
f>>a[i][j];
i=j=1;
while ( i<=n && j<=m )
{
for (ii=i;ap(a[ii][j]) && ii<=n;ii++);
//aflam primul element nenul de pe coloana j
if (ii==n+1) j++;
//daca nu exista incrementam j-ul
else
{
if (i!=ii)
{
//interschimbam lina ii cu linia i
for (jj=1;jj<=m+1;jj++)
swap(a[i][jj],a[ii][jj]);
}
//impartim cu a[i][j] linia i
for (jj=j+1;jj<=m+1;jj++)
a[i][jj]/=a[i][j];
a[i][j]=1;
//creem termeni liberi pe toata coloana j
for (ii=i+1;ii<=n;ii++)
if (!ap(a[ii][j]))
{
for (jj=j+1;jj<=m+1;jj++)
{
a[ii][jj]-=(a[ii][j]*a[i][jj]);
}
a[ii][j]=0;
}
i++;j++;
}
}
for (i=n;i>=1;i--)
for (j=1;j<=m+1;j++)
if (!ap(a[i][j]))
{
if (j==m+1)
{
i=0;
ok=false;
}
else
{
x[j]=a[i][m+1];
for (jj=m;jj>=j+1;jj--)
{
x[j]-=(x[jj]*a[i][jj]);
}
j=m+2;
}
}
if (ok)
{
g<<setprecision(10)<<fixed;
for (i=1;i<=m;i++)
g<<x[i]<<' ';
g<<'\n';
}
else g<<"Imposibil\n";
f.close();
g.close();
return 0;
}