Pagini recente » Cod sursa (job #3168961) | Cod sursa (job #1946488) | Cod sursa (job #2541833) | Cod sursa (job #2352210) | Cod sursa (job #1891532)
#include<fstream>
#include<iomanip>
#define eps 1e-8
using namespace std;
ifstream f("gauss.in");
ofstream g("gauss.out");
int m,n,i,j,p[310],c,l;//in p[i]retin indicele radacinei care imi permite sa o calculez cu ajutorul termenului liber de pe linia i
double a[310][310],ans[310],aux;
double modul(double x)//intoarce |x|
{
return max(x,-x);
}
int main()
{
f>>n>>m;
for(i=1;i<=n;++i)//citesc matricea initiala
for(j=1;j<=m+1;++j)
f>>a[i][j];
for(i=1;i<=n;++i)//iau fiecare ecuatie pe rand
{
for(j=1;j<=m+1;++j)//iau fiecare element de pe linie
if(modul(a[i][j])>=eps)//caut prima valoare nenula
break;
if(j==m+2)
continue;
if(j==m+1)//nu exisat o solutie
{
g<<"Imposibil\n";
return 0;
}
p[i]=j;//in p[i] retin coloana la care ajung
for(l=1;l<=n;++l)//iau din nou fiecare linie pe rand
if(l!=i&&modul(a[l][p[i]])>=eps)//am grija sa nu iau linia curenta si sa iau doar valoari nenule de pe linie
{
aux=a[l][p[i]]/a[i][p[i]];//iau catul impartirii elementului la care mja afluu cu elemantul de referinta calculat mai sus
for(c=1;c<=m+1;++c)//reduc elementele intregii linii
a[l][c]-=aux*a[i][c];
}
}
for(i=1;i<=n;++i)//calculez valorile radacinilor matricea fii simplificata cat de mult a fost posibil
if(p[i])
ans[p[i]]=a[i][m+1]/a[i][p[i]];
for(i=1;i<=m;++i)
g<<fixed<<setprecision(10)<<ans[i]<<" ";
return 0;
}