Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

Task : Simulate the growth of a biological population. The Game of Life , invented by John H. Conway, is supposed to model the genetic

Task: Simulate the growth of a biological population. The Game of Life, invented by John H. Conway, is supposed to model the genetic laws for birth, survival, and death. Our implementation of the game will use a 2-dimensional array with 12 rows and 12 columns. Each cell of the array will hold either a 1 (an organism is present) or a 0 (no organism there). You will calculate 4 generations of the organisms birth, survival, and death.

An organisms neighbors affect its survival. Each organism has 8 adjoining cells where its neighbors may live, as shown in this grid:

0

0

1

1

X

0

0

1

0

The neighbors for cell X would be located in the 8 shaded cells surrounding it. In the situation illustrated, X has 3 neighbors.

Rules for the game:

Birth: An organism will be born in each empty location that has exactly 3 neighbors.

Death: An organism with 4 or more organisms as neighbors will die from overcrowding. An organism with 1 or 0 neighbors will die of loneliness.

Survival: An organism with 2 or 3 neighbors will survive to the next generation.

You will not have to process the border cells (i.e., rows 0 and 11, and columns 0 and 11)

of the game, but the border cells contents will affect the internal cells. Assume that border cells are infertile regions where organisms can neither survive nor be born.

The population configuration as shown below will be the initial contents of one array. For each generation, calculate the results of the first arrays births, deaths, and survivals, and store those results in a second array. After printing the results, copy the second arrays data back into the first one (replacing the original data), and repeat the process to calculate the next generation.

Input: The first array will be initialized as follows:

int life[12][12] =

{ {0,0,0,0,0,0,0,0,0,0,0,0},

{0,0,0,0,1,0,1,0,1,0,0,0},

{0,0,0,1,0,1,0,1,0,0,0,0},

{0,0,0,0,0,0,0,0,0,0,0,0},

{0,0,0,0,1,0,1,0,1,0,0,0},

{0,0,0,1,0,1,0,1,0,0,0,0},

{0,1,1,1,1,1,1,1,1,1,1,0},

{0,0,0,0,1,1,1,1,0,0,0,0},

{0,0,0,0,1,0,1,0,1,0,0,0},

{0,0,0,1,0,1,0,1,0,0,0,0},

{0,0,0,0,1,0,1,0,1,0,0,0},

{0,0,0,0,0,0,0,0,0,0,0,0} };

Output: You will print out the initial situation and the results of each of 4 generations of growth. Send all the print output to a single external file. Provide header information (including name and date) in your printed version, and include row numbers and column numbers. Line up the columns. The initial generation would look something like this:

Game of Life

---------------

Original Configuration:

0 1 2 3 4 5 6 7 8 9 10 11

0 0 0 0 0 0 0 0 0 0 0 0 0

1 0 0 0 0 1 0 1 0 1 0 0 0

2 0 0 0 1 0 1 0 1 0 0 0 0

3 0 0 0 0 0 0 0 0 0 0 0 0

4 0 0 0 0 1 0 1 0 1 0 0 0

5 0 0 0 1 0 1 0 1 0 0 0 0

6 0 1 1 1 1 1 1 1 1 1 1 0

7 0 0 0 0 1 1 1 1 0 0 0 0

8 0 0 0 0 1 0 1 0 1 0 0 0

9 0 0 0 1 0 1 0 1 0 0 0 0

10 0 0 0 0 1 0 1 0 1 0 0 0

11 0 0 0 0 0 0 0 0 0 0 0 0

---------------------------------------------------------------------------------------------------------------------------------------------

So here is code and I want the output to send to the data file, not on the console, Also, it should run 4 generations.

Please, help me!

#include #include

using namespace std;

const int SIZE = 12; const int ALIVE = 1; const int DEAD = 0;

void printWorld(int x[SIZE][SIZE], fstream &fout) { int i, j; cout<<" "; fout<<" "; for(i = 0; i < SIZE; i++) { for(j = 0; j < SIZE; j++) if(x[i][j] == ALIVE) { cout << " 1 "; fout << " 1 "; } else { cout << " 0 "; fout << " 0 "; } cout << " "; fout << " "; } }

int evolve(int x[][SIZE], int row, int col) { int i = row; int j = col; return x[i-1][j-1] + x[i-1][j] + x[i-1][j+1] + x[i][j-1] + x[i][j+1] + x[i+1][j-1] + x[i+1][j] +x[i+1][j+1]; }

void copyWorld(int x[][SIZE], int y[][SIZE]) { int i, j; for(i = 0; i < SIZE; i++) for(j = 0; j < SIZE; j++) y[i][j] = x[i][j]; }

int extinct(int x[][SIZE]) { int i, j, flag = 0; for(i = 0; i < SIZE; i++) for(j = 0; j < SIZE; j++) if(x[i][j] == 1) return 1; return flag; }

int main() { int i, j; int nextGeneration[SIZE][SIZE]; int currentGeneration[SIZE][SIZE] = { {0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,1,0,1,0,1,0,0,0}, {0,0,0,1,0,1,0,1,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,1,0,1,0,1,0,0,0}, {0,0,0,1,0,1,0,1,0,0,0,0}, {0,1,1,1,1,1,1,1,1,1,1,0}, {0,0,0,0,1,1,1,1,0,0,0,0}, {0,0,0,0,1,0,1,0,1,0,0,0}, {0,0,0,1,0,1,0,1,0,0,0,0}, {0,0,0,0,1,0,1,0,1,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0} };

char choice; fstream fout;

fout.open("ConwayGenerations.txt", fstream::app); while(1) { copyWorld(currentGeneration, nextGeneration);

for(i = 1; i < SIZE-1; i++) for(j = 1; j < SIZE-1; j++) if(evolve(currentGeneration, i, j) < 2 || evolve(currentGeneration, i, j) > 3)

nextGeneration[i][j] = DEAD; else if(evolve(currentGeneration, i, j) == 3) nextGeneration[i][j] = ALIVE;

cout << "OldWorld: "; printWorld(currentGeneration, fout); cout << endl;

cout <<"NewWorld: "; printWorld(nextGeneration, fout); cout << endl;

cout << "Do you want to evolve into further generation?(Y/N): "; cin >>choice;

copyWorld(nextGeneration, currentGeneration); if(choice == 'N' || choice == 'n') return 0; } }

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Building Database Driven Catalogs

Authors: Sherif Danish

1st Edition

0070153078, 978-0070153073

Students also viewed these Databases questions

Question

b. Why were these values considered important?

Answered: 1 week ago