#include <Elevator.h> #include <People.h> #include <iostream> #include <string>
ID: 3837820 • Letter: #
Question
#include <Elevator.h>
#include <People.h>
#include <iostream>
#include <string>
#include <array>
#include <vector>
#include <math.h>
#include <ctime>
using namespace std;
People::People() {
ID = "P1A3D5";
arrival_floor = 3;
destination_floor = 5;
}
People::People(string person_ID, int arrival, int destination) {
ID = person_ID;
arrival_floor = arrival;
destination_floor = destination;
}
vector<pair<string, int>> People::assign_elevator(Elevator e1, Elevator e2, Elevator e3) {
srand(time(NULL));
array<int, 3> temp = { e1.displacement, e2.displacement , e3.displacement };
int temp2;
for (int i = 0; i < temp.size(); i++) {
for (int j = i + 1; j < temp.size(); j++) {
if (temp[i] > temp[j]) {
temp2 = temp[i];
temp[i] = temp[j];
temp[j] = temp2;
}
}
}
if (temp[0] == temp[1] == temp[2]) {
int n1 = rand() % 3;
switch (n1) {
case 0:
std::cout << ID << " assigned to " << e1.elevator_ID << endl;
signal = 1;
e1.people++;
e1.elevator_stops.push_back(make_pair(ID, destination_floor));
e1.elevator_stops.push_back(make_pair(ID, arrival_floor));
return e1.elevator_stops;
case 1:
std::cout << ID << " assigned to " << e2.elevator_ID << endl;
signal = 2;
e2.people++;
e2.elevator_stops.push_back(make_pair(ID, destination_floor));
e2.elevator_stops.push_back(make_pair(ID, arrival_floor));
return e2.elevator_stops;
case 2:
std::cout << ID << " assigned to " << e3.elevator_ID << endl;
signal = 3;
e3.people++;
e3.elevator_stops.push_back(make_pair(ID, destination_floor));
e3.elevator_stops.push_back(make_pair(ID, arrival_floor));
return e3.elevator_stops;
}
}
else {
if (temp[0] == e1.displacement) {
std::cout << ID << " assigned to " << e1.elevator_ID << endl;
signal = 1;
e1.people++;
e1.elevator_stops.push_back(make_pair(ID, destination_floor));
e1.elevator_stops.push_back(make_pair(ID, arrival_floor));
return e1.elevator_stops;
}
else if (temp[0] == e2.displacement) {
std::cout << ID << " assigned to " << e2.elevator_ID << endl;
signal = 2;
e2.people++;
e2.elevator_stops.push_back(make_pair(ID, destination_floor));
e2.elevator_stops.push_back(make_pair(ID, arrival_floor));
return e2.elevator_stops;
}
else {
std::cout << ID << " assigned to " << e3.elevator_ID << endl;
signal = 3;
e3.people++;
e3.elevator_stops.push_back(make_pair(ID, destination_floor));
e3.elevator_stops.push_back(make_pair(ID, arrival_floor));
return e3.elevator_stops;
}
}
}
Elevator::Elevator() {
people = 0;
current_floor = 1;
states = 0;
displacement = 0;
}
Elevator::Elevator(string ID, int current) {
people = 0;
current_floor = current;
states = 0;
displacement = 0;
elevator_ID = ID;
}
void Elevator::updating2(vector<pair<string, int>> myvector, People p1, Elevator& e2, Elevator& e3) {
if (p1.signal == 1) {
elevator_stops = myvector;
}
else if (p1.signal == 2) {
e2.elevator_stops = myvector;
}
else {
e3.elevator_stops = myvector;
}
}
void Elevator::find_displacement(People p1) {
if (elevator_stops.size() == 0) {
displacement = abs(current_floor - p1.arrival_floor);
}
switch (states) {
case -1:
if (p1.arrival_floor < elevator_stops.back().second)
displacement = abs(current_floor - p1.arrival_floor) + 1;
else if (p1.arrival_floor > elevator_stops.back().second)
displacement = abs(current_floor - elevator_stops.back().second) + abs(p1.arrival_floor - elevator_stops.back().second) + 1;
case 1:
if (p1.arrival_floor < elevator_stops.back().second)
displacement = abs(elevator_stops.back().second - current_floor) + abs(elevator_stops.back().second - p1.arrival_floor) + 1;
else if (p1.arrival_floor > elevator_stops.back().second)
displacement = abs(p1.arrival_floor - current_floor) + 1;
}
if (p1.arrival_floor == current_floor)
displacement = 1;
}
void Elevator::goingup() {
states = 1;
current_floor++;
std::cout << elevator_ID << " going up" << endl;
}
void Elevator::goingdown() {
states = -1;
current_floor--;
std::cout << elevator_ID << " goind down" << endl;
}
void Elevator::arrival() {
std::cout << elevator_ID << " arrive at arrival floor" << endl;;
std::cout << elevator_stops.back().first << " get on the " << elevator_ID << endl;
elevator_stops.pop_back();
}
void Elevator::destination() {
people--;
std::cout << elevator_ID << " arrive at destination floor" << endl;
std::cout << elevator_stops.back().first << " get off from the " << elevator_ID << endl;
elevator_stops.pop_back();
}
void Elevator::action() {
if (elevator_stops.size() == 0) {
states = 0;
cout << elevator_ID << " is not operating now" << endl;
}
else {
if (current_floor < elevator_stops.back().second)
goingup();
else if (current_floor > elevator_stops.back().second)
goingdown();
else if ((current_floor == elevator_stops.back().second) && ((elevator_stops.size() % 2) == 0))
arrival();
else
destination();
}
}
int main(void) {
vector<pair<string, int>> temp_vector;
Elevator e1("Elevator 1", 1);
Elevator e2("Elevator 2", 6);
Elevator e3("Elevator 3", 8);
People p1("P1A3D6", 3, 6);
People p2("P2A3D5", 3, 5);
e1.find_displacement(p1);
e2.find_displacement(p1);
e3.find_displacement(p1);
temp_vector = p1.assign_elevator(e1, e2, e3);
e1.updating2(temp_vector, p1, e2, e3);
temp_vector = p2.assign_elevator(e1, e2, e3);
e1.updating2(temp_vector, p2, e2, e3);
for(int i = 0; i < 20; i++)
e1.action();
std::system("pause");
return 0;
}
please write all comment information in this c++ code
Explanation / Answer
#include <Elevator.h> //include the elevator and peple header files
#include <People.h>
#include <iostream>
#include <string>
#include <array>
#include <vector>
#include <math.h>
#include <ctime>
using namespace std;
//defining the functions which have been declared in the header file
//constructor which initialise ID,arrival_floor,destination_floor values to P1A3D5,3,5
People::People() {
ID = "P1A3D5";
arrival_floor = 3;
destination_floor = 5;
}
//constructor overload where we intialise with user inputs
People::People(string person_ID, int arrival, int destination) {
ID = person_ID;
arrival_floor = arrival;
destination_floor = destination;
}
//assign_elevator method which returns a vector ,input params are elevator objects
vector<pair<string, int>> People::assign_elevator(Elevator e1, Elevator e2, Elevator e3) {
srand(time(NULL));
array<int, 3> temp = { e1.displacement, e2.displacement , e3.displacement }; //creating temp vector which holds elevator displacements
int temp2;
//sorting the displacements
for (int i = 0; i < temp.size(); i++) {
for (int j = i + 1; j < temp.size(); j++) {
if (temp[i] > temp[j]) {
temp2 = temp[i];
temp[i] = temp[j];
temp[j] = temp2;
}
}
}
//if 3 displacements are equal,
if (temp[0] == temp[1] == temp[2]) {
int n1 = rand() % 3;//generate a random number in range of 0 to 3
switch (n1) { //perform below for each case
case 0:
std::cout << ID << " assigned to " << e1.elevator_ID << endl;
signal = 1; //make signal value as 1.
e1.people++;
e1.elevator_stops.push_back(make_pair(ID, destination_floor));//add the Elevator ID,which floor it has to be moved to for that partclr elevator
e1.elevator_stops.push_back(make_pair(ID, arrival_floor));//add arrival floor
return e1.elevator_stops;//return the stop status of the elevator
case 1:
std::cout << ID << " assigned to " << e2.elevator_ID << endl;
signal = 2; //make signal value as 2.
e2.people++;
e2.elevator_stops.push_back(make_pair(ID, destination_floor));
e2.elevator_stops.push_back(make_pair(ID, arrival_floor));
return e2.elevator_stops;
case 2:
std::cout << ID << " assigned to " << e3.elevator_ID << endl;
signal = 3; //make signal value as 3
e3.people++;
e3.elevator_stops.push_back(make_pair(ID, destination_floor));
e3.elevator_stops.push_back(make_pair(ID, arrival_floor));
return e3.elevator_stops;
}
}
//check next condiion if first elevator object displacement is same as e1 value perform below operations
else {
if (temp[0] == e1.displacement) {
std::cout << ID << " assigned to " << e1.elevator_ID << endl;
signal = 1;
e1.people++;
e1.elevator_stops.push_back(make_pair(ID, destination_floor));
e1.elevator_stops.push_back(make_pair(ID, arrival_floor));
return e1.elevator_stops;
}
else if (temp[0] == e2.displacement) {
std::cout << ID << " assigned to " << e2.elevator_ID << endl;
signal = 2;
e2.people++;
e2.elevator_stops.push_back(make_pair(ID, destination_floor));
e2.elevator_stops.push_back(make_pair(ID, arrival_floor));
return e2.elevator_stops;
}
else {
std::cout << ID << " assigned to " << e3.elevator_ID << endl;
signal = 3;
e3.people++;
e3.elevator_stops.push_back(make_pair(ID, destination_floor));
e3.elevator_stops.push_back(make_pair(ID, arrival_floor));
return e3.elevator_stops;
}
}
}
//elevator default constructor which initialise vslues to 0
Elevator::Elevator() {
people = 0;
current_floor = 1;
states = 0;
displacement = 0;
}
//constructor which initialise with input parameters
Elevator::Elevator(string ID, int current) {
people = 0;
current_floor = current;
states = 0;
displacement = 0;
elevator_ID = ID;
}
//updating2 function for each signal value
void Elevator::updating2(vector<pair<string, int>> myvector, People p1, Elevator& e2, Elevator& e3) {
if (p1.signal == 1) {
elevator_stops = myvector;
}
else if (p1.signal == 2) {
e2.elevator_stops = myvector;
}
else {
e3.elevator_stops = myvector;
}
}
//function to find displacement of the people in elevator
void Elevator::find_displacement(People p1) {
//if elevator is empty,dispalcement will be absolute value f differece of current and arrivalfloor
if (elevator_stops.size() == 0) {
displacement = abs(current_floor - p1.arrival_floor);
}
//finnd displacement based o the pople states
switch (states) {
case -1:
if (p1.arrival_floor < elevator_stops.back().second)
displacement = abs(current_floor - p1.arrival_floor) + 1;
else if (p1.arrival_floor > elevator_stops.back().second)
displacement = abs(current_floor - elevator_stops.back().second) + abs(p1.arrival_floor - elevator_stops.back().second) + 1;
case 1:
if (p1.arrival_floor < elevator_stops.back().second)
displacement = abs(elevator_stops.back().second - current_floor) + abs(elevator_stops.back().second - p1.arrival_floor) + 1;
else if (p1.arrival_floor > elevator_stops.back().second)
displacement = abs(p1.arrival_floor - current_floor) + 1;
}
//if we havereached arrival floor dispalcement is equal to 1
if (p1.arrival_floor == current_floor)
displacement = 1;
}
//function for going up
void Elevator::goingup() {
states = 1;
current_floor++; //increment the current_floor value to 1
std::cout << elevator_ID << " going up" << endl;
}
//funtcion for going down
void Elevator::goingdown() {
states = -1;//state will be -1
current_floor--;//decrement current_floor value
std::cout << elevator_ID << " goind down" << endl;
}
void Elevator::arrival() {
std::cout << elevator_ID << " arrive at arrival floor" << endl;;
std::cout << elevator_stops.back().first << " get on the " << elevator_ID << endl; //get the first value from elevator_stops
elevator_stops.pop_back(); //pop back the elevator
}
void Elevator::destination() {
people--;//reduce the people count to 1
std::cout << elevator_ID << " arrive at destination floor" << endl;
std::cout << elevator_stops.back().first << " get off from the " << elevator_ID << endl; //print the destination value
elevator_stops.pop_back();
}
void Elevator::action() {
if (elevator_stops.size() == 0) {//elevatorsize and states 0
states = 0;
cout << elevator_ID << " is not operating now" << endl;//if above conditions true print not working
}
else {
if (current_floor < elevator_stops.back().second)//if cuurent floor value is less than the elevator second value,go up
goingup();
else if (current_floor > elevator_stops.back().second)//else ig greater go down
goingdown();
else if ((current_floor == elevator_stops.back().second) && ((elevator_stops.size() % 2) == 0))//if the cuurent floor is same as second value then arrived
arrival();
else
destination();
}
}
int main(void) {
vector<pair<string, int>> temp_vector;//create a vector temp_vector
//create elevator objects with input parameter values as below
Elevator e1("Elevator 1", 1);
Elevator e2("Elevator 2", 6);
Elevator e3("Elevator 3", 8);
//create people objects
People p1("P1A3D6", 3, 6);
People p2("P2A3D5", 3, 5);
//find displacement for elevators with p1 object
e1.find_displacement(p1);
e2.find_displacement(p1);
e3.find_displacement(p1);
//populate temp_vector by assigning elevators
temp_vector = p1.assign_elevator(e1, e2, e3);
update elevator 1 with p1 and other two elevators
e1.updating2(temp_vector, p1, e2, e3);
//update with p2
temp_vector = p2.assign_elevator(e1, e2, e3);
e1.updating2(temp_vector, p2, e2, e3);
//perform action for 20 times
for(int i = 0; i < 20; i++)
e1.action();
std::system("pause");
return 0;
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.