Elevator.cpp


/////// classes.cpp - header file for main.cpp ///////////////////


#include <iostream>

using namespace std;

int delay1;

//int delay2;

struct user;



 


class elevator1;

class elavator2;

void elevator_reinitializer_e1_afternoon(int req_time,int current_floor);

void merge(int* arr, int first, int mid, int last){

    int b[50];

    int i,j,k;

    i=first;

    j=mid+1;

    k=first;

    while(i<=mid && j<=last){

        if (arr[i]<=arr[j]){

            b[k++]=arr[i++];

        }

        else

            b[k++]=arr[j++];

    }

    if(i>mid){

        while(j<=last)

            b[k++]=arr[j++];

    }

    else {

        while(i<=mid)

            b[k++]=arr[i++];

    }

    for (int i=first;i<=last;i++){

        arr[i]=b[i];

    }

}


void mergesort(int *arr, int first, int last){


    int mid;


    if(first<last){


        mid=(first+last)/2;


        mergesort(arr,first,mid);


        mergesort(arr,mid+1,last);


        merge(arr,first,mid,last);


    }


}



class elevator1{

    public:

    int request_floor;

    int current_floor;

    bool available;

    int req_time_hour;

    

    elevator1(int request_floor,int current_floor,bool available,int req_time_hour){

        this->request_floor=request_floor;

        this->current_floor=current_floor;

        this->available=available;

        this->req_time_hour=req_time_hour;

    }

    #pragma GCC diagnostic push

    #pragma GCC diagnostic ignored "-Wreturn-type"

    int elevator_movement(int request_floor,int current_floor,bool  available,int req_time_hour ){

    if(available){

        available=false;

        delay1=0;

        

    //cout<<endl;

   // cout<<"Elevator 1 is working"<<endl;

    cout<<"{";

    if(request_floor>current_floor){

         

        for(int i=current_floor;i<request_floor;i++){

           

            cout<<i<<",";

            delay1=delay1+5;

        }

        delay1=delay1+5;


        cout<<request_floor;

    }

    else if(request_floor<current_floor){

        for(int i=current_floor;i>request_floor;i--){

            cout<<i<<",";

            delay1=delay1+5;

        }

        delay1=delay1+5;

        cout<<request_floor;

    }


    //request_floor=current_floor;

    current_floor=request_floor;

   //cout<<request_floor<<endl;


    if(request_floor==current_floor){


        cout<<"}";

        cout<<endl;

               //cout<<endl<<"You have reached the desired floor"<<endl;

        }

    if(delay1>0){

        return delay1-5;

    }

    else return 0;

    

    }


   

    }

};

#pragma GCC diagnostic pop

struct user{

    public:

    int request_floor;

    int current_floor;

    int req_time_hour;

    

    user(int current_floor,int request_floor,int req_time_hour ){

        this->request_floor = request_floor;

        this->current_floor=current_floor;

        this->req_time_hour=req_time_hour;

    }

};

      


/////////////////////  main.cpp ////////////////////////

 #include <iostream>

using namespace std;

#include "classes1(floor_partition).cpp"


user u1(2,15,14);

user u2(6,12,19);

user u3(15,5,19);

user u4(13,14,19);

user u5(3,1,14);

elevator1 e1(1,1,1,1);

elevator1 e2(1,1,1,1);

const int n = 5;

 int count1=1,count2=1,count3=1,count4=1,count5=1;

int count=1;

int counter=1;


int arr[n]={u1.req_time_hour,u2.req_time_hour,u3.req_time_hour,u4.req_time_hour,u5.req_time_hour};

int request_floor_array[n];

int current_floor_array[n];

int task_sorter(){ 

   

    mergesort(arr, 0, n-1);

    return *arr;

}


void requests_sorter(){

    int count_1=1,count_2=1,count_3=1,count_4=1,count_5=1;

    for(int i=0;i<n;i++){

         if(u1.req_time_hour==arr[i]&&count_1==1){

             request_floor_array[i]=u1.request_floor;

             count_1=count_1-1;

         }

         else if(u2.req_time_hour==arr[i]&&count_2==1){

             request_floor_array[i]=u2.request_floor;

             count_2=count_2-1;

         }

         else if(u3.req_time_hour==arr[i]&&count_3==1){

             request_floor_array[i]=u3.request_floor;

             count_3=count_3-1;

         }

         else if(u4.req_time_hour==arr[i]&&count_4==1){

             request_floor_array[i]=u4.request_floor;

             count_4=count_4-1;

         }

         else if(u5.req_time_hour==arr[i]&&count_5==1){

             request_floor_array[i]=u5.request_floor;

             count_5=count_5-1;

         }


    }

}

void current_floor_sorter(){

    int count_1=1,count_2=1,count_3=1,count_4=1,count_5=1;

    for(int i=0;i<n;i++){

         if(u1.req_time_hour==arr[i]&&count_1==1){

             current_floor_array[i]=u1.current_floor;

             count_1=count_1-1;

         }

         else if(u2.req_time_hour==arr[i]&&count_2==1){

             current_floor_array[i]=u2.current_floor;

             count_2=count_2-1;

         }

         else if(u3.req_time_hour==arr[i]&&count_3==1){

             current_floor_array[i]=u3.current_floor;

             count_3=count_3-1;

         }

         else if(u4.req_time_hour==arr[i]&&count_4==1){

             current_floor_array[i]=u4.current_floor;

             count_4=count_4-1;

         }

         else if(u5.req_time_hour==arr[i]&&count_5==1){

             current_floor_array[i]=u5.current_floor;

             count_5=count_5-1;

         }


    }

}



void order_decider(){

    int wait_time;

    int user_on_elevator_time;

    int reinitialization_time;

    int total_wait_time=0;

    int total_user_on_elevator_time=0;

    int total_reinitialization_time=0;

    int total_time=0;

    e1.current_floor=5;

    e2.current_floor=10;

    int i=0;

    for(int j=0;j<n;j++){

    while( current_floor_array[i]<=5&&current_floor_array[i]>=0&&i<n){

    for(;i<n-1;i++){      

            cout<<"Elevator 1 is working now \n Going to current floor of next user\n ";

            wait_time=e1.elevator_movement(current_floor_array[i],e1.current_floor,1,arr[i]);

            total_wait_time=total_wait_time+wait_time;

            cout<<"user waits for "<<wait_time<<endl;

            e1.current_floor=current_floor_array[i];

            cout<<"Elevator picked up the user\n";

            user_on_elevator_time=e1.elevator_movement(request_floor_array[i],current_floor_array[i],1,arr[i]);

            e1.current_floor=request_floor_array[i];

            cout<<"User reached destination floor\n";

            cout<<"User used elevator for "<< user_on_elevator_time<<endl;

            total_user_on_elevator_time=total_user_on_elevator_time+user_on_elevator_time;

            if(arr[i+1]!=arr[i]){

                cout<<"No more request at this time so reinitialize at floor 5\n";

                reinitialization_time=e1.elevator_movement(5,request_floor_array[i],1,arr[i]);

                e1.current_floor=5;

                cout<<"Time taken to reinitialize is "<<reinitialization_time<<endl;

                total_reinitialization_time=total_reinitialization_time+reinitialization_time;

                

                

            }

            else if(current_floor_array[i+1]>5 && arr[i]==arr[i+1]){

                cout<<"No more request at this time so reinitialize at floor 5\n";

                reinitialization_time=e1.elevator_movement(5,request_floor_array[i],1,arr[i]);

                e1.current_floor=5;

                cout<<"Time taken to reinitialize is "<<reinitialization_time<<endl;

                total_reinitialization_time=total_reinitialization_time+reinitialization_time;

                break;

            }

            else {

            if (arr[i+1]==arr[i]&&i!=n-2){

                cout<<"Checking next request at the time and going to next user\n";

                e1.current_floor=request_floor_array[i];

                wait_time=e1.elevator_movement(current_floor_array[i+1],request_floor_array[i],1,arr[i]);

                e1.current_floor=current_floor_array[i+1];

                cout<<"wait time for user is "<<wait_time<<endl;

                total_wait_time=total_wait_time+wait_time;

                

            }

            }

        }

        i++;

        

        

    if(arr[n-1]==arr[n-2]&&i==n){

       // cout<<i<<"hello"<<endl;

        if(current_floor_array[i-1]>5){

                

                break;

            }

        else {    

            if(current_floor_array[i-2]>=10){

        e1.current_floor=5;

        cout<<"Checking next request at the time and going to next user\n";

        wait_time=e1.elevator_movement(current_floor_array[n-1],e1.current_floor,1,arr[n-1]);

        cout<<"wait time for user is "<<wait_time<<endl;

        total_wait_time=total_wait_time+wait_time;

        e1.current_floor=current_floor_array[n-1];

        cout<<"Elevator picked up the user\n";

        user_on_elevator_time=e1.elevator_movement(request_floor_array[n-1],current_floor_array[n-1],1,arr[n-1]);

        cout<<"User used elevator for "<< user_on_elevator_time<<endl;

        total_user_on_elevator_time=total_user_on_elevator_time+user_on_elevator_time;

        e1.current_floor=request_floor_array[n-1];

        cout<<"No more request so initialize at floor 5\n";

        reinitialization_time=e1.elevator_movement(5,request_floor_array[n-1],1,arr[n-1]);

        e1.current_floor=5;

        cout<<"Time taken to reinitialize is "<<reinitialization_time<<endl;

        total_reinitialization_time=total_reinitialization_time+reinitialization_time;

            }

        else{

        e1.current_floor=request_floor_array[i];

        cout<<"Checking next request at the time and going to next user\n";

        wait_time=e1.elevator_movement(current_floor_array[n-1],request_floor_array[n-2],1,arr[n-1]);

        e1.current_floor=current_floor_array[n-1];

        total_wait_time=total_wait_time+wait_time;

        cout<<"user waits for "<<wait_time<<endl;

        cout<<"Elevator picked up the user\n";

        user_on_elevator_time=e1.elevator_movement(request_floor_array[n-1],current_floor_array[n-1],1,arr[n-1]);

        e1.current_floor=request_floor_array[n-1];

        cout<<"No more request so initialize at floor 5\n";

        cout<<"User used elevator for "<< user_on_elevator_time<<endl;

        total_user_on_elevator_time=total_user_on_elevator_time+user_on_elevator_time;

        reinitialization_time=e1.elevator_movement(5,request_floor_array[n-1],1,arr[n-1]);

        e1.current_floor=5;

        cout<<"Time taken to reinitialize is "<<reinitialization_time<<endl;

        total_reinitialization_time=total_reinitialization_time+reinitialization_time;

        }

        }

    }

    else if(i==n){

        if(current_floor_array[n-1]>5){

                

                break;

            }

        else {    

        cout<<"No more request so initialize at floor 5\n";

        reinitialization_time=e1.elevator_movement(5,request_floor_array[n-2],1,arr[n-2]);

        e1.current_floor=5;

        cout<<"Time taken to reinitialize is "<<reinitialization_time<<endl;

        total_reinitialization_time=total_reinitialization_time+reinitialization_time;

        cout<<"Elevator 1 working to pick next user\n";

        wait_time=e1.elevator_movement(current_floor_array[n-1],5,1,arr[n-1]);

        e1.current_floor=current_floor_array[n-1];

        total_wait_time=total_wait_time+wait_time;

        cout<<"user waits for "<<wait_time<<endl;

        cout<<"Elevator picked up the user\n";

        user_on_elevator_time=e1.elevator_movement(request_floor_array[n-1],current_floor_array[n-1],1,arr[n-1]);

        e1.current_floor=request_floor_array[n-1];

        cout<<"User used elevator for "<< user_on_elevator_time<<endl;

        total_user_on_elevator_time=total_user_on_elevator_time+user_on_elevator_time;

        cout<<"No more request so initialize at floor 5\n";

        reinitialization_time=e1.elevator_movement(5,request_floor_array[n-1],1,arr[n-1]);

        e1.current_floor=5;

        cout<<"Time taken to reinitialize is "<<reinitialization_time<<endl;

        total_reinitialization_time=total_reinitialization_time+reinitialization_time;


        }

        

    }    

    }


    //

   while( current_floor_array[i]<=15&&current_floor_array[i]>=10&&i<n){

    for(;i<n-1;i++){      

            cout<<"Elevator 2 is working now \n Going to current floor of next user\n ";

            wait_time=e2.elevator_movement(current_floor_array[i],e2.current_floor,1,arr[i]);

            total_wait_time=total_wait_time+wait_time;

            cout<<"user waits for "<<wait_time<<endl;

            e2.current_floor=current_floor_array[i];

            cout<<"Elevator picked up the user\n";

            user_on_elevator_time=e2.elevator_movement(request_floor_array[i],current_floor_array[i],1,arr[i]);

            e2.current_floor=request_floor_array[i];

            cout<<"User reached destination floor\n";

            cout<<"User used elevator for "<< user_on_elevator_time<<endl;

            total_user_on_elevator_time=total_user_on_elevator_time+user_on_elevator_time;

            if(arr[i+1]!=arr[i]){

                cout<<"No more request at this time so reinitialize at floor 10\n";

                reinitialization_time=e2.elevator_movement(10,request_floor_array[i],1,arr[i]);

                e2.current_floor=10;

                cout<<"Time taken to reinitialize is "<<reinitialization_time<<endl;

                total_reinitialization_time=total_reinitialization_time+reinitialization_time;

                

            }

            if(current_floor_array[i+1]<10 && arr[i]==arr[i+1]){

                cout<<"No more request at this time so reinitialize at floor 10\n";

                reinitialization_time=e2.elevator_movement(10,request_floor_array[i],1,arr[i]);

                e2.current_floor=10;

                cout<<"Time taken to reinitialize is "<<reinitialization_time<<endl;

                total_reinitialization_time=total_reinitialization_time+reinitialization_time;

                break;

            }

            else {

            if(arr[i+1]==arr[i]&&i!=n-2){

                cout<<"Checking next request at the time and going to next user\n";

                e2.current_floor=request_floor_array[i];

                wait_time=e2.elevator_movement(current_floor_array[i+1],request_floor_array[i],1,arr[i]);

                e2.current_floor=current_floor_array[i+1];

                cout<<"wait time for user is "<<wait_time<<endl;

                total_wait_time=total_wait_time+wait_time;

            }

            }

        }

        i++;

        

        

    if(arr[n-1]==arr[n-2]&&i==n){

       // cout<<i<<"hello"<<endl;

        if(current_floor_array[i-1]<10){

                

                break;

            }

        else {    

            if(current_floor_array[i-2]<=5){

        e2.current_floor=10;

        cout<<"Checking next request at the time and going to next user\n";

        wait_time=e2.elevator_movement(current_floor_array[n-1],e2.current_floor,1,arr[n-1]);

        cout<<"wait time for user is "<<wait_time<<endl;

        total_wait_time=total_wait_time+wait_time;

        e2.current_floor=current_floor_array[n-1];

        cout<<"Elevator picked up the user\n";

        user_on_elevator_time=e2.elevator_movement(request_floor_array[n-1],current_floor_array[n-1],1,arr[n-1]);

        cout<<"User used elevator for "<< user_on_elevator_time<<endl;

        total_user_on_elevator_time=total_user_on_elevator_time+user_on_elevator_time;

        e2.current_floor=request_floor_array[n-1];

        cout<<"No more request so initialize at floor 10\n";

        reinitialization_time=e2.elevator_movement(10,request_floor_array[n-1],1,arr[n-1]);

        e2.current_floor=10;

        cout<<"Time taken to reinitialize is "<<reinitialization_time<<endl;

        total_reinitialization_time=total_reinitialization_time+reinitialization_time;

            }

        else{

        e2.current_floor=request_floor_array[i];

        cout<<"Checking next request at the time and going to next user\n";

        wait_time=e2.elevator_movement(current_floor_array[n-1],request_floor_array[n-2],1,arr[n-1]);

        e2.current_floor=current_floor_array[n-1];

        total_wait_time=total_wait_time+wait_time;

        cout<<"user waits for "<<wait_time<<endl;

        cout<<"Elevator picked up the user\n";

        user_on_elevator_time=e2.elevator_movement(request_floor_array[n-1],current_floor_array[n-1],1,arr[n-1]);

        e2.current_floor=request_floor_array[n-1];

        cout<<"No more request so initialize at floor 10\n";

        cout<<"User used elevator for "<< user_on_elevator_time<<endl;

        total_user_on_elevator_time=total_user_on_elevator_time+user_on_elevator_time;

        reinitialization_time=e2.elevator_movement(10,request_floor_array[n-1],1,arr[n-1]);

        e2.current_floor=10;

        cout<<"Time taken to reinitialize is "<<reinitialization_time<<endl;

        total_reinitialization_time=total_reinitialization_time+reinitialization_time;

        }

        }

    }

    else if(i==n){

        if(current_floor_array[n-1]<10){

                

                break;

            }

        else {    

        cout<<"No more request so initialize at floor 10\n";

        reinitialization_time=e2.elevator_movement(10,request_floor_array[n-2],1,arr[n-2]);

        e2.current_floor=10;

        cout<<"Time taken to reinitialize is "<<reinitialization_time<<endl;

        total_reinitialization_time=total_reinitialization_time+reinitialization_time;

        cout<<"Elevator 1 working to pick next user\n";

        wait_time=e2.elevator_movement(current_floor_array[n-1],10,1,arr[n-1]);

        e2.current_floor=current_floor_array[n-1];

        total_wait_time=total_wait_time+wait_time;

        cout<<"user waits for "<<wait_time<<endl;

        cout<<"Elevator picked up the user\n";

        user_on_elevator_time=e2.elevator_movement(request_floor_array[n-1],current_floor_array[n-1],1,arr[n-1]);

        e2.current_floor=request_floor_array[n-1];

        cout<<"User used elevator for "<< user_on_elevator_time<<endl;

        total_user_on_elevator_time=total_user_on_elevator_time+user_on_elevator_time;

        cout<<"No more request so initialize at floor 10\n";

        reinitialization_time=e2.elevator_movement(10,request_floor_array[n-1],1,arr[n-1]);

        e2.current_floor=10;

        cout<<"Time taken to reinitialize is "<<reinitialization_time<<endl;

        total_reinitialization_time=total_reinitialization_time+reinitialization_time;


        }

        

    }    

    }

   

    while( current_floor_array[i]<10&&current_floor_array[i]>5&&i<n){

    for(;i<n-1;i++){    

            if(abs(current_floor_array[i]-e1.current_floor)>abs(current_floor_array[i]-e2.current_floor)) { 

            /*cout<<"Elevator 2 is working now \n Going to current floor of next user\n ";

            e1.elevator_movement(current_floor_array[i],e2.current_floor,1,arr[i]);

            cout<<"Elevator picked up the user\n";

            e1.elevator_movement(request_floor_array[i],current_floor_array[i],1,arr[i]);

            cout<<"User reached destination floor\n";

            if(arr[i+1]!=arr[i]){

                cout<<"No more request at this time so reinitialize at floor 10\n";

                e1.elevator_movement(10,request_floor_array[i],1,arr[i]);           

                

            }

            if(current_floor_array[i+1]<10){

                e1.elevator_movement(10,request_floor_array[i],1,arr[i]);

                break;

            }

            else{

                 if(arr[i+1]==arr[i]){

                cout<<"Checking next request at the time and going to next user\n";

                e1.current_floor=request_floor_array[i];

                e1.elevator_movement(current_floor_array[i+1],request_floor_array[i],1,arr[i]);

                 }

            }*/

            cout<<"Elevator 2 is working now \n Going to current floor of next user\n ";

            wait_time=e2.elevator_movement(current_floor_array[i],e2.current_floor,1,arr[i]);

            total_wait_time=total_wait_time+wait_time;

            cout<<"user waits for "<<wait_time<<endl;

            e2.current_floor=current_floor_array[i];

            cout<<"Elevator picked up the user\n";

            user_on_elevator_time=e2.elevator_movement(request_floor_array[i],current_floor_array[i],1,arr[i]);

            e2.current_floor=request_floor_array[i];

            cout<<"User reached destination floor\n";

            cout<<"User used elevator for "<< user_on_elevator_time<<endl;

            total_user_on_elevator_time=total_user_on_elevator_time+user_on_elevator_time;

            if(arr[i+1]!=arr[i]){

                cout<<"No more request at this time so reinitialize at floor 10\n";

                reinitialization_time=e2.elevator_movement(10,request_floor_array[i],1,arr[i]);

                e2.current_floor=10;

                cout<<"Time taken to reinitialize is "<<reinitialization_time<<endl;

                total_reinitialization_time=total_reinitialization_time+reinitialization_time;

                

            }

            if(current_floor_array[i+1]<10){

                cout<<"No more request at this time so reinitialize at floor 10\n";

                reinitialization_time=e2.elevator_movement(10,request_floor_array[i],1,arr[i]);

                e2.current_floor=10;

                cout<<"Time taken to reinitialize is "<<reinitialization_time<<endl;

                total_reinitialization_time=total_reinitialization_time+reinitialization_time;

                break;

            }

            else {

            if(arr[i+1]==arr[i]&&i!=n-2){

                cout<<"Checking next request at the time and going to next user\n";

                e2.current_floor=request_floor_array[i];

                wait_time=e2.elevator_movement(current_floor_array[i+1],request_floor_array[i],1,arr[i]);

                e2.current_floor=current_floor_array[i+1];

                cout<<"wait time for user is "<<wait_time<<endl;

                total_wait_time=total_wait_time+wait_time;

            }

            }

            } 

    


            else if(abs(current_floor_array[i]-e1.current_floor)<abs(current_floor_array[i]-e2.current_floor)) { 

            cout<<"Elevator 1 is working now \n Going to current floor of next user\n ";

            wait_time=e1.elevator_movement(current_floor_array[i],e1.current_floor,1,arr[i]);

            total_wait_time=total_wait_time+wait_time;

            cout<<"user waits for "<<wait_time<<endl;

            e1.current_floor=current_floor_array[i];

            cout<<"Elevator picked up the user\n";

            user_on_elevator_time=e1.elevator_movement(request_floor_array[i],current_floor_array[i],1,arr[i]);

            e1.current_floor=request_floor_array[i];

            cout<<"User reached destination floor\n";

            cout<<"User used elevator for "<< user_on_elevator_time<<endl;

            total_user_on_elevator_time=total_user_on_elevator_time+user_on_elevator_time;

            if(arr[i+1]!=arr[i]){

                cout<<"No more request at this time so reinitialize at floor 5\n";

                reinitialization_time=e1.elevator_movement(5,request_floor_array[i],1,arr[i]);

                e1.current_floor=5;

                cout<<"Time taken to reinitialize is "<<reinitialization_time<<endl;

                total_reinitialization_time=total_reinitialization_time+reinitialization_time;

                

            }

            if(current_floor_array[i+1]>5){

                cout<<"No more request at this time so reinitialize at floor 5\n";

                reinitialization_time=e1.elevator_movement(5,request_floor_array[i],1,arr[i]);

                e1.current_floor=5;

                cout<<"Time taken to reinitialize is "<<reinitialization_time<<endl;

                total_reinitialization_time=total_reinitialization_time+reinitialization_time;

                break;

            }

            else {

            if(arr[i+1]==arr[i]&&i!=n-2){

                cout<<"Checking next request at the time and going to next user\n";

                e1.current_floor=request_floor_array[i];

                wait_time=e1.elevator_movement(current_floor_array[i+1],request_floor_array[i],1,arr[i]);

                e1.current_floor=current_floor_array[i+1];

                cout<<"wait time for user is "<<wait_time<<endl;

                total_wait_time=total_wait_time+wait_time;

            }

            }

            } 

        }

        i++;

        

    if(abs(current_floor_array[i]-e1.current_floor)>abs(current_floor_array[i]-e2.current_floor)) {   

    if(arr[n-1]==arr[n-2]&&i==n){        

   

       

        if(current_floor_array[i-1]<=5){

                

                break;

            }

        else {    

            if(current_floor_array[i-2]<=5){

        e2.current_floor=10;

        cout<<"Checking next request at the time and going to next user\n";

        wait_time=e2.elevator_movement(current_floor_array[n-1],e2.current_floor,1,arr[n-1]);

        cout<<"wait time for user is "<<wait_time<<endl;

        total_wait_time=total_wait_time+wait_time;

        e2.current_floor=current_floor_array[n-1];

        cout<<"Elevator picked up the user\n";

        user_on_elevator_time=e2.elevator_movement(request_floor_array[n-1],current_floor_array[n-1],1,arr[n-1]);

        cout<<"User used elevator for "<< user_on_elevator_time<<endl;

        total_user_on_elevator_time=total_user_on_elevator_time+user_on_elevator_time;

        e2.current_floor=request_floor_array[n-1];

        cout<<"No more request so initialize at floor 10\n";

        reinitialization_time=e2.elevator_movement(10,request_floor_array[n-1],1,arr[n-1]);

        e2.current_floor=10;

        cout<<"Time taken to reinitialize is "<<reinitialization_time<<endl;

        total_reinitialization_time=total_reinitialization_time+reinitialization_time;

            }

        

        else{

        e2.current_floor=request_floor_array[i];

        cout<<"Checking next request at the time and going to next user\n";

        wait_time=e2.elevator_movement(current_floor_array[n-1],request_floor_array[n-2],1,arr[n-1]);

        e2.current_floor=current_floor_array[n-1];

        total_wait_time=total_wait_time+wait_time;

        cout<<"user waits for "<<wait_time<<endl;

        cout<<"Elevator picked up the user\n";

        user_on_elevator_time=e2.elevator_movement(request_floor_array[n-1],current_floor_array[n-1],1,arr[n-1]);

        e2.current_floor=request_floor_array[n-1];

        cout<<"No more request so initialize at floor 10\n";

        cout<<"User used elevator for "<< user_on_elevator_time<<endl;

        total_user_on_elevator_time=total_user_on_elevator_time+user_on_elevator_time;

        reinitialization_time=e2.elevator_movement(10,request_floor_array[n-1],1,arr[n-1]);

        e2.current_floor=10;

        cout<<"Time taken to reinitialize is "<<reinitialization_time<<endl;

        total_reinitialization_time=total_reinitialization_time+reinitialization_time;

        }

        }

    }

    else if(i==n){

        if(current_floor_array[n-1]<=5){

                

                break;

            }

        else {    

        cout<<"No more request so initialize at floor 10\n";

        reinitialization_time=e2.elevator_movement(10,request_floor_array[n-2],1,arr[n-2]);

        e2.current_floor=10;

        cout<<"Time taken to reinitialize is "<<reinitialization_time<<endl;

        total_reinitialization_time=total_reinitialization_time+reinitialization_time;

        cout<<"Elevator 1 working to pick next user\n";

        wait_time=e2.elevator_movement(current_floor_array[n-1],10,1,arr[n-1]);

        e2.current_floor=current_floor_array[n-1];

        total_wait_time=total_wait_time+wait_time;

        cout<<"user waits for "<<wait_time<<endl;

        cout<<"Elevator picked up the user\n";

        user_on_elevator_time=e2.elevator_movement(request_floor_array[n-1],current_floor_array[n-1],1,arr[n-1]);

        e2.current_floor=request_floor_array[n-1];

        cout<<"User used elevator for "<< user_on_elevator_time<<endl;

        total_user_on_elevator_time=total_user_on_elevator_time+user_on_elevator_time;

        cout<<"No more request so initialize at floor 10\n";

        reinitialization_time=e2.elevator_movement(10,request_floor_array[n-1],1,arr[n-1]);

        e2.current_floor=10;

        cout<<"Time taken to reinitialize is "<<reinitialization_time<<endl;

        total_reinitialization_time=total_reinitialization_time+reinitialization_time;


        }

        

    } 

    }    

    


    else if(abs(current_floor_array[i]-e1.current_floor)<abs(current_floor_array[i]-e2.current_floor)){         

    if(arr[n-1]==arr[n-2]&&i==n){

       // cout<<i<<"hello"<<endl;

        if(current_floor_array[i-1]>5){

                

                break;

            }

        else {    

            if(current_floor_array[i-2]>=10){

        e1.current_floor=5;

        cout<<"Checking next request at the time and going to next user\n";

        wait_time=e1.elevator_movement(current_floor_array[n-1],e1.current_floor,1,arr[n-1]);

        cout<<"wait time for user is "<<wait_time<<endl;

        total_wait_time=total_wait_time+wait_time;

        e1.current_floor=current_floor_array[n-1];

        cout<<"Elevator picked up the user\n";

        user_on_elevator_time=e1.elevator_movement(request_floor_array[n-1],current_floor_array[n-1],1,arr[n-1]);

        cout<<"User used elevator for "<< user_on_elevator_time<<endl;

        total_user_on_elevator_time=total_user_on_elevator_time+user_on_elevator_time;

        e1.current_floor=request_floor_array[n-1];

        cout<<"No more request so initialize at floor 5\n";

        reinitialization_time=e1.elevator_movement(5,request_floor_array[n-1],1,arr[n-1]);

        e1.current_floor=5;

        cout<<"Time taken to reinitialize is "<<reinitialization_time<<endl;

        total_reinitialization_time=total_reinitialization_time+reinitialization_time;

            }

        else{

        e1.current_floor=request_floor_array[i];

        cout<<"Checking next request at the time and going to next user\n";

        wait_time=e1.elevator_movement(current_floor_array[n-1],request_floor_array[n-2],1,arr[n-1]);

        e1.current_floor=current_floor_array[n-1];

        total_wait_time=total_wait_time+wait_time;

        cout<<"user waits for "<<wait_time<<endl;

        cout<<"Elevator picked up the user\n";

        user_on_elevator_time=e1.elevator_movement(request_floor_array[n-1],current_floor_array[n-1],1,arr[n-1]);

        e1.current_floor=request_floor_array[n-1];

        cout<<"No more request so initialize at floor 5\n";

        cout<<"User used elevator for "<< user_on_elevator_time<<endl;

        total_user_on_elevator_time=total_user_on_elevator_time+user_on_elevator_time;

        reinitialization_time=e1.elevator_movement(5,request_floor_array[n-1],1,arr[n-1]);

        e1.current_floor=5;

        cout<<"Time taken to reinitialize is "<<reinitialization_time<<endl;

        total_reinitialization_time=total_reinitialization_time+reinitialization_time;

        }

        }

    }

    else if(i==n){

        if(current_floor_array[n-1]>5){

                

                break;

            }

        else {    

        cout<<"No more request so initialize at floor 5\n";

        reinitialization_time=e1.elevator_movement(5,request_floor_array[n-2],1,arr[n-2]);

        e1.current_floor=5;

        cout<<"Time taken to reinitialize is "<<reinitialization_time<<endl;

        total_reinitialization_time=total_reinitialization_time+reinitialization_time;

        cout<<"Elevator 1 working to pick next user\n";

        wait_time=e1.elevator_movement(current_floor_array[n-1],5,1,arr[n-1]);

        e1.current_floor=current_floor_array[n-1];

        total_wait_time=total_wait_time+wait_time;

        cout<<"user waits for "<<wait_time<<endl;

        cout<<"Elevator picked up the user\n";

        user_on_elevator_time=e1.elevator_movement(request_floor_array[n-1],current_floor_array[n-1],1,arr[n-1]);

        e1.current_floor=request_floor_array[n-1];

        cout<<"User used elevator for "<< user_on_elevator_time<<endl;

        total_user_on_elevator_time=total_user_on_elevator_time+user_on_elevator_time;

        cout<<"No more request so initialize at floor 5\n";

        reinitialization_time=e1.elevator_movement(5,request_floor_array[n-1],1,arr[n-1]);

        e1.current_floor=5;

        cout<<"Time taken to reinitialize is "<<reinitialization_time<<endl;

        total_reinitialization_time=total_reinitialization_time+reinitialization_time;


        }

        

    }    

    }


    } 

    

    

}

cout<<"Total wait time was "<<total_wait_time<<endl;

cout<<"Total time spent on elevator was "<<total_user_on_elevator_time<<endl;

cout<<"Total reinitialization time was "<<total_reinitialization_time<<endl;

total_time=total_reinitialization_time+total_user_on_elevator_time+total_wait_time;

cout<<"Total time was "<<total_time<<endl;


int power=total_time/5;

cout<<"Total power consumed was "<<power<<"mW"<<endl;

}


void display(){

    for(int i=0;i<n;i++){

        cout<<arr[i]<<" ";

    }

}





int main() {


    mergesort(arr, 0, n-1);



    cout<<"sorted array : ";

    for(int i=0;i<n;i++){

        

        cout<<arr[i]<<" ";

    }

    cout<<endl;

    current_floor_sorter();

    requests_sorter();

    order_decider();

 

    display();

   // cout<<count<<" "<<arr[count];

   cout<<"\n";

   cout<<"Request Floor Array : ";

   for(int i=0;i<n;i++){

        

        cout<<request_floor_array[i]<<" ";

    }

    cout<<"\n";

    cout<<"Current Floor Array : ";

    for(int i=0;i<n;i++){

        

        cout<<current_floor_array[i]<<" ";

    }

    cout<<"\n";

    return 0;

}

Comments

Popular posts from this blog

Sum of Even Numbers till N

Find the Runner-Up Score!

Print All Substrings