Pagini recente » Cod sursa (job #2325083) | Cod sursa (job #643409) | Cod sursa (job #1240138) | Cod sursa (job #1569590) | Cod sursa (job #1784497)
#include <fstream>
#include <vector>
#include <iomanip>
#define as a.size()
#define xs x.size()
using namespace std;
vector <vector <double> > a;
vector <double> s;
ifstream cin("gauss.in");
ofstream cout("gauss.out");
void lire(vector <vector <double> > &x)
{
int n,m;
cin >> n >> m;
x.resize(n);
for (int i=0; i<xs; i++)
{
x[i].resize(m+1);
for (int j=0; j<x[i].size(); j++)
{
cin >> x[i][j];
}
}
}
void direct(vector <vector <double> > &x)
{
int k; double r;
for (int i=0; i<xs-1; i++)
{
if (x[i][i]==0)
{
k=i;
for (int j=i+1; j<xs; j++)
{
if (x[j][i]!=0) k=j;
}
if (k==i) return; else swap(x[i],x[k]);
}
for (int j=i+1; j<xs; j++)
{
r=-x[j][i]/x[i][i];
for (k=i; k<xs+1; k++)
{
x[j][k]=x[j][k]+x[i][k]*r;
}
}
}
}
void invers(vector <double> &q)
{
double s;
for (int i=as-1; i>=0; i--)
{
s=0;
for (int j=i+1; j<a[0].size(); j++)
{
s=s+a[i][j]*q[j];
}
if (a[i][i]!=0) q[i]=(a[i][as]-s)/a[i][i]; else q[i]=0;
}
}
main()
{
lire(a);
direct(a);
s.resize(a[0].size());
fill(s.begin(),s.end(),0);
invers(s);
cout << fixed();
for (int i=0; i<as; i++)
{
cout << setprecizion(10) << s[i] ; cout << ' ';
}
}