Cod sursa(job #1513220)

Utilizator ZenusTudor Costin Razvan Zenus Data 29 octombrie 2015 09:25:07
Problema Algoritmul lui Gauss Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <bits/stdc++.h>

using namespace std;

const int nmax = 300 + 10;

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

double a[nmax][nmax];
int i , j , n , m , w , k;
int p[nmax];
double c , x[nmax];

bool zero(double x)
{
    double eps = 1e-9;

    if (-eps < x && x < eps) return 1;
    return 0;
}

int main()
{

fin >> n >> m;

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

for (i = 1 ; i <= n ; ++i)
{
    w = 0;

    for (j = 1 ; j <= m + 1 ; ++j)
    {
        if (zero(a[i][j])) continue;
        w = j;
        break;
    }

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

    for (j = 1 ; j <= n ; ++j)
    if (i - j)
    {
        if (zero(a[j][w])) continue;

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

    p[i] = w;
}

for (i = 1 ; i <= m ; ++i)
{
    w = p[i];
    if (w) x[w] = a[i][m + 1] / a[i][w];
}

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

return 0;
}