Cod sursa(job #1480370)

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

using namespace std;

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

const int nmax = 300 + 10;

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

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 && a[k][j] == 0) ++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 && a[i][j] == 0) 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 <= n ; ++i)
fout << fixed << setprecision(10) << x[i] << " ";

return 0;
}