Cod sursa(job #1473007)

Utilizator al.mocanuAlexandru Mocanu al.mocanu Data 18 august 2015 12:31:36
Problema Algoritmul lui Gauss Scor 90
Compilator c Status done
Runda Arhiva educationala Marime 1.01 kb
#include <stdio.h>
#define MAX 305

int n, m, i, j, k;
double a[MAX][MAX], x[MAX], imp, rep;

int main(){
	freopen("gauss.in", "r", stdin);
	freopen("gauss.out", "w", stdout);
	scanf("%d%d", &n, &m);
	for(i = 1; i <= n; i++)
		for(j = 1; j <= m + 1; j++)
			scanf("%lf", &a[i][j]);
/*	if(n < m){
		printf("Imposibil\n");
		return 0;
	}*/

	for(j = 1; j <= m; j++){
		i = j;
		while(!a[i][j] && i <= n)
			i++;
		if(i > n)
			continue;

		if(i != j)
			for(k = j; k <= m + 1; k++){
				a[i][k] = a[i][k] + a[j][k];
				a[j][k] = a[i][k] - a[j][k];
				a[i][k] = a[i][k] - a[j][k];
			}
		imp = a[j][j];
		for(k = j; k <= m + 1; k++)
			a[j][k] /= imp;

		for(i = j + 1; i <= n; i++){
			rep = a[i][j];
			for(k = j; k <= m + 1; k++)
				a[i][k] -= rep * a[j][k];
		}
	}

	for(i = n; i > m; i--)
		if(a[i][m + 1]){
			printf("Imposibil\n");
			return 0;
		}

	for(i = m; i > 0; i--){
		x[i] = a[i][m + 1];
		for(j = i + 1; j <= m; j++)
			x[i] -= a[i][j] * x[j];
	}

	for(i = 1; i <= m; i++)
		printf("%.10lf ", x[i]);
	return 0;
}