Answer:
I am writing a C++ program using loops instead of nested if statements.
#include <iostream> // to use input output functions
using namespace std; // to identify objects like cin cout
void cells(int cells[],int days){ /* function that takes takes one array of integers cells, one integer days representing the number of days to simulate. */
int pos ,num=0; //declares variables pos for position of two adjacent cells and num to iterate for each day
int result[9]; //the updated output array
while (num< days) { //this loop keeps executing till the value of num is less than the value of number of days
num++;
for(pos=1;pos<9;pos++) //this loop has a pos variable that works like an index and moves through the cell array
result[pos]=(cells[pos-1])^ (cells[pos+1]); //updated cell state determined by the previous and next cells (adjacent cells) by bitwise XOR operations
for(pos=1;pos<9;pos++) //iterates through the array
cells[pos]=result[pos]; } //the updated cells state is assigned to the cell array simultaneously
for(pos=1;pos<9;pos++) //iterates through the array and prints the resultant array that contains the updated active and inactive cells values
cout << result[pos]; }
int main() { //start of the main function body
int j,day;
int output[9];
*/the two cells on the ends (first and last positions of array) have single adjacent cell, so the other adjacent cell can be assumed to be always inactive i.e. 0 */
output[0]=output[9]=0;
for(j=1;j<9;j++) //takes the input array from user
cin >> output[j];
cin >> day;
cells(output,day); } //calls the function cells to print the array with active and inactive cells states.
Explanation:
The program is well explained in the comments mentioned with every statement of the program. I will explain with the help of example:
Suppose the user enters the array = [1,0,0,0,0,1,0,0] and days=1
The while loop checks if the value of num is less than that of days. Here num is 0 and days is 1 So this means that the body of while loop will execute.
In the body of while loop the value of num is incremented by 1. The first loop initializes a variable pos for position of adjacent cells. The statement is a recursive statement result[pos]=(cells[pos-1])^ (cells[pos+1]) that uses previous state for updating the state of other cells. The “^” is the symbol used for bitwise exclusive operator. In bitwise XOR operations the two numbers are taken as operands and XOR is performed on every bit of two numbers. The result of XOR is 1 if the two bits are not same otherwise 0. For example XOR of 1^0 and 0^1 is 1 and the XOR of 0^0 and 1^1 is 0. The second for loop update the cell information of all cells simultaneously. The last loop prints the updated cells states.
The main function takes the input array element from user and the value for the days and calls the cells function to compute the print the active and inactive cells state information.
The screenshot of the program along with its output are attached.