Cod sursa(job #991591)

Utilizator alexandru.huleaAlexandru Hulea alexandru.hulea Data 30 august 2013 22:41:15
Problema Algoritmul lui Gauss Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.98 kb
#include <iostream>
#include <fstream>

using namespace std;

int M,N;

void interschimba(double a[300][300], int p,int q)
{
     double aux;
     int i;
     for(i = 0; i < M+1 ; i++)
     {
           aux = a[p][i];
           a[p][i] = a[q][i];
           a[q][i] = aux;
     }      
}

void schimba(double a[300][300], int p,int q)
{
     int i;
     for (i = p+1; i < M+1;i++)
     {
         a[q][i] = a[p][p]*a[q][i] - a[p][i]* a[q][p];     
     }
}

int cauta(double a[300][300],int p)
{
    for (int i = p+1 ;i<N; i++)
    {
        if (a[i][i] != 0) return i;
    }
    return -1;
}

/*void afiseaza(double a[300][300])
{    
     int i,j;
     for (i=0;i<N;i++)
     {
         for (j=0;j<M+1;j++)
         cout<<a[i][j]<<" ";
         cout<<"\n";
     }
}*/

int main()
{
    ifstream in("gauss.in");
    FILE* out= fopen("gauss.out","wt");
    in>>N>>M;
    int j,k,l;
    double a[300][300];
    double v[300],s;
    for ( j =0; j<N; j++)
        for (k=0; k<M+1;k++)
        {
            in>>a[j][k];
        }
    in.close();
    
    if ( M == N)
    {
    for(j=0; j<N-1; j++)
       {
             if ( a[j][j] == 0)
                    {
                    l = cauta(a,j);
                    if ( l == -1) { fprintf(out,"Imposibil");
                                    fclose(out);
                                    system("pause");
                                    return 0;
                                    }
                    else interschimba(a,j,l);
                    }
                 for (k = j+1; k <N;k++)   
                 schimba(a,j,k);
                 
       }
    for ( j = N -1; j>=0; j--)
    {
        s=0;
        for ( k = j; k < M; k++)
            s += v[k] * a[j][k];
        v[j] = (a[j][M] - s) / a[j][j];
    }
    }
    
    for ( j=0;j<M-1;j++)
    {
        fprintf(out,"%.8lf ",v[j]);
    }
    fprintf(out,"%.8lf",v[M-1]);
    fclose(out);
    return 0;
}