Code:
#include <stdio.h>
#define SIZE 10
#define SIZE2 15
#define max(A,B) ( (A) > (B) ? (A):(B))
#define min(A,B) ( (A) < (B) ? (A):(B))
void initconfig(int [][SIZE2], int, int, int);
int occ(int [][SIZE2], int, int);
int* generate(int [][SIZE2], int, int);
void printgrid(int [][SIZE2], int, int );
int main ()
{
int coordArray[SIZE][SIZE2] = {0}, x = 0, y = 0,
generations = 0;
initconfig(coordArray, x, y, generations);
printf("\n\n\nInitial State\n\n");
printgrid(coordArray, SIZE, SIZE2);
printgrid(generate(coordArray, SIZE, SIZE2), SIZE, SIZE2);
return 0;
}
void initconfig(int coordArray[][SIZE2], int x, int y, int generations)
{
printf("\nEnter the number of generations: ");
scanf("%d", &generations);
printf("\nEnter coordinates: ");
scanf("%d%d", &x, &y);
while (x != -1){
if(x<1 || x>10 || y<1 || y>15)
printf("\nInvalid input.");
else
coordArray[x-1][y-1] = 1;
printf("\nEnter coordinates: ");
scanf("%d%d", &x, &y);
}
}
int* generate(int coordArray[][SIZE2], int row, int col)
{
int tempArray[SIZE][SIZE2] = {0}, i=0, j=0;
for(i=0; i <= row - 1; i++){
for(j=0; j <= col - 1; j++){
if(coordArray[i][j] == 1){
if(occ(coordArray, i, j) == 2)
tempArray[i][j] = 1;
if(occ(coordArray, i, j) == 3)
tempArray[i][j] = 1;
else
tempArray[i][j] = 0;}
if(coordArray[i][j] == 0){
if(occ(coordArray, i, j) == 3)
tempArray[i][j] = 1;
else
tempArray[i][j] = 0;}
}}
for(i=0; i<= row - 1; i++){
for(j=0; j <= col - 1; j++){
coordArray[i][j] = tempArray[i][j];}}
return coordArray;
}
int occ( int coordArray[][SIZE2], int x, int y )
{
int neighbourCount = 0, i, j;
for(i = max( 0, x - 1 ) ; i < min( SIZE2, x + 1 ); i++ )
{
for(j = max( 0, y - 1 ) ; j < min( SIZE, y + 1 ); j++ )
{
if ( ( x == i ) & ( y == j ) )
{
continue;
}
if ( coordArray[ i ][ j ] == 1 )
{
neighbourCount++ ;
}
}
}
return neighbourCount;
}
void printgrid(int coordArray[][SIZE2], int row, int col)
{
int i, j;
printf("\n");
for(i=0; i <= row - 1; i++){
for(j=0; j <= col - 1; j++){
if(coordArray[i][j] == 1){
printf("*");}
else
printf("-");}
printf("\n\n");
}
}