blob: 38da2e078636b2e3c8f36cbb9e8d2bff2d23c57e (
plain) (
blame)
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
|
#include <iostream>
#include <random>
int rand(int min, int max) {
return rand() % max + min;
}
struct WaterMeter {
private:
double usedWater;
public:
WaterMeter() {
usedWater = 0.0;
}
void AddWater(double amount) {
usedWater += amount;
}
void Print() {
std::cout << usedWater;
}
};
struct Building {
private:
WaterMeter* meters;
unsigned size;
void free() {
delete[] meters;
}
void copyFrom(const Building& other) {
this->size = other.size;
this->meters = new WaterMeter[size];
for (int i = 0; i < size; i++) {
this->meters[i] = other.meters[i];
}
}
public:
Building(unsigned size) {
this->size = size;
meters = new WaterMeter[size];
}
Building() {
meters = nullptr;
size = 0;
}
~Building() {
free();
}
Building(const Building& other) {
copyFrom(other);
}
Building& operator=(const Building& other) {
if (this != &other) {
free();
copyFrom(other);
}
return *this;
}
void SimulateDay() {
for (int i = 0; i < size; i++) {
meters[i].AddWater(rand(0, 999) / 100.0);
}
}
void SimulateMonth() {
WaterMeter** reports = new WaterMeter*[5];
for (int i = 0; i < 5; i++) {
reports[i] = new WaterMeter[size];
}
for (int day = 0; day <= 30; day++) {
SimulateDay();
if (day % 5 == 0 && day > 0) {
unsigned reportIndex = day / 5 - 1;
for (int i = 0; i < size; i++) {
reports[reportIndex][i] = meters[i];
}
}
}
for (int meterI = 0; meterI < size; meterI++) {
for (int reportI = 0; reportI < 5; reportI++) {
reports[reportI][meterI].Print();
std::cout << " ";
}
std::cout << std::endl;
}
}
};
|