Pagini recente » Cod sursa (job #2472297) | Cod sursa (job #175914) | Cod sursa (job #1638518) | Cod sursa (job #2611048) | Cod sursa (job #1606747)
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<iomanip>
const double eps=1e-10;
const int NMAX=301;
double v[NMAX][NMAX];
double rasp[NMAX];
int n,m;
void schimba(int l1,int l2)
{
for(int j=1;j<=m+1;j++)
std::swap(v[l1][j],v[l2][j]);
}
void inmultire(int l,double alfa)
{
for(int j=1;j<=m+1;j++)
v[l][j]*=alfa;
}
void scadere(int l1,int l2,double alfa)
{
for(int j=1;j<=m+1;j++)
v[l1][j]-=v[l2][j]*alfa;
}
int main()
{
freopen("gauss.in","r",stdin);
freopen("gauss.out","w",stdout);
scanf("%d %d ",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=m+1;j++)
std::cin>>v[i][j];
int cate=0;
///Eliminare
for(int col=1;col<=m;col++)
{
int lin=cate+1;
while(fabs(v[lin][col])<eps && lin<=n)
lin++;
if(lin==n+1)
continue;
schimba(cate+1,lin);
cate++;
inmultire(cate,1/v[lin][col]);
for(int lin=cate+1;lin<=n;lin++)
scadere(lin,cate,v[lin][col]);
}
///Imposibil
for(int lin=cate+1;lin<=n;lin++)
{
if(fabs(v[lin][m+1]>=eps))
{
printf("Imposibil\n");
return 0;
}
}
///"Subtitutie inversa"
for(int lin=cate;lin>=1;lin--)
{
int pivot=1;
while(pivot<=m && fabs(v[lin][pivot])<eps)
pivot++;
rasp[pivot]=v[lin][m+1];
for(int col=pivot+1;col<=m;col++)
rasp[pivot]-=v[lin][col]*rasp[col];
}
///Afisare
for(int col=1;col<=m;col++)
{
std::cout<<std::fixed<<std::setprecision(10)<<rasp[col]<<((col==m)?"\n":" ");
}
return 0;
}