Pagini recente » Cod sursa (job #3205046) | Cod sursa (job #1689897) | Cod sursa (job #1174429) | Cod sursa (job #1450169) | Cod sursa (job #1222043)
#include <iostream>
#include <iomanip>
#include <fstream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
#define MAX 100010
#define EPS 1e-10
ifstream f("gauss.in");
ofstream g("gauss.out");
int N, M;
long double A[305][305], Sol[305], X, Y;
void Solve(int i, int j) {
if (i > N || j > M) {
return;
}
for (int x = i; x <= N; x++) {
if (abs(A[x][j]) > EPS) {
for (int jj = 1; jj <= M+1; jj++) {
swap(A[i][jj], A[x][jj]);
}
X = 1 / A[i][j];
for (int jj = j; jj <= M+1; jj++) {
A[i][jj] *= X;
}
for (int ii = i+1; ii <= N; ii++) {
Y = A[ii][j];
for (int jj = j; jj <= M+1; jj++) {
A[ii][jj] = -A[ii][jj] / Y + A[i][jj];
}
}
Solve(i+1,j+1);
return;
}
}
Solve(i, j+1);
}
bool Solution() {
int j;
for (int i = N; i >= 1; i--) {
j = 1;
while (j <= M+1 && abs(A[i][j]) < EPS) j++;
if (j == M+1) return 0;
Sol[j] = A[i][M+1];
for (int jj=j+1; jj <= M; jj++) {
Sol[j] -= Sol[jj] * A[i][jj];
}
}
return 1;
}
int main() {
//freopen("input.in","r",stdin);
//freopen("gauss.out","w",stdout);
f >> N >> M;
for (int i = 1; i <= N; i++)
for (int j = 1; j <= M+1; j++) {
f >> A[i][j];
}
Solve(1,1);
if (Solution()) {
g << setprecision(15) << fixed;
for (int i = 1; i <= M; i++) g << Sol[i] << " ";
} else {
g << "Imposibil";
}
//for (int i = 1; i <= N; i++, printf("\n"))
//for (int j = 1; j <= M; j++) cout << A[i][j] << " ";
return 0;
}