/* gauss.c */
#include <stdio.h>
void rowdiv(float [], float);
void rowdif(float [], float [], float);

void _debugout(float *);
//#define _debugout() {int i,j; for(i=0;i<3;i++){for(j=0;j<4;j++) printf("%5.2f ",a[i][j]);printf("\n");}}

int main()
{
	static float a[3][4] ={ {2,-1, 1, 0},
			 	{1, 1,-1, 6},
			 	{1, 2, 3, 5}};
	int i,j;

	for (i = 0; i < 3; i++) {
		rowdiv(a[i],a[i][i]);
_debugout(a[0]);
//_debugout();
		for (j = i+1; j < 3; j++) {
			rowdif(a[j],a[i],a[j][i]);
		}
_debugout(a[0]);
//_debugout();
	}
	for (i = 1; i >= 0; i--) {
		for (j = 2; j >= i+1; j--) {
			rowdif(a[i],a[j],a[i][j]);
		}
_debugout(a[0]);
//_debugout();
	}
	return(0);
}

void rowdiv(float b[], float v) {
	int k;

	for (k = 0; k < 4; k++) {
		b[k] = b[k]/v;
	}
}

void rowdif(float b[], float c[], float v) {
	int k;

	for (k = 0; k < 4; k++) {
		b[k] = b[k] - c[k]*v;
	}
}

void _debugout(float *x) {   
	int i,j;
 
	for (i = 0; i < 3; i++) {
		for (j = 0; j < 4; j++) {
			printf("%5.2f ",*(x+4*i+j));
		}
		printf("\n");
	}
}
