Cod sursa(job #670159)

Utilizator andreea29Iorga Andreea andreea29 Data 28 ianuarie 2012 15:57:08
Problema Algoritmul lui Gauss Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.67 kb
#include<fstream>
#include<iomanip>
#define EPS 0.0000001
using namespace std;
int n, l, i, j, m, k, u, cif, r, d;
double x[310], a[310][310], aux, p;
int main()
{
	ifstream f("gauss.in");
	ofstream h("gauss.out");
	f>>n>>m;
	for (i=1; i<=n; ++i)
		for (j=1; j<=m+1; ++j)
			f>>a[i][j];
	f.close();
	i=1; j=1;
    while(i<=n && j<=m)
    {
        for(k=i; k<=n; ++k)
            if(a[k][j]<-EPS || a[k][j]>EPS)
                break;
        if(k==n+1)
        {
            ++j;
        }
        if(k!=i)
            for(l=1; l<=m+1; ++l)
            {
                aux=a[i][l];
                a[i][l]=a[k][l];
                a[k][l]=aux;
            }
		for(l=j+1; l<=m+1; ++l)
            a[i][l]=double(a[i][l])/double(a[i][j]);
        a[i][j]=1;
        for(u=i+1; u<=n; ++u)
        {
            for(l=j+1; l<=m+1; ++l)
                a[u][l]-=a[u][j]*a[i][l];
            a[u][j]=0;
        }
        ++i; ++j;
    }

    for(i=n; i>0; --i)
        for(j = 1; j<=m+1; ++j)
            if(a[i][j]>EPS || a[i][j]<-EPS)
            {
                if(j==m+1)
                {
                    h<<"Imposibil"<<'\n';
                }
                x[j]=a[i][m+1];
                for(k=j+1; k<=m; ++k)
                    x[j]-=x[k]*a[i][k];
				break;
            }
    for(i=1; i<=m; ++i)
	{
		if (x[i]==int(x[i]))
			h<<x[i]<<".0000000000 ";
		else
		{
		if (x[i]>0)
		{
			r=int(x[i]);
			cif=0;
			while (r>0)
			{
				cif++;
				r=r/10;
			}
		}
		else
		{
			p=-x[i];
			r=int(p);
			cif=0;
			while (r>0)
			{
				cif++;
				r=r/10;
			}
		}
			d=cif+10;
		h<<setprecision(d)<<x[i]<<" ";
		}
	}
	h<<'\n';
	h.close();
	return 0;
}