Pagini recente » Cod sursa (job #3280295) | Cod sursa (job #3234791) | Cod sursa (job #3156153) | Cod sursa (job #3256223) | Cod sursa (job #2953648)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("gauss.in");
ofstream g ("gauss.out");
int n,m;
double mt[305][305];
double rez[305];
double val[305];
int npc[305];
double copie[305][305];
double crez[305];
void schimbare(int A, int B)
{
for(int i=1; i<=m; ++i)
swap(mt[A][i], mt[B][i]);
swap(rez[A], rez[B]);
}
void scadere(int A, int B)
{
double inm=mt[B][A];
for(int i=1; i<=m; ++i)
mt[B][i]-=mt[A][i]*inm;
rez[B]-=rez[A]*inm;
}
int main()
{
f>>n>>m;
for(int i=1; i<=n; ++i)
{
for(int j=1; j<=m; ++j)
f>>mt[i][j] , copie[i][j]=mt[i][j];
f>>rez[i];
crez[i]=rez[i];
}
for(int i=1; i<=m; ++i)
{
int ok=1;
for(int j=i; j<=n; ++j)
{
if(mt[j][i]!=0)
{
schimbare(i,j);
ok=0;
break;
}
}
npc[i]=ok;
double x=mt[i][i];
rez[i]=rez[i]/x;
for(int j=1; j<=m; ++j)
mt[i][j]=(double)mt[i][j]/x;
for(int j=i+1; j<=n; ++j)
scadere(i,j);
}
for(int i=n; i>0; --i)
{
double pus=0;
int elem=0;
for(int j=1; j<=m; ++j)
{
if(mt[i][j]!=0 && val[j]==0 && npc[j]==0)
elem=j;
else
pus+=val[j]*mt[i][j];
}
if(elem!=0)
val[elem]=(rez[i]-pus)/mt[i][elem];
}
for(int i=1;i<=n;++i)
{
double kk=0;
for(int j=1;j<=m;++j)
kk+=val[j]*copie[i][j];
if(abs(kk-crez[i])>0.000000000001)
{
g<<"Imposibil";
return 0;
}
}
for(int i=1;i<=m;++i)
g<<fixed<<setprecision(10)<<val[i]<<" ";
return 0;
}