elevator  0.7
Симулятор пассажирского лифта
Passenger.h
См. документацию.
1 // Проект elevator
2 // (c) И.К. Марчевский, 2021-2022
3 
12 #pragma once
13 
17 enum class PassengerStatus {
18  waiting,
19  going,
20  arrived,
21  leaved
22 };
23 
28 {
30  size_t timeInit;
31 
34 
37 
40 
43 
46 
48  double pStartGoing;
49 };
50 
54 class Passenger
55 {
56  friend class Control;
57  friend class Elevator;
58 
59 private:
61  size_t id;
62 
64  PassengerProperties properties;
65 
67  size_t timeStart;
68 
70  size_t timeFinish;
71 
73  PassengerStatus status;
74 
75  size_t getTimeInit() const { return properties.timeInit; };
76  size_t getFloorDeparture() const { return properties.floorDeparture; };
77  size_t getFloorDestination() const { return properties.floorDestination; };
78  bool PerformInverseProbability(size_t curTime) const
79  {
80  const PassengerProperties& pr = properties;
81 
82  double curProb = pr.pInverseStartWaiting \
83  + (double)(curTime - pr.timeInit) / pr.criticalWaitTime * (pr.pInverseStopWaiting - pr.pInverseStartWaiting);
84 
85  double rnd = (double)rand() / (RAND_MAX + 1);
86 
87  return (rnd < curProb);
88  };
89 
90  bool PerformNoWaitingProbability() const
91  {
92  const PassengerProperties& pr = properties;
93  double rnd = (double)rand() / (RAND_MAX + 1);
94  return (rnd < pr.pStartGoing);
95  }
96 
97 public:
102  Passenger(size_t id_, const PassengerProperties& properties_)
103  : id(id_), properties(properties_), timeStart(-1), timeFinish(-1), status(PassengerStatus::waiting)
104  {};
105 
107  bool operator<(const Passenger& ps) const
108  {
109  return id < ps.id;
110  }
111 };
112 
Класс — кабина лифта
Definition: Elevator.h:79
double pStartGoing
Вероятность нажать кнопку "ход", не дожидаясь закрытия дверей
Definition: Passenger.h:48
Passenger(size_t id_, const PassengerProperties &properties_)
Инициализирующий конструктор
Definition: Passenger.h:102
Пассажир не дождался лифта и ушел
size_t timeInit
Время появления пассажира на этаже
Definition: Passenger.h:30
PassengerStatus
Статусы пассажиров (не может быть использовано напрямую в системе управления, внутренний параметр) ...
Definition: Passenger.h:17
size_t criticalWaitTime
Время ожидания, после которого пассажир уходит
Definition: Passenger.h:39
size_t floorDestination
Этаж, на который пассажир едет
Definition: Passenger.h:36
bool operator<(const Passenger &ps) const
Оператор сравнения для возможности сортировки пассажиров по порядковому номеру
Definition: Passenger.h:107
Пассажир успешно прибыл на нужный этаж
size_t floorDeparture
Этаж, с которого пассажир отправляется
Definition: Passenger.h:33
Класс — пассажир
Definition: Passenger.h:54
Параметры пассажиров
Definition: Passenger.h:27
открыты (лифт ожидает отправления)
double pInverseStopWaiting
Вероятность сесть в лифт, едущий в неверном направлении в конце ожидания
Definition: Passenger.h:45
double pInverseStartWaiting
Вероятность сесть в лифт, едущий в неверном направлении в начале ожидания
Definition: Passenger.h:42
Основной класс — симулятор пассажирского лифта
Definition: Control.h:25
Пассажир нажодится в лифте