-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain_noop.cpp
More file actions
73 lines (59 loc) · 1.51 KB
/
main_noop.cpp
File metadata and controls
73 lines (59 loc) · 1.51 KB
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
#include <iostream>
enum class TState {
on, off, broken
};
class FSM {
private:
TState curr_state = TState::off;
int voltage = 0;
public:
void update();
void set_voltage(int voltage) { this->voltage = voltage; };
};
void FSM::update() {
TState next_state = curr_state;
switch (curr_state) {
case TState::on:
if (voltage > 240)
next_state = TState::broken;
else if (voltage < 240)
next_state = TState::off;
break;
case TState::off:
if (voltage > 240)
next_state = TState::broken;
else if (voltage == 240)
next_state = TState::on;
break;
case TState::broken:
next_state = TState::broken;
break;
}
curr_state = next_state;
switch (curr_state) {
case TState::on:
std::cout << "currently on" << std::endl;
break;
case TState::off:
std::cout << "currently off" << std::endl;
break;
case TState::broken:
std::cout << "lamp is broken" << std::endl;
break;
}
}
int main() {
FSM bulb;
bulb.update();
bulb.set_voltage(240);
bulb.update(); // on
bulb.update(); // still on
bulb.set_voltage(0);
bulb.update(); // off
bulb.set_voltage(9001);
bulb.update(); // broken
bulb.set_voltage(0);
bulb.update(); // still broken
bulb.set_voltage(240);
bulb.update(); // still broken
}