Pagini recente » Cod sursa (job #2407562) | Cod sursa (job #1379774) | Cod sursa (job #644796) | Cod sursa (job #2798182) | Cod sursa (job #676702)
Cod sursa(job #676702)
#include <cstdio>
#include <vector>
#include <iostream>
using namespace std;
#define EPS 0.00000001
#define notzero(a) (!(a > -EPS && a < EPS))
vector <vector <double> > coef;
vector <double> results;
int n, m;
int main(void) {
FILE* fin = fopen("gauss.in", "r");
fscanf(fin, "%d %d", &n, &m);
coef.resize(n, vector <double> (m+1));
results.resize(m);
for(int i = 0; i < n; ++i)
for(int j = 0; j <= m; ++j)
fscanf(fin, "%lf", &coef[i][j]);
fclose(fin);
int lin = 0, col = 0;
while(lin < n && col < m) {
int i;
for(i = col; i < n; ++i)
if(notzero(coef[i][col]))
break;
if(i == n) {
++col; // variabila nedeterminata
continue;
}
if(i != lin) {
int aux;
for(int j = 0; j <= m; ++j)
{
aux = coef[lin][j];
coef[lin][j] = coef[i][j];
coef[i][j] = aux;
}
}
for(int i = col + 1; i <= m; ++i)
coef[lin][i] /= coef[lin][col];
coef[lin][col] = 1;
for(int i = lin + 1; i < n; ++i) {
for(int j = col + 1; j <= m; ++j)
coef[i][j] -= coef[i][col] * coef[lin][j];
coef[i][col] = 0;
}
++col; ++ lin;
}
FILE* fout = fopen("gauss.out", "w");
for(int i = n - 1; i >= 0; --i)
for(int j = 0; j <= m; ++j)
if(notzero(coef[i][j])) {
if(j == m) {
fprintf(fout, "Imposibil");
return 0;
}
results[j] = coef[i][m];
for(int k = j + 1; k <= m; ++k)
results[j] -= results[k] * coef[i][k];
break;
}
for(int i = 0; i < m; ++i)
fprintf(fout, "%.8lf ", results[i]);
}