Pagini recente » Cod sursa (job #2526997) | Cod sursa (job #459437) | Cod sursa (job #1448479) | Cod sursa (job #2579289) | Cod sursa (job #936782)
Cod sursa(job #936782)
#include <stdlib.h>
#include <fstream>
#include <iostream>
#include <string>
#include <queue>
#include <stack>
#include <vector>
#include <string.h>
#include <iomanip>
#include <time.h>
#include <list>
using namespace std;
const string file = "gauss";
const string infile = file + ".in";
const string outfile = file + ".out";
#define MAXN 305
int N;
int M;
double A[MAXN][MAXN];
double X[MAXN];
const double eps = 0.0000001;
void citire()
{
ifstream fin(infile.c_str());
fin >> N >> M;
for(int i = 0; i < N; i++)
{
for(int j = 0; j < M + 1; j++)
{
int x;
fin >> x;
A[i][j] = x;
}
}
fin.close();
}
void afisare()
{
ofstream fout(outfile.c_str());
fout << fixed << setprecision(8);
for(int i = 0; i < M; i++)
{
fout << X[i] << " ";
}
fout << "\n";
fout.close();
}
void debugPrint()
{
for(int i = 0; i < N; i++)
{
for(int j = 0; j < M; j++)
{
cout << A[i][j] << "\t";
}
cout << "\n";
}
cout << "\n";
}
void solve()
{
int i = 0;
int j = 0;
int k;
while(i < N || j < M)
{
for(k = i; k < N; k++)
{
if( A[k][j] != 0)
break;
}
if(k == N)
{
j++;
continue;
}
if(k != i)
{
for(int x = j; x < M + 1; x++)
{
swap(A[i][x], A[k][x]);
}
}
double val = A[i][j];
for(int x = j; x < M + 1; x++)
{
A[i][x] /= val;
}
for(int linie = i+1; linie < N; linie++)
{
for(int coloana = j+1; coloana < M + 1; coloana++)
{
A[linie][coloana] -= A[linie][j] * A[i][coloana];
}
A[linie][j] = 0;
}
i++;
j++;
//debugPrint();
}
for(int i = N - 1; i >= 0; i--)
{
for(int j = 0; j <= M + 1; j++)
{
if(abs(A[i][j]) < eps)
{
continue;
}
if(j == M + 1)
{
ofstream fout(outfile.c_str());
fout << "Imposibil\n";
fout.close();
return;
}
X[j] = A[i][M];
for(int k = j + 1; k < M; k++)
{
X[j] -= X[k] * A[i][k];
}
}
}
afisare();
}
int main()
{
citire();
solve();
}