#include <stdio.h>
#include <stdlib.h>
void randomisiere(int *anfang, int groesse)
{
   int i;
   int j;
   int *line;
   int *cur;
   line=anfang;
   for(i=1;i<groesse-1;i++)
   {
      line=line+groesse;
      cur=line;
      for(j=1;j<groesse-1;j++)
      {
         cur++;
         *cur=rand()%8;
      }
   }
}
void randnullen(int *anfang, int groesse)
{
   int i;
   int *line;
   int *cur;
   cur=anfang;
   // erste Zeile mit Nullen auffüllen
   for(i=0;i<groesse;i++)
   {
      *cur=0;
      cur++;
   }
   // erste Spalte mit Nullen auffüllen
   line=anfang;
   for(i=1;i<groesse-1;i++)
   {
      line=line+groesse;
      *line=0;
   }
   //letzte Spalte mit Nullen auffüllen
   line=anfang+groesse-2;
   for(i=1;i<groesse-1;i++)
   {
      line=line+groesse;
      *line=0;
   }
   // letzte Zeile mit Nullen auffüllen
   cur=anfang+(groesse*(groesse-2));
   for(i=0;i<groesse;i++)
   {
      *cur=0;
      cur++;
   }
}
void anzeigen(int *anfang, int groesse)
{
   int i;
   int j;
   int *cur;
   int *line;
   line=anfang;
   for(i=0;i<groesse;i++)
   {
      cur=line;
      for(j=0;j<groesse;j++)
      {
         printf("%-3d",*cur );
         cur++;
      }
      line=line+groesse;
      printf("\n");
   }
}
int ueberfuehre(int o, int u, int l, int r, int h)
{
   if (h>=4) h=h-4;
   if (o>=4) h=h+1;
   if (u>=4) h=h+1;
   if (l>=4) h=h+1;
   if (r>=4) h=h+1;
   return h;
}
main()
{
   int *sfanfangvon;
   int *sfanfangnach;
   int sfgroesse;
   int xpos;
   int ypos;
   int groesse;
   int *zeilevon;
   int *zeilenach;
   int *zellevon;
   int *zellenach;
   int count;
   char dummie;
   int *temp;
   // frage Spielfeldgröße ab
   printf("Bitte die Größe des Spielfeldes eingeben\n");
   scanf("%d",&groesse);
   sfgroesse=groesse+2;
   // alloziere Spielfeld
   sfanfangvon=malloc(sizeof(int)*sfgroesse*sfgroesse);
   sfanfangnach=malloc(sizeof(int)*sfgroesse*sfgroesse);
   randnullen(sfanfangvon, sfgroesse);
   randnullen(sfanfangnach, sfgroesse);
   // belege das Spielfeld mit Zufallszahlen
   randomisiere(sfanfangvon, sfgroesse);
   // Berechnungsschleife
   do
   {
      count=0;
      // anzeigen(sfanfangvon, sfgroesse);
      zeilevon=sfanfangvon;
      zeilenach=sfanfangnach;
      for(xpos=1;xpos<sfgroesse-1;xpos++)
      {
         zeilevon=zeilevon+sfgroesse;
         zeilenach=zeilenach+sfgroesse;
         zellevon=zeilevon;
         zellenach=zeilenach;
         for(ypos=1;ypos<sfgroesse-1;ypos++)
         {
            zellevon++;
            zellenach++;
*zellenach=ueberfuehre(*(zellevon-sfgroesse),*(zellevon+sfgroesse),*(zellevon-1),*(zellevon+1),*zellevon);
            if(*zellenach!=*zellevon) count++;
         }
      }
      temp=sfanfangvon;
      sfanfangvon=sfanfangnach;
      sfanfangnach=temp;
      // scanf("%c",&dummie);
      printf("%d\n",count);
   } while (count!=0);
   // gebe Spielfeld aus
   // anzeigen(sfanfangvon, sfgroesse);
}
abspeichern als :
benchmark.c
dann:
gcc -O3 -o benchmark benchmark.c
als ausführung:
time ./benchmark
mfg