Pagini recente » Cod sursa (job #188941) | Cod sursa (job #13068) | Cod sursa (job #2717614) | Cod sursa (job #2555259) | Cod sursa (job #2224650)
#include <bits/stdc++.h>
#define lim 1e-11
using namespace std;
int n, m;
long double a[305][305], sol[305];
fstream f1("gauss.in", ios::in);
fstream f2("gauss.out", ios::out);
int main()
{
int i, j, l, k, ind;
f1>>n>>m;
for(i=1; i<=n; i++)
for(j=1; j<=m+1; j++)
f1>>a[i][j];
i=1;
for(j=1; j<=m; )
{
///gasire indice linie cu valoare nenula pe coloana j
ind=0;
for(k=i; k<=n; k++)
if((-lim>=a[k][j])||(a[k][j]>=lim))
{ind=k;break;}
///coloana de 0
if(ind==0) {j++; continue;} ///x[j] va fi 0 (ales arbitrar)
///interschimb i cu ind, elemente de dinainte de j ambele linii =0
if(i!=ind)
for(k=j; k<=m+1; k++)
{
long double val=a[ind][k];
a[ind][k]=a[i][k];
a[i][k]=val;
}
///impartim linia i la a[i][j];
for(k=j+1; k<=m+1; k++)
a[i][k]/=a[i][j]; a[i][j]=1;
///face 0-uri sub a[i][j]
for(l=i+1; l<=n; l++)
{
for(k=j+1; k<=m+1; k++)
a[l][k]-=a[l][j]*a[i][k];
a[l][j]=0;
}
i++; j++;
}
for(i=n; i>=1; i--)
{
for(j=1; j<=m; j++)
if((-lim>=a[i][j])||(a[i][j]>=lim)) ///primul el nenul (=1)
{
sol[j]=a[i][m+1];
for(k=m; k>j; k--)
sol[j]-=a[i][k]*sol[k];
break;
}
if((j==m+1)&&((-lim>=a[k][m+1])||(a[k][m+1]>=lim))) {f2<<"Imposibil\n";return 0;}
}
for(i=1; i<=m; i++)
f2<<fixed<<setprecision(10)<<sol[i]<<' ';
return 0;
}