Cod sursa(job #1480374)

Utilizator ZenusTudor Costin Razvan Zenus Data 2 septembrie 2015 15:20:45
Problema Algoritmul lui Gauss Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include <bits/stdc++.h>

using namespace std;

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

const int nmax = 300 + 10;
const double eps = (1e-9);

double a[nmax][nmax];
double x[nmax];
double cc;
int i , j , n , m , k , q;

double modul(double a)
{
    if (a < 0) return -a;
    return a;
}

int main()
{

fin >> n >> m;

for (i = 1 ; i <= n ; ++i)
for (j = 1 ; j <= m + 1 ; ++j)
fin >> a[i][j];

i = j = 1;
while (i <= n && j <= m)
{
    k = i;
    while (k <= n && modul(a[k][j]) < eps) ++k;

    if (k == n + 1)
    {
        j += 1;
        continue;
    }

    for (q = 1 ; q <= m + 1 ; ++q)
    swap(a[i][q] , a[k][q]);

    cc = a[i][j];
    for (q = 1 ; q <= m + 1 ; ++q)
    a[i][q] /= cc;

    for (k = i + 1 ; k <= n ; ++k)
    {
        cc = a[k][j];

        for (q = 1 ; q <= m + 1 ; ++q)
        a[k][q] -= cc * a[i][q];
    }

    i += 1 , j += 1;
}

for (i = n ; i ; --i)
{
    j = 1;
    while (j <= m + 1 && modul(a[i][j]) < eps) j += 1;

    if (j == m + 1)
    {
        fout << "Imposibil" << '\n';
        return 0;
    }

    x[j] = a[i][m + 1];
    for (k = j + 1 ; k <= m ; ++k)
    x[j] -= x[k] * a[i][k];
}

for (i = 1 ; i <= m ; ++i)
fout << fixed << setprecision(10) << x[i] << " ";

return 0;
}