Cod sursa(job #608623)

Utilizator S7012MYPetru Trimbitas S7012MY Data 17 august 2011 15:12:11
Problema Algoritmul lui Gauss Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>
#include <cstdlib>
#include <algorithm>
#include <iomanip>
#include <cmath>
#define DN 305
using namespace std;

ifstream f("gauss.in");
ofstream g("gauss.out");
int n,m,ind[DN];
double a[DN][DN],rez[DN];

void bagaZero() {
	int i,j,l,p,k,u;
	double vp;
	for(i=1; i<=n; ++i) ind[i]=i;
	for(i=1; i<n; ++i) {
		p=i; vp=abs(a[ind[i]][i]);
		for(l=i+1; l<=n; ++l) if(abs(a[ind[l]][i])>vp) vp=abs(a[ind[l]][i]),p=i;
		swap(ind[p],ind[i]);
		for(j=i+1;j<=n; ++j) {
			u=a[ind[j]][i]/a[ind[i]][i];
			for(k=i; k<=n+1; ++k) a[ind[j]][k]=(-u)*a[ind[i]][k]+a[ind[j]][k];
		}
	}
}

void rezSsTr() {
	int i,j;
	double s;
	rez[n]=a[ind[n]][n+1]/a[ind[n]][n];
	for(i=n-1; 0<i; --i) {
		s=a[ind[i]][n+1];
		for(j=i+1; j<=n; ++j) s-=a[ind[i]][j]*rez[j];
		rez[i]=s/a[ind[i]][i];
	}
}

int main()
{
	f>>n>>m;
	for(int i=1; i<=n; ++i) for(int j=1; j<=m+1; ++j) f>>a[i][j];
	bagaZero();
	rezSsTr();
	for(int i=1; i<=n; ++i) g<<rez[ind[i]]<<' ';
	return 0;
}