Pagini recente » Cod sursa (job #2543224) | Cod sursa (job #1947673) | Cod sursa (job #90190) | Cod sursa (job #2416871) | Cod sursa (job #928670)
Cod sursa(job #928670)
// Include
#include <fstream>
#include <iomanip>
using namespace std;
// Constante
const int sz = 302;
const double ERROR = 1e-7;
// Functii
void SWAP(double* a, double* b);
template<class T> T ABS(T x);
// Variabile
ifstream in("gauss.in");
ofstream out("gauss.out");
int lines, columns, allColumns;
double SYSTEM[sz][sz];
double X[sz];
// Main
int main()
{
out << fixed << setprecision(8);
in >> lines >> columns;
allColumns = columns+1;
for(int i=1 ; i<=lines ; ++i)
for(int j=1 ; j<=allColumns ; ++j)
in >> SYSTEM[i][j];
int i=1, j=1;
while(i<=lines && j<=columns) // i-ecuatie, j-necunoscuta
{
int eq;
for(eq=i ; eq<=lines ; ++eq)
{
//if(SYSTEM[eq][j])
if(ABS(SYSTEM[eq][j]) > ERROR)
break;
}
if(eq == lines+1)
{
++j;
continue;
}
if(eq != i)
SWAP(SYSTEM[i], SYSTEM[eq]);
for(int pos=j+1 ; pos<=allColumns ; ++pos)
SYSTEM[i][pos] /= SYSTEM[i][j];
SYSTEM[i][j] = 1;
for(eq=i+1 ; eq<=lines ; ++eq)
{
for(int pos=j+1 ; pos<=allColumns ; ++pos)
SYSTEM[eq][pos] -= SYSTEM[eq][j] * SYSTEM[i][pos];
SYSTEM[eq][j] = 0;
}
++i, ++j;
}
for(int i=lines ; i ; --i)
{
for(int pos=1 ; pos<=allColumns ; ++pos)
{
//if(!SYSTEM[i][pos])
if(ABS(SYSTEM[i][pos]) < ERROR)
continue;
if(pos == allColumns) // rezultatul
{
out << "Imposibil" << '\n';
in.close();
out.close();
return 0;
}
X[pos] = SYSTEM[i][allColumns];
for(int j=pos+1 ; j<=columns ; ++j)
X[pos] -= X[j]*SYSTEM[i][j];
break;
}
}
for(int i=1 ; i<=columns ; ++i)
out << X[i] << ' ';
out << '\n';
in.close();
out.close();
return 0;
}
void SWAP(double* a, double* b)
{
for(int i=1 ; i<=allColumns ; ++i)
swap(a[i], b[i]);
}
template<class T> T ABS(T x)
{ return x<0? -x:x; }