#include<stdio.h> #define MAXNUM 60 //defines the Maximum NUM #define MAXTIM 60/
ID: 3726624 • Letter: #
Question
#include<stdio.h> #define MAXNUM 60 //defines the Maximum NUM #define MAXTIM 60//define maximum time step size /*function definition for returns the number of neighbors of position i,j that are alive at time step*/ int neighbors(int anArray[MAXNUM][MAXNUM][MAXTIM+1], int i, int j, int size, int step) { //initilaizes the total count int totalCount=0; if(i>=0&&j>=0&&i<size&&j<size) // { if(j-1>=0) { if(anArray[i][j-1][step]==1) totalCount++; if(i-1>=0) if(anArray[i-1][j-1][step]==1) totalCount++; if(i+1<size) if(anArray[i+1][j-1][step]==1) totalCount++; } if(j+1<size) { if(anArray[i][j+1][step]==1) totalCount++; if(i-1>=0) if(anArray[i-1][j+1][step]==1) totalCount++; if(i+1<size) if(anArray[i+1][j+1][step]==1) totalCount++; } if(i-1>=0) if(anArray[i-1][j][step]==1) totalCount++; if(i+1<size) if(anArray[i+1][j][step]==1) totalCount++; } return totalCount; } //function definition for print the grid of size sizexsize at time step void printGrid(int myGrid[MAXNUM][MAXNUM][MAXTIM+1],int size,int step) { int r=0,c=0; while(r<size) { printf(" "); c=0; while(c<size) { printf(" %d",myGrid[r][c][step]); c++; } r++; } } //main function int main() { //print the given message printf("Conway's game of Life "); printf("Please enter the n for the n x n grid to simulate, max size for n is 60. :"); //initializes the n int n=0; //gets the maximum size for n scanf("%d",&n); //3d grid array int gridArr[MAXNUM][MAXNUM][MAXTIM+1]={0}; printf(" Enter the initial x y coordinates (the board is indexed starting from 0 0) for the initial live cells, enter -1 -1 when done "); //initializes the row r and column c is 0 int r=0,c=0; //get the r and c upto done r = -1 and c = -1 while(r!=-1||c!=-1) { scanf("%d %d",&r,&c); gridArr[r][c][0]=1; } //initializes the time step ts is 0 int ts=0; //gets the time step from user printf(" Please enter the number of time steps you wish to simulate, max number allowed is 50."); scanf("%d",&ts); //print the time step printf("Num time steps %d ",ts); printf("After %d timesteps the grid is: ",ts); //compute the grid after the given time step int i,j,k=1; k=0; while(k<=ts) { i=0; while(i<n) { j=0; while(j<n) { if(gridArr[i][j][k]==1) { //call neighbors() function if(neighbors(gridArr,i,j,n,k)==2||neighbors(gridArr,i,j,n,k)==3) gridArr[i][j][k+1]=1; else gridArr[i][j][k+1]=0; } else if(gridArr[i][j][k]==0) { if(neighbors(gridArr,i,j,n,k)==3) gridArr[i][j][k+1]=1; } j++; } i++; } k++; } //call printGrid() function to display the grid after given ts printGrid(gridArr,n,ts); printf(" "); return 0; } #include<stdio.h> #define MAXNUM 60 //defines the Maximum NUM #define MAXTIM 60//define maximum time step size /*function definition for returns the number of neighbors of position i,j that are alive at time step*/ int neighbors(int anArray[MAXNUM][MAXNUM][MAXTIM+1], int i, int j, int size, int step) { //initilaizes the total count int totalCount=0; if(i>=0&&j>=0&&i<size&&j<size) // { if(j-1>=0) { if(anArray[i][j-1][step]==1) totalCount++; if(i-1>=0) if(anArray[i-1][j-1][step]==1) totalCount++; if(i+1<size) if(anArray[i+1][j-1][step]==1) totalCount++; } if(j+1<size) { if(anArray[i][j+1][step]==1) totalCount++; if(i-1>=0) if(anArray[i-1][j+1][step]==1) totalCount++; if(i+1<size) if(anArray[i+1][j+1][step]==1) totalCount++; } if(i-1>=0) if(anArray[i-1][j][step]==1) totalCount++; if(i+1<size) if(anArray[i+1][j][step]==1) totalCount++; } return totalCount; } //function definition for print the grid of size sizexsize at time step void printGrid(int myGrid[MAXNUM][MAXNUM][MAXTIM+1],int size,int step) { int r=0,c=0; while(r<size) { printf(" "); c=0; while(c<size) { printf(" %d",myGrid[r][c][step]); c++; } r++; } } //main function int main() { //print the given message printf("Conway's game of Life "); printf("Please enter the n for the n x n grid to simulate, max size for n is 60. :"); //initializes the n int n=0; //gets the maximum size for n scanf("%d",&n); //3d grid array int gridArr[MAXNUM][MAXNUM][MAXTIM+1]={0}; printf(" Enter the initial x y coordinates (the board is indexed starting from 0 0) for the initial live cells, enter -1 -1 when done "); //initializes the row r and column c is 0 int r=0,c=0; //get the r and c upto done r = -1 and c = -1 while(r!=-1||c!=-1) { scanf("%d %d",&r,&c); gridArr[r][c][0]=1; } //initializes the time step ts is 0 int ts=0; //gets the time step from user printf(" Please enter the number of time steps you wish to simulate, max number allowed is 50."); scanf("%d",&ts); //print the time step printf("Num time steps %d ",ts); printf("After %d timesteps the grid is: ",ts); //compute the grid after the given time step int i,j,k=1; k=0; while(k<=ts) { i=0; while(i<n) { j=0; while(j<n) { if(gridArr[i][j][k]==1) { //call neighbors() function if(neighbors(gridArr,i,j,n,k)==2||neighbors(gridArr,i,j,n,k)==3) gridArr[i][j][k+1]=1; else gridArr[i][j][k+1]=0; } else if(gridArr[i][j][k]==0) { if(neighbors(gridArr,i,j,n,k)==3) gridArr[i][j][k+1]=1; } j++; } i++; } k++; } //call printGrid() function to display the grid after given ts printGrid(gridArr,n,ts); printf(" "); return 0; }Explanation / Answer
code:
#include <stdio.h>
/* Board Width and Hgight */
#define WIDTH 10
#define HEIGHT 10
/* initialize to zero*/
void initiboard (int board[][HEIGHT]) {
int i, j;
int size;
printf(" Enter GRId size");
scanf("%d", &size);
for (i=0; i<WIDTH; i++) for (j=0; j<HEIGHT; j++)
board[i][j] = 0;
}
int XAddition (int i, int a) {
i += a;
while (i < 0) i += WIDTH;
while (i >= WIDTH) i -= WIDTH;
return i;
}
/* add to a height index, wrapping around */
int YAddition (int i, int a) {
i += a;
while (i < 0) i += HEIGHT;
while (i >= HEIGHT) i -= HEIGHT;
return i;
}
/* return the number of on cells neighbor to the i,j cell */
int neighbour (int board[][HEIGHT], int i, int j) {
int k, l, count;
count = 0;
for (k=-1; k<=1; k++) for (l=-1; l<=1; l++)
if (k || l)
if (board[XAddition(i,k)][YAddition(j,l)]) count++;
return count;
}
void PlayGame (int board[][HEIGHT]) {
int i, j, a, newboard[WIDTH][HEIGHT];
/* for each cell, apply the rule of Life */
for (i=0; i<WIDTH; i++) for (j=0; j<HEIGHT; j++) {
a = neighbour (board, i, j);
if (a == 2) newboard[i][j] = board[i][j];
if (a == 3) newboard[i][j] = 1;
if (a < 2) newboard[i][j] = 0;
if (a > 3) newboard[i][j] = 0;
}
/* copy new board back into old board */
for (i=0; i<WIDTH; i++) for (j=0; j<HEIGHT; j++) {
board[i][j] = newboard[i][j];
}
}
/* print board */
void DisPlayGameBoard (int board[][HEIGHT]) {
int i, j;
/* for each row*/
for (j=0; j<HEIGHT; j++) {
/* DisPlayGameBoard each column position... */
for (i=0; i<WIDTH; i++) {
printf ("%c", board[i][j] ? 'x' : ' ');
}
/* followed by a carriage return */
printf (" ");
}
}
/* read a file into the life board */
void ReadUserInput (int board[WIDTH][HEIGHT]) {
int i, j;
printf(" enter initail(-1, -1 to finish) ");
while(i!=-1 ||j!=-1)
{
scanf("%d %d", &i, &j);
board[i][j]=1;
}
}
/* main program */
int main (int argc, char *argv[]) {
int board[WIDTH][HEIGHT], i, j;
int ts;
initiboard (board);
ReadUserInput (board);
printf(" How many times?");
scanf("%d", &ts);
for (i=0; i<ts; i++) {
DisPlayGameBoard (board);
PlayGame(board);
}
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.