Algorithmus in C

Die Aufgabe:

Das i-Tüpfelchen unseres Projektes über Carl Friedrich Gauss war die Entwicklung seines Eliminationsverfahrens in der Programmiersprache C. Nachdem die Mitglieder der Arbeitsgruppe Linux sich also mit der Umsetzung mithilfe von JavaScript gegeißelt hatten, kehrten sie zur Wurzel, nämlich der Linux-Oberfläche, zurück. Daraufhin entstand folgender Quellcode, welcher eine vordefinierte dreidimensionale Matrix auflöst. (Zugegeben: Die Ausgabe ist schlichter als bei der JavaScript-Version.)

Die Lösung:

#include <stdio.h>

/* Ausgabeprozedur */
void printMatrix(float matrix[3][4])
{
   int i, j;

   for (i=0; i<3; i++)
   {
      for (j=0; j<4; j++)
      {
         printf("[%1.1f]\t",matrix[i][j]);
      }
      printf("\n");
   }
   printf("\n");
   return;
}

/* Hauptprogramm */
int main()
{
   int   i, ze1, sp1, ze2, sp2;
   float faktor, summe;
   float lsg[3], tmp[4];
   float matrix[3][4]=
   {  6, -3, -8, 39,
      4,  5,-12, 13,
      1,  1, -2,  6 };

   /* Auflösen */
   for (sp1=0; sp1<=1; sp1++)
   {
      ze2=sp1;
      for (ze1=ze2+1; ze1<=2; ze1++)
      {
         faktor=-(matrix[ze1][sp1]/matrix[ze2][sp1]);
         for (i=0; i<=3; i++)
         {
            tmp[i]=matrix[ze2][i];
            matrix[ze2][i]=matrix[ze2][i]*faktor;
            matrix[ze1][i]=matrix[ze1][i]+matrix[ze2][i];
         }
      printMatrix(matrix);
      }
   }

   /* Zurückrechnen */
   i=0;
   lsg[i]=matrix[2][3]/matrix[2][2];
   for (ze1=1; ze1>=0; ze1--)
   {
      summe=0;
      for (sp1=2; sp1>ze1; sp1--)
      {
         summe=summe+matrix[ze1][sp1]*lsg[2-sp1];
      }
      i++;
      lsg[i]=(matrix[ze1][3]-summe)/matrix[ze1][ze1];
   }

   /* Lösungsmenge */
   for (i=0; i<=2; i++)
   {
      printf("[%1.2f]\t\n",lsg[i]);
   }
   return 0;
}