Cod sursa(job #1026640)

Utilizator Adrian1997Radulescu Adrian Adrian1997 Data 11 noiembrie 2013 20:24:36
Problema Algoritmul lui Gauss Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <fstream>
#include <cstdio>
using namespace std;
ifstream f("gauss.in");
FILE *g=fopen("gauss.out","w");
int n,m;
double a[311][311];
double sol[311];

int main(void){
    register int i,j,t,k,p1,p2;

    f>>n>>m;
    for(i=1;i<=n;i++)
        for(j=1;j<=m+1;j++)
            f>>a[i][j];

    for(t=1;t<n;t++){
        for(k=t+1;k<=n;k++){
            if(a[t][t]==a[k][t])
                p1=-1,p2=1;
            else if(a[t][t]==-a[k][t])
                p1=p2=1;
            else if((a[t][t]>0 && a[k][t]>0)||(a[t][t]<0 && a[k][t]<0))
                p1=a[k][t],p2=-a[t][t];
            else if(a[t][t]>0 && a[k][t]<0)
                p1=-a[k][t],p2=a[t][t];
            else if(a[t][t]<0 && a[k][t]>0)
                p1=a[k][t],p2=-a[t][t];
            for(i=1;i<=m+1;i++)
                a[k][i]=a[t][i]*p1+a[k][i]*p2;
        }
    }

    sol[n]=(double)a[n][n+1]/a[n][n];
    for(i=n-1;i>0;i--){
        for(j=i;j>0;j--)
            a[j][n+1]-=sol[i+1]*a[j][i+1];
        sol[i]=(double)a[i][n+1]/a[i][i];
    }
    for(i=1;i<=n;i++)
        fprintf(g,"%.8f ",sol[i]);
    f.close();
    fclose(g);
    return 0;
}