Pagini recente » Cod sursa (job #227313) | Cod sursa (job #3123383) | Cod sursa (job #330943) | Cod sursa (job #1911324) | Cod sursa (job #3042052)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 300;
const double EPS = 1e-3;
double a[NMAX][NMAX + 1];
double ans[NMAX];
int main() {
FILE *fin, *fout;
fin = fopen("gauss.in", "r");
fout = fopen("gauss.out", "w");
int n, m;
fscanf(fin, "%d%d", &n, &m);
for(int i = 0; i < n; i++)
for(int j = 0; j < m + 1; j++)
fscanf(fin, "%lf", &a[i][j]);
int lin, col;
lin = col = 0;
while(lin < n && col < m) {
int lin2 = -1;
for(int i = lin; i < n; i++) {
if(lin2 == -1 && (a[i][col] > EPS || a[i][col] < -EPS))
lin2 = i;
}
if(lin2 == -1)
col++;
else {
if(lin2 != lin) {
for(int j = 0; j < m + 1; j++)
swap(a[lin][j], a[lin2][j]);
}
for(int j = col + 1; j < m + 1; j++)
a[lin][j] = a[lin][j] / a[lin][col];
a[lin][col] = 1;
for(int i = lin + 1; i < n; i++) {
for(int j = col + 1; j < m + 1; j++)
a[i][j] -= a[i][col] * a[lin][j];
a[i][col] = 0;
}
lin++;
col++;
}
}
bool stg = true;
for(int i = m - 1; i >= 0 && stg; i--) {
int col2 = -1;
for(int j = 0; j < m + 1 && stg; j++) {
if(col2 == -1 && (a[i][j] > EPS || a[i][j] < -EPS)) {
col2 = j;
}
}
if(col2 == m)
stg = false;
if(stg) {
ans[col2] = a[i][m];
for(int col = col2 + 1; col < m + 1; col++) {
ans[col2] -= ans[col] * a[i][col];
}
}
}
if(stg == false)
fprintf(fout, "Imposibil");
else {
for(int i = 0; i < m; i++)
fprintf(fout, "%.10lf ", ans[i]);
}
fclose(fin);
fclose(fout);
return 0;
}