Cod sursa(job #609033)

Utilizator drywaterLazar Vlad drywater Data 19 august 2011 12:27:58
Problema Algoritmul lui Gauss Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <fstream>
using namespace std;
ifstream f("gauss.in");
ofstream o("gauss.out");
int n,m,i,j,k,p,aux;
double a[301][305],x[301],val;
int main(void)
{
    f>>n>>m;
    for (i=1;i<=n;i++)
        for (j=1;j<=m+1;j++)
            f>>a[i][j];
    for (i=1,j=1;i<=n && j<=m;)
    {
        k=i;
        while (!a[k][j] && k<=n) k++;
        if (k>n) {j++; continue;}
        if (k!=i)
        {
            for (p=1;p<=m+1;p++)
                {aux=a[i][p]; a[i][p]=a[k][p]; a[k][p]=aux;}
        }
        val=a[i][j];
        for (p=1;p<=m+1;p++)
            a[i][p]/=val;
        for (k=i+1;k<=n;k++)
        {
            val=a[k][j];
            for (p=j;p<=m+1;p++)
                a[k][p]-=val*a[i][p];
        }
        i++;
        j++;
    }
    for (i=n;i>=1;i--)
    {
        j=1;
        while (!a[i][j] && j<=m) j++;
        if (j>m && a[i][m+1]!=0) {o<<"Imposibil\n"; return 0;}
        if (j>m) continue;
        x[j]=a[i][m+1];
        for (k=m;k>j;k--)
            x[j]-=a[i][k]*x[k];
    }
    o<<fixed;
    for (i=1;i<=m;i++)
        o<<x[i]<<" ";
    o<<"\n";
    o.close();
    return 0;
}