-
Notifications
You must be signed in to change notification settings - Fork 0
/
output.cpp
232 lines (206 loc) · 7.6 KB
/
output.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
#include "output.h"
void printOutput(list<Zone> &mainList){
//get max row and col
int row=0;
int col=0;
for( auto it : mainList){
if(it.Getx() > col){
col= it.Getx();
}
if(it.Gety() > row){
row= it.Gety();
}
}
//cout<<row<<endl;
//cout<<col<<endl;
//create graph
vector<vector<string>> graph(row+1, vector<string>(col+1));
//get zonetype, if pop in that zone type is above zero then convert pop to string and put in graph in place of zone type
for(auto it = mainList.begin(); it != mainList.end(); ++it){
if(it->GetZoneType() == 'R'|| it->GetZoneType() == 'I' || it->GetZoneType() == 'C'){
if(it->GetPop() > 0){
graph[it->Gety()][it->Getx()]= to_string(it->GetPop());
}else{
graph[it->Gety()][it->Getx()]= it->GetZoneType();
}}else{
graph[it->Gety()][it->Getx()]= it->GetZoneType();
}
}
//print the graph
for(int i= 0; i<= row; ++i){
for(int j= 0; j<= col; ++j){
if(graph[i][j] =="R" || graph[i][j] == "I" || graph[i][j] == "C" || graph[i][j] == "T" || graph[i][j] == "-" || graph[i][j] == "#" || graph[i][j] == "P" || graph[i][j] == "1" || graph [i][j] == "2" || graph[i][j] == "3" || graph[i][j] == "4" || graph[i][j] == "5" || graph[i][j] == "6" || graph[i][j] == "8" || graph[i][j] == "9" || graph[i][j] == "10"){
cout<<graph[i][j]<<" ";
}
else{
cout<<" ";
}
}
cout<<endl;
}
}
void printArea(list<Zone> &mainList){
//initializing coordinatesm for area
int xcoord1=0;
int ycoord1=0;
int xcoord2=0;
int ycoord2=0;
//get row and col
int row=0;
int col=0;
for( auto it : mainList){
if(it.Getx() > col){
col= it.Getx();
}
if(it.Gety() > row){
row= it.Gety();
}
}
//ask user for coords
for(int i=0; i<5; ++i){
//cout the area for input from user
cout<<"What rectangular area would you like printed? "<<endl;
cout<<"Please enter the x-coordinate for top left corner of area: ";
cin>>xcoord1;
cout<<"Please enter the y-coordinate for top left corner of area: ";
cin>>ycoord1;
//cout<<endl;
cout<<"Please enter the x-coordinate for bottom right corner of area: ";
cin>>xcoord2;
cout<<"Please enter the y-coordinate for bottom right corner of area: ";
cin>>ycoord2;
if(xcoord1>row || ycoord1>col || xcoord2> row|| ycoord2>col){
cout<<"Coordinates not valid, please try again"<<endl;
}else{
break;
}
}
//create graph
string graph[row+1][col+1];
//get zonetype, if pop in that zone type is above zero then convert pop to string and put in graph in place of zone type
for(auto it = mainList.begin(); it != mainList.end(); ++it){
if(it->GetZoneType() == 'R'|| it->GetZoneType() == 'I' || it->GetZoneType() == 'C'){
if(it->GetPop() > 0){
graph[it->Gety()][it->Getx()]= to_string(it->GetPop());
}else{
graph[it->Gety()][it->Getx()]= it->GetZoneType();
}}else{
graph[it->Gety()][it->Getx()]= it->GetZoneType();
}
}
//print graph
for(int i= ycoord1; i<=ycoord2; ++i){
for(int j=xcoord1; j<= xcoord2; ++j){
if(graph[i][j] =="R" || graph[i][j] == "I" || graph[i][j] == "C" || graph[i][j] == "T" || graph[i][j] == "-" || graph[i][j] == "#" || graph[i][j] == "P" || graph[i][j] == "1" || graph [i][j] == "2" || graph[i][j] == "3" || graph[i][j] == "4"|| graph[i][j] == "5" || graph[i][j] == "6" || graph[i][j] == "8" || graph[i][j] == "9" || graph[i][j] == "10"){
cout<<graph[i][j]<<" ";
}
else{
cout<<" ";
}
}
cout<<endl;
}
//initalize the pops and the bounds
int resPop=0;
int comPop=0;
int indPop=0;
int x=0;
int y=0;
//get pops inside of bounds from the main list and add to pops for later output
for(auto it = mainList.begin(); it != mainList.end(); ++it){
x= it->Getx();
y= it->Gety();
if(x >= xcoord1 && x <= xcoord2 && y >= ycoord1 && y <= ycoord2){
if(it->GetZoneType() == 'R'&& it->GetPop()> 0){
resPop=resPop+it->GetPop();
}else if(it->GetZoneType() == 'C'&& it->GetPop()> 0){
comPop=comPop + it->GetPop();
}else if(it->GetZoneType() == 'I'&& it->GetPop()> 0){
indPop=indPop + it->GetPop();
}else{}
}
}
//print pops
cout<<"Populations for specific area:"<<endl;
cout<<"Residental Zone: "<<resPop<<endl;
cout<<"Industrial Zone: "<<indPop<<endl;
cout<<"Commercial Zone: "<<comPop<<endl;
}
void printPop(list<Zone> &mainList){
//initalize pops
int resPop=0;
int comPop=0;
int indPop=0;
//get pops for each zone type to add up by iterating through mainlist
for(auto it = mainList.begin(); it != mainList.end(); ++it){
if(it->GetZoneType() == 'R'&& it->GetPop()> 0){
resPop=resPop+it->GetPop();
}else if(it->GetZoneType() == 'C'&& it->GetPop()> 0){
comPop=comPop + it->GetPop();
}else if(it->GetZoneType() == 'I'&& it->GetPop()> 0){
indPop=indPop + it->GetPop();
}else{}
}
//print pops
cout<<"Populations for specific area:"<<endl;
cout<<"Residental Zone: "<<resPop<<endl;
cout<<"Industrial Zone: "<<indPop<<endl;
cout<<"Commercial Zone: "<<comPop<<endl;
}
/*void printPollution(list<Zone>& mainList) {
int row = 0;
int col = 0;
cout << "Final Regional Pollution State:" << endl;
// Assuming you have a similar setup for rows and columns as in printOutput
for(int i = 0; i <= row; ++i) {
for(int j = 0; j <= col; ++j) {
auto it = find_if(mainList.begin(), mainList.end(), [i, j](Zone& zone) {
return zone.Getx() == j && zone.Gety() == i;
});
if (it != mainList.end()) {
cout << it->getPollutionLevel() << " ";
} else {
cout << "0 "; // Assuming zero pollution for non-industrial zones or empty spaces
}
}
cout << endl;
}
}*/
// output.cpp
void printPollution(list<Zone> &mainList) {
//get max row and col
int row=0;
int col=0;
for( auto it : mainList){
if(it.Getx() > col){
col= it.Getx();
}
if(it.Gety() > row){
row= it.Gety();
}
}
// Create a pollution map
int pollutionMap[row+1][col+1];
// Initialize pollution map with 0
for (int i = 0; i <= row; i++) {
for (int j = 0; j <= col; j++) {
pollutionMap[i][j] = 0;
}
}
// Update pollution map based on zone pollution levels
for (auto it = mainList.begin(); it != mainList.end(); ++it) {
pollutionMap[it->Gety()][it->Getx()] = it->getPollutionLevel();
}
// Print the Pollution Map
cout << "Pollution Map:" << endl;
for (int i = 0; i <= row; i++) {
for (int j = 0; j <= col; j++) {
if (pollutionMap[i][j] == 0) {
cout << " "; // Representation for no pollution
} else {
cout << pollutionMap[i][j] << " ";
}
}
cout << endl;
}
}