c++ Programming .

profileSadhana
simulationproject.docx

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

o Do NOT hardcode the filename into your program o Thefirstlinewillprovidethenameofthefilecontainingtheregionlayout(DoNOTprompttheuserfor

this filename) o The second line will provide the maximum amount of time steps the simulation can take o Thethirdlinewillprovidetherefreshrateofhowoftenthecurrentstateoftheregionshouldbeoutput

to the user during simulation • Your system should perform the following operations:

o Read in and store the simulation configuration information o 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

o 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

o Simulate the development of the city over time

· §  The simulation should halt when there is no change between two, consecutive time stepsor

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 inthe 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:

1. Commercial zoned cells are prioritized over industrial zoned cells ones

2. 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)

3. The growth of zoned cells with greater total adjacent populations is prioritized over

zoned cells with smaller total adjacent populations

4. 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

5. 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

o o o o o

o

o

· 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

Outputthetotalpopulationforresidentialzones,industrialzones,andcommercialzoneswithinthe area specified by the user Output the total pollution within the area specified by the user example output files for formatting of each of the outputs

· See the

· 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 declarationsmust 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:

o The names of all group members o Instructions on how to compile your program o Instructions on how to run your program o Anindicationonwhetheryouimplementedthebonusornot.Bydefault,theTA’swillassumeyoudid

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

Each student must be accountable for one or more major functionality components and may not swap after they sign up for a component barring an exceptional circumstance. Failure to be accountable for any major functionality component will result in a 0 for the coding portions of the project (milestone submission and/or final submission). Keep in mind that some components build on others, so be careful about who takes ownership of which pieces and manage your time to avoid a crunch near the due date. Also, the group should strive to balance the work across all members. The major functionality components are:

1. Reading in the configuration file and region file, and initializing the simulation

2. Residential zone functionality (i.e. data storage, rules, transformations)

3. Commercial zone functionality (i.e. data storage, rules, transformations)

4. Industrial zone functionality (i.e. data storage, rules, transformations)

5. Pollution functionality (i.e. data storage, rules, transformations)

6. Analysis of the region and desired area (i.e. outputs, totals)