Pagini recente » Cod sursa (job #3190250) | Cod sursa (job #685928) | Cod sursa (job #2044229) | Cod sursa (job #2743733) | Cod sursa (job #788558)
Cod sursa(job #788558)
#include <fstream>
#include <iomanip>
#define MAXN 305
#define EPS 0.0001
using namespace std;
ifstream f("gauss.in");
ofstream g("gauss.out");
int n,m,last;
double a[MAXN][MAXN],x,sol[MAXN],S,aux;
bool uz[MAXN],s;
double ABS(double p){
return p>0?p:(-p);}
int main()
{
int i,j,k,ii;
f>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m+1;j++)
f>>a[i][j];
i=1;
for(j=1;j<=m;j++){
for(k=i;k<=n&&ABS(a[k][j])<EPS;k++);
if(k<=n){
for(ii=j;ii<=m+1;ii++){
aux=a[k][ii];
a[k][ii]=a[i][ii];
a[i][ii]=aux;}
for(ii=m+1;ii>=j;ii--)
a[i][ii]/=a[i][j];
for(++k;k<=n;k++)
if(ABS(a[k][j])>EPS){
x=-a[k][j];
for(ii=j;ii<=m+1;ii++)
a[k][ii]+=x*a[i][ii];}
i++;}
else{
uz[j]=1;
sol[j]=0;}}
for(j=i;j<=n;j++)
if(ABS(a[j][m+1])>EPS){
g<<"Imposibil\n";
return 0;}
i--;
for(j=1;j<=m;j++){
if(ABS(a[i][j])>EPS){
uz[j]=1;
last=j;
sol[j]=0;}}
sol[last]=(a[i][m+1]/a[i][last]);
while(--i){
S=0;
last=0;
for(j=1;j<=m;j++)
if(ABS(a[i][j])>EPS){
if(uz[j])
S+=a[i][j]*sol[j];
else{
last=j;
uz[j]=1;}}
sol[last]=a[i][m+1]-S;}
g<<fixed<<setprecision(8);
for(i=1;i<=m;i++)
g<<sol[i]<<' ';
f.close();
g.close();
return 0;
}