c++ project and need the explanation and answer to help me learn.
These attached files will describe the problem and the files need to implement the solution. Please use either a 2D array or 2D vector for the solution.
Requirements:
Instructions
Designing and implementing a system in C or C++, that will simulate the growth of a city over time. Specifically, you will be simulating the growth of residential, commercial, and industrial zones, and seeing how pollution impacts the overall development.
Implementation
Your program must provide the following functionality and adhere to the following constraints:
Your int main() should be in its own .c/.cpp file
All .c/.cpp files, except your main.c/main.cpp, must have associated header files. You may not #include a .c/.cpp file, only header files
Allow the user to input the file containing the simulation configuration
Do NOT hardcode the filename into your program
The first line will provide the name of the file containing the region layout (Do NOT prompt the user for this filename)
The second line will provide the maximum amount of time steps the simulation can take
The third line will provide the refresh rate of how often the current state of the region should be output to the user during simulation
Your system should perform the following operations:
Read in and store the simulation configuration information
Read in and store the initial region layout
The file will be in CSV format
The region may be any sized rectangle
The region contains 0 pollution at the beginning of the simulation
R represents a residential zone
I represents an industrial zone
C represents a commercial zone
– represents a road
T represents a powerline
# represents a powerline over a road
P represents a power plant
Output the initial region state
If a cell is zoned residential, industrial, or commercial and has a population of 0, the letter representing the zone type should be displayed instead of its population
The initial region state can be interpreted as time step 0
Simulate the development of the city over time
The simulation should halt when there is no change between two, consecutive time steps or when the time limit has been reached, whichever comes first
The current time step, number of available workers, and number of available goods should be output for each timestep except time step 0
The state of the region should be output at the frequency denoted by the refresh rate in the configuration file
The region is considered to be flat, and thus the edges do not wrap around to connect to each other
Two cells are considered adjacent if they share an edge or corner (i.e. a cell may be adjacent to a maximum of eight other cells, and a minimum of three other cells)
Each of the zoned cells will change their state according to the provided rules
In the event of a decision needing to be made over two zoned cells that could grow and use available resources, the following rules must be used in order:
Commercial zoned cells are prioritized over industrial zoned cells one
The growth of larger population zoned cells is prioritized over smaller population zoned cells (i.e. a 1 population cell will always grow before a 0 population cell)
The growth of zoned cells with greater total adjacent populations is prioritized over zoned cells with smaller total adjacent populations
The growth of zoned cells with smaller Y coordinates is prioritized over zoned cells with greater Y coordinates, assuming the top left cell is 0,0
The growth of zoned cells with smaller X coordinates is prioritized over zoned cells with greater X coordinates, assuming the top left cell is 0,0
Residential
If a cell has a population of 0 and is adjacent to a powerline in the current time step, that cell’s population will increase by 1 in the next time step
If a cell has a population of 0 and is adjacent to at least one cell with a population of at least 1, that cell’s population will increase by 1 in the next time step
If a cell has a population of 1 and is adjacent to at least two cells with a population of at least 1, that cell’s population will increase by 1 in the next time step
If a cell has a population of 2 and is adjacent to at least four cells with a population of at least 2, that cell’s population will increase by 1 in the next time step
If a cell has a population of 3 and is adjacent to at least six cells with a population of at least 3, that cell’s population will increase by 1 in the next time step
If a cell has a population of 4 and is adjacent to at least eight cells with a population of at least 4, that cell’s population will increase by 1 in the next time step
The residential population provides workers to the industrial and commercial zones, but each worker can only have one job
Industrial
If a cell has a population of 0, is adjacent to a powerline in the current time step, and there are at least 2 available workers, that cell’s population will increase by 1 in the next time step and the available workers are assigned to that job
If a cell has a population of 0, is adjacent to at least one cell with a population of at least 1, and there are at least 2 available workers, that cell’s population will increase by 1 in the next time step and the available workers are assigned to that job
If a cell has a population of 1, is adjacent to at least two cells with a population of at least 1, and there are at least 2 available workers, that cell’s population will increase by 1 in the next time step and the available workers are assigned to that job
If a cell has a population of 2, is adjacent to at least four cells with a population of at least 2, and there are at least 2 available workers, that cell’s population will increase by 1 in the next time step and the available workers are assigned to that job
A cell produces pollution equal to its population, and pollution spreads to all adjacent cells at a rate of one less unit of pollution per cell away from the source
The industrial population provides goods to the commercial zones, at a rate of one good per population, but each good can only be sold at one commercial cell
Commercial
If a cell has a population of 0, is adjacent to a powerline in the current time step, there is at least 1 available worker, and there is at least one available good, that cell’s population will increase by 1 in the next time step and the available worker and available good are assigned to that job
If a cell has a population of 0, is adjacent to at least one cell with a population of at least 1, there is at least 1 available worker, and there is at least one available good, that cell’s population will increase by 1 in the next time step and the available worker and available good are assigned to that job
If a cell has a population of 1, is adjacent to at least two cells with a population of at least 1, there is at least 1 available worker, and there is at least one available good, that cell’s population will increase by 1 in the next time step and the available worker and available good are assigned to that job
Output the final region state
Output the total, regional population for residential zones, industrial zones, and commercial zones
Output the final regional pollution state
Output the total pollution in the region
Prompt the user for the coordinates of some rectangular area of the region to analyze more closely
You must perform bounds checking to make sure the coordinates are within the bounds of the region, and re-prompt the user if their coordinates are outside the bounds
Output the total population for residential zones, industrial zones, and commercial zones within the area specified by the user
Output the total pollution within the area specified by the user
See the example output files for formatting of each of the outputs
Major functionality components must be constructed in some function, or across some functions, that are declared and defined outside of your main.c/main.cpp . Remember, function declarations must be stored in a header file, while definitions must be stored in a .c/.cpp file. You may have additional functions that support your major functionality component function.
Your code must be well commented.
Each group member should be performing regular commits to the GitLab repository on the Apollo server with meaningful commit messages. “Fixed bug” or “New code” are not meaningful, so try to be more specific about what was fixed or what was added.
Please do not commit the example input and output files to the remote server as that may cause a space issue on the server.
You must provide a .txt format README file which includes:
The names of all group members
Instructions on how to compile your program
Instructions on how to run your program
An indication on whether you implemented the bonus or not. By default, the TA’s will assume you did not attempt the bonus unless you indicate otherwise.
Additionally, you may write a makefile, but please specify if it needs any additional flags to function properly
The major functionality components are:
Reading in the configuration file and region file, and initializing the simulation
Residential zone functionality (i.e. data storage, rules, transformations)
Commercial zone functionality (i.e. data storage, rules, transformations)
Industrial zone functionality (i.e. data storage, rules, transformations)
Pollution functionality (i.e. data storage, rules, transformations)
Analysis of the region and desired area (i.e. outputs, totals)
The post Simulate growth of a City first appeared on Bessays.
Need help with your own assignment?
Our expert writers can help you apply everything you've just read — to your actual assignment.
Get Expert Help Now →