#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