
#include <stdio.h> /* for input/output */
#define NumberOfEquations 4


void gauss(float variableResistance) {
  float sum;
  float matrices[NumberOfEquations][NumberOfEquations+1] = {
    /* A */                                   /* B */
    {  8,  -4,   0,  -2,        6},
    { -4, 9e9,  -3,   0,        0},
    {  0,  -3,   4,  -1,      -12},
    { -2,   0,  -1,   7,        0}
  };
  int substitutionIndex, columnIndex, rowIndex;

  matrices[1][1] = variableResistance + 7;

  /* GAUSS ELIMINATION */

  /* determinant = 1;*/
  for (substitutionIndex = 0; substitutionIndex < NumberOfEquations; substitutionIndex++) {
    /* Finds maximum pivot in column i then permutes rows i and the
       row of the maxiumum pivot */
    /* determinant *= matrices[substitutionIndex][substitutionIndex]; */
    for (columnIndex = substitutionIndex+1; columnIndex <= NumberOfEquations; columnIndex++) {
      matrices[substitutionIndex][columnIndex] /= matrices[substitutionIndex][substitutionIndex];
      for (rowIndex = substitutionIndex+1; rowIndex < NumberOfEquations; rowIndex++) {
        matrices[rowIndex][columnIndex] -= 
          matrices[rowIndex][substitutionIndex] * matrices[substitutionIndex][columnIndex];
      }
    }
  }


  /* BACK-SUBSTITUTION */

  for (rowIndex = NumberOfEquations - 2; rowIndex >= 0; rowIndex--) {
    sum = 0;
    for (columnIndex = rowIndex+1; columnIndex < NumberOfEquations; columnIndex++) {
      sum += matrices[rowIndex][columnIndex] * matrices[columnIndex][NumberOfEquations];
    }
    matrices[rowIndex][NumberOfEquations] -= sum;
  }


  /* OUTPUT */

  for (rowIndex = 0; rowIndex < NumberOfEquations; rowIndex++) {
    printf ("%9.4f", matrices[rowIndex][NumberOfEquations]);
  }
}

main() {
  float variableResistance;

  /* INTRODUCTION */

  printf("Lab Session 8, Question 2\n"); /* Display program header */

  for (variableResistance = 0.0; variableResistance <= 5.0; variableResistance += 0.5) {
    printf ("R = %4.1f: ", variableResistance);
    gauss(variableResistance);
    printf ("\n");
  }

}





