Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

#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;
}