Pagini recente » Cod sursa (job #2062027) | Cod sursa (job #479293) | Cod sursa (job #1633322) | Cod sursa (job #688174) | Cod sursa (job #3292253)
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cmath>
using namespace std;
ifstream f ("gauss.in");
ofstream g ("gauss.out");
const double EPS = 1e-10;
const int NMAX = 300;
int N, M;
double A[NMAX+1][NMAX+2], X[NMAX+1];
void Gauss() {
int i=1, j=1, k, p;
while(i <= N && j <= M) {
if (abs(A[i][j]) <= EPS) {
bool ok = 0;
for (k = i+1; k<=N; k++)
if (abs(A[k][j]) > EPS) {
ok = 1;
for (p = j; p <= M+1; p++)
swap(A[i][p], A[k][p]);
break;
}
//
if (!ok) {
j++;
continue;
}
}
//
for (k=j+1; k<=M+1; k++)
A[i][k] /= A[i][j];
A[i][j] = 1.0;
//
for(k=i+1; k<=N; k++) {
for(p=j+1; p<=M+1; p++)
A[k][p] -= A[k][j] * A[i][p];
A[k][j] = 0.0;
}
i++;
j++;
}
}
bool solutie() {
for (int i=N; i>=1; i--)
for(int j=i; j<=M+1; j++)
if (abs(A[i][j]) > EPS) {
if (j == M+1)
return 0;
//
X[j] = A[i][M+1];
for(int k=j+1; k<=M; k++)
X[j] -= X[k] * A[i][k];
break;
}
return 1;
}
void afisare() {
for (int i=1; i<=M; i++)
g << fixed << setprecision(10) << X[i] << ' ';
}
int main(){
f >> N >> M;
for (int i=1; i<=N; i++)
for (int j=1; j<=M+1; j++)
f >> A[i][j];
//
Gauss();
//
if (solutie())
afisare();
else
g << "Imposibil";
//
f.close();
g.close();
return 0;
}