Pagini recente » Cod sursa (job #285557) | Cod sursa (job #2693502) | Cod sursa (job #660664) | Cod sursa (job #1446053) | Cod sursa (job #1802856)
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
#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[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]) q[i]=(a[i][as]-s)/a[i][i]; else q[i]=0;
}
}
main()
{
lire(a);
direct(a);
s.resize(a.size());
invers(s);
copy(s.begin(),s.end(),ostream_iterator<double> (cout," "));
}