Cod sursa(job #2391330)

Utilizator PetyAlexandru Peticaru Pety Data 28 martie 2019 19:21:48
Problema Algoritmul lui Gauss Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.28 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin ("gauss.in");
ofstream fout ("gauss.out");

const double eps = 0.0000001;

int n, m;
double a[302][302], x[302];

int main()
{
  fin >> n >> m;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m + 1; j++)
      fin >> a[i][j];
  int i = 1, j = 1;
  while (i <= n && j <= m) {
    int poz = -1;
    for (int k = i; k <= n; k++)
      if (abs(a[k][j]) > eps) {
        poz = k;
        break;
      }
    if (poz == -1) {
      j++;
      continue;
    }
    for (int k = 1; k <= m + 1; k++) {
      swap(a[i][k], a[poz][k]);
    }
    for(int k = j + 1; k <= m + 1; k++)
      a[i][k] = a[i][k] / a[i][j];
    a[i][j] = 1;
    for (int l1 = i + 1; l1 <= n; l1++) {
      for (int c1 = j +1; c1 <= m + 1; c1++)
        a[l1][c1] -= a[l1][j] * a[i][c1];
      a[l1][j] = 0;
    }
    i++;j++;
  }
  for(i = n; i > 0; i--)
    for(j = 1; j <= m; j++)
      if(abs(a[i][j]) > eps) {
        if (j == m + 1) {
          fout << "Imposibil";
          return 0;
        }
        x[j] = a[i][m + 1];
        for(int k = j + 1; k <= m; k++)
          x[j] -= x[k] * a[i][k];
        break;
      }
  for (i = 1; i <= m; i++)
    fout << fixed << setprecision(9) << x[i] << " ";
  return 0;
}