Cod sursa(job #1212974)

Utilizator mariusn01Marius Nicoli mariusn01 Data 26 iulie 2014 18:51:08
Problema Algoritmul lui Gauss Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.54 kb
#include <fstream>
#include <iomanip>
#define DIM 310
#define EPS 0.00000001

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

double A[DIM][DIM], X[DIM], aux;

int n, m, i, j, k, t;

int main() {
    fin>>n>>m;
    for (i=1;i<=n;i++)
        for (j=1;j<=m+1;j++)
            fin>>A[i][j];

    i = 1; j = 1;
    while (i<=n && j<=m) {
        if (A[i][j] != 0) {
            for (k=m+1;k>=j+1;k--)
                A[i][k] /= A[i][j];
            A[i][j] = 1;

            for (k = i+1;k<=n;k++) {

                for (t = j+1;t<=m+1;t++)
                    A[k][t] -= A[k][j] * A[i][t];
                A[k][j] = 0;
            }


            i++;
            j++;
            continue;
        }

        for (k=i+1;k<=n;k++)
            if (A[k][j] != 0)
                break;

        if (k == n+1) {
            j++;
            continue;
        } else {
            for (t=1;t<=m+1;t++) {
                aux = A[i][t];
                A[i][t] = A[k][t];
                A[k][t] = aux;
            }
        }
    }

    for (i=n;i>=1;i--) {
        for (j=1;j<=m+1;j++)
            if (A[i][j] > EPS || A[i][j] < -EPS)
                break;
        if (j == m+1) {
            fout<<"Imposibil";
            return 0;
        }
        if (j == m+2)
            continue;
        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<<setprecision(10)<<fixed<<X[i]<<" ";

    return 0;
}