Elevator using cpp(case 1 working)

//save this as classes1.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* arrint firstint midint 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 *arrint firstint 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;
    }
    
    void elevator_movement(int request_floor,int current_floor,bool  available,int req_time_hour ){
    if(available){
        available=false;
    //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+10;
        }
        delay1=delay1+10;

        cout<<request_floor;
    }
    else if(request_floor<current_floor){
        for(int i=current_floor;i>request_floor;i--){
            cout<<i<<",";
            delay1=delay1+10;
        }
        delay1=delay1+10;
        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;
        }
    }

   /*
    available=true;

        if(req_time_hour>7&&req_time_hour<=11){
            //morning hr initialization
        }
        
        else if(req_time_hour>11 && req_time_hour<=20){
            
            cout<<"Reinitialization of elevator 1 to the default floor"<<endl;
            cout<<"{";
             if(current_floor<5){
                    for(int i=current_floor;i<5;i++){
                        cout<<i<<",";
                        delay1=delay1+10;
                    }
                current_floor=5;
                cout<<current_floor;
                delay1=delay1+10;
                //count++;
                }
        if(current_floor>5){
                    for(int i=current_floor;i>5;i--){
                        cout<<i<<",";
                        delay1=delay1+10;
                    }
                current_floor=5;
                cout<<current_floor;
                delay1=delay1+10;
                //count++;
                }
    }
    cout<<"}";
    cout<<endl;
    printf("Delay of elevator 1 is %d\n",delay1);
    }
    
 */   
    }
};

class elevator2{
    public:
    int request_floor;
    int current_floor;
    bool available;
    int req_time_hour;
    
    elevator2(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;
    }
    
    void elevator_movement(int request_floor,int current_floor,bool  available,int req_time_hour ){
    if(available){
        available=false;
    //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<<",";
            delay2=delay2+10;
        }
        delay2=delay2+10;

        cout<<request_floor<<"}";
    }
    else if(request_floor<current_floor){
        for(int i=current_floor;i>request_floor;i--){
            cout<<i<<",";
            delay2=delay2+10;
        }
        delay2=delay2+10;
        cout<<request_floor<<"}";
    }

    //request_floor=current_floor;
    current_floor=request_floor;
   //cout<<request_floor<<endl;

    if(request_floor==current_floor){



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

        if(req_time_hour>7&&req_time_hour<=11){
            //morning hr initialization
        }
        
        else if(req_time_hour>11 && req_time_hour<=20){
             cout<<"Reinitialization of elevator 2 to the default floor"<<endl;
            cout<<"{";
            //if(current_floor>7){
                if(current_floor<10){
                    for(int i=current_floor;i<10;i++){
                        cout<<i<<",";
                        delay2=delay2+10;
                    }
                current_floor=10;
                cout<<current_floor<<"}";
                delay2=delay2+10;
                }
                if(current_floor>10){
                    for(int i=current_floor;i>10;i--){
                        cout<<i<<",";
                        delay2=delay2+10;
                    }
                current_floor=10;
                cout<<current_floor<<"}";
                delay2=delay2+10;
                }
        
                
           // }
            
        }
        cout<<endl;
        printf("Delay of elevator 2 is %d\n",delay2);
    }
    }
    
}
};
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;
    }

    void decider(){
        if(this->req_time_hour>7 &&this->req_time_hour<=11){
            //code for morning time
        }
        if(this->req_time_hour>11&&this->req_time_hour<20){
            elevator1 e1(5,5,1,this->req_time_hour);
            elevator2 e2(10,10,1,this->req_time_hour);
        if(this->current_floor<=5&&this->current_floor>=0){
           cout<<"Elevator 1 is working"<<endl;
           cout<<e1.current_floor<<endl<<"{";  
          if(e1.current_floor<current_floor){
              for(int i=e1.current_floor;i<current_floor;i++){
              cout<<i<<",";
              delay1+=10;
        }
        
    }
    else if(e1.current_floor>current_floor){
        for(int i=e1.current_floor;i>current_floor;i--){
            cout<<i<<",";
            delay1+=10;
        }
        
    }
    e1.current_floor=current_floor;
    if(e1.current_floor==current_floor){
        e1.elevator_movement(request_floor,e1.current_floor,1,this->req_time_hour);
         }
    }
    if(this->current_floor>=10&&this->current_floor<=15){
          cout<<"Elevator 2 is working"<<endl;
           cout<<"{";
           if(e2.current_floor<current_floor){
              for(int i=e2.current_floor;i<current_floor;i++){
              cout<<i<<",";
              delay2+=10;
        }
        
    }
    else if(e2.current_floor>current_floor){
        for(int i=e2.current_floor;i>current_floor;i--){
            cout<<i<<",";
            delay2+=10;
        }
        
    }
    e2.current_floor=current_floor;
    if(e2.current_floor==current_floor){
        e2.elevator_movement(request_floor,current_floor,1,this->req_time_hour);
         }
    }
    if(this->current_floor<10&&this->current_floor>5){
          if(abs(this->current_floor-e2.current_floor)>abs(this->current_floor-e1.current_floor)){
              cout<<"Elevator 1 is working"<<endl;
           cout<<"{";
           if(e1.current_floor<current_floor){
              for(int i=e1.current_floor;i<current_floor;i++){
              cout<<i<<",";
              delay1+=10;
        }
        
    }
    else if(e1.current_floor>current_floor){
        for(int i=e1.current_floor;i>current_floor;i--){
            cout<<i<<",";
            delay1+=10;
        }
        
    }
    e1.current_floor=current_floor;
    if(e1.current_floor==current_floor){
        e1.elevator_movement(request_floor,current_floor,1,this->req_time_hour);
         }
          }
          else if(abs(this->current_floor-e2.current_floor)>abs(this->current_floor-e1.current_floor)){
              cout<<"Elevator 2 is working"<<endl;
           cout<<"{";
           if(e2.current_floor<current_floor){
              for(int i=e2.current_floor;i<current_floor;i++){
              cout<<i<<",";
              delay2+=10;
        }
        
    }
    else if(e2.current_floor>current_floor){
        for(int i=e2.current_floor;i>current_floor;i--){
            cout<<i<<",";
            delay2+=10;
        }
        
    }
    e2.current_floor=current_floor;
    if(e2.current_floor==current_floor){
        e2.elevator_movement(request_floor,current_floor,1,this->req_time_hour);
         }
          }
    }
    //jjj
    }
        
    }
};
      
/*
int main(){
    return 0;
}*/


/*********************************************************************************************/

//save this as elevator_code1.cpp


#include <iostream>
using namespace std;
#include "classes1.cpp"

user u1(10,13,12);
user u2(10,12,13);
user u3(4,5,13);
user u4(13,9,14);
user u5(3,6,19);
elevator1 e1(1,1,1,1);//Not initialization but declaration.
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(arr0n-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(){
    e1.current_floor=5;
    e2.current_floor=10;
    int i=0;
    for(int j=0;j<n;j++){
    whilecurrent_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 ";
            e1.elevator_movement(current_floor_array[i],e1.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 5\n";
                e1.elevator_movement(5,request_floor_array[i],1,arr[i]);
                
            }
            if(current_floor_array[i+1]>5){
                
                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]);
            }
        }
        i++;
        if(current_floor_array[i+1]>5){
                
                break;
            }
        
    if(arr[n-1]==arr[n-2]&&i==n){
        if(current_floor_array[i+1]>5){
                
                break;
            }
        e1.current_floor=request_floor_array[i];
        cout<<"Checking next request at the time and going to next user\n";
        e1.elevator_movement(current_floor_array[n-1],request_floor_array[n-2],1,arr[n-1]);
        cout<<"Elevator picked up the user\n";
        e1.elevator_movement(request_floor_array[n-1],current_floor_array[n-1],1,arr[n-1]);
        cout<<"No more request so initialize at floor 5\n";
        e1.elevator_movement(5,request_floor_array[n-1],1,arr[n-1]);
    }
    else if(i==n){
        if(current_floor_array[i+1]>5){
                
                break;
            }
        cout<<"No more request so initialize at floor 5\n";
        e1.elevator_movement(5,request_floor_array[n-2],1,arr[n-2]);
        cout<<"Elevator 1 working to pick next user\n";
        e1.elevator_movement(current_floor_array[n-1],5,1,arr[n-1]);
        cout<<"Elevator picked up the user\n";
        e1.elevator_movement(request_floor_array[n-1],current_floor_array[n-1],1,arr[n-1]);
        cout<<"No more request so initialize at floor 5\n";
        e1.elevator_movement(5,request_floor_array[n-1],1,arr[n-1]);
        
    }    
    }

    whilecurrent_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 ";
            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){
                
                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]);
            }
        }
        i++;
        if(current_floor_array[i+1]<10){
                
                break;
        }
    if(arr[n-1]==arr[n-2]&&i==n){
        if(current_floor_array[i+1]<10){
                
                break;
        }
        e1.current_floor=request_floor_array[i];
        cout<<"Checking next request at the time and going to next user\n";
        e1.elevator_movement(current_floor_array[n-1],request_floor_array[n-2],1,arr[n-1]);
        cout<<"Elevator picked up the user\n";
        e1.elevator_movement(request_floor_array[n-1],current_floor_array[n-1],1,arr[n-1]);
        cout<<"No more request so initialize at floor 10\n";
        e1.elevator_movement(10,request_floor_array[n-1],1,arr[n-1]);
    }
    else if(i==n) {
        if(current_floor_array[i+1]<10){
                
                break;
        }
        cout<<"No more request so initialize at floor 10\n";
        e1.elevator_movement(10,request_floor_array[n-2],1,arr[n-2]);
        cout<<"Elevator 2 working to pick next user\n";
        e1.elevator_movement(current_floor_array[n-1],10,1,arr[n-1]);
        cout<<"Elevator picked up the user\n";
        e1.elevator_movement(request_floor_array[n-1],current_floor_array[n-1],1,arr[n-1]);
        cout<<"No more request so initialize at floor 10\n";
        e1.elevator_movement(10,request_floor_array[n-1],1,arr[n-1]);
        
    }    
    }
    whilecurrent_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){
                
                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]);
            }
            } 

            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 ";
            e1.elevator_movement(current_floor_array[i],e1.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 5\n";
                e1.elevator_movement(5,request_floor_array[i],1,arr[i]);
                
            }
            if(current_floor_array[i+1]>5){
                
                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]);
            }
            } 
        }
        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){        
        e1.current_floor=request_floor_array[i];
        cout<<"Checking next request at the time and going to next user\n";
        e1.elevator_movement(current_floor_array[n-1],request_floor_array[n-2],1,arr[n-1]);
        cout<<"Elevator picked up the user\n";
        e1.elevator_movement(request_floor_array[n-1],current_floor_array[n-1],1,arr[n-1]);
        cout<<"No more request so initialize at floor 10\n";
        e1.elevator_movement(10,request_floor_array[n-1],1,arr[n-1]);
    }
    else if(i==n) {        
        cout<<"No more request so initialize at floor 10\n";
        e1.elevator_movement(10,request_floor_array[n-2],1,arr[n-2]);
        cout<<"Elevator 2 working to pick next user\n";
        e1.elevator_movement(current_floor_array[n-1],10,1,arr[n-1]);
        cout<<"Elevator picked up the user\n";
        e1.elevator_movement(request_floor_array[n-1],current_floor_array[n-1],1,arr[n-1]);
        cout<<"No more request so initialize at floor 10\n";
        e1.elevator_movement(10,request_floor_array[n-1],1,arr[n-1]);
        
    }   
    }
    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){        
        e1.current_floor=request_floor_array[i];
        cout<<"Checking next request at the time and going to next user\n";
        e1.elevator_movement(current_floor_array[n-1],request_floor_array[n-2],1,arr[n-1]);
        cout<<"Elevator picked up the user\n";
        e1.elevator_movement(request_floor_array[n-1],current_floor_array[n-1],1,arr[n-1]);
        cout<<"No more request so initialize at floor 5\n";
        e1.elevator_movement(5,request_floor_array[n-1],1,arr[n-1]);
    }
    else if(i==n) {       
        cout<<"No more request so initialize at floor 5\n";
        e1.elevator_movement(5,request_floor_array[n-2],1,arr[n-2]);
        cout<<"Elevator 1 working to pick next user\n";
        e1.elevator_movement(current_floor_array[n-1],5,1,arr[n-1]);
        cout<<"Elevator picked up the user\n";
        e1.elevator_movement(request_floor_array[n-1],current_floor_array[n-1],1,arr[n-1]);
        cout<<"No more request so initialize at floor 5\n";
        e1.elevator_movement(5,request_floor_array[n-1],1,arr[n-1]);
        
    }    
    }
    
    }

    }
    cout<<"value of i is : "<<i<<endl;
    
}

void display(){
    for(int i=0;i<n;i++){
        cout<<arr[i]<<" ";
    }
}




int main() {

    mergesort(arr0n-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];
   
   for(int i=0;i<n;i++){
        
        cout<<request_floor_array[i]<<" ";
    }
    
    for(int i=0;i<n;i++){
        
        cout<<current_floor_array[i]<<" ";
    }
    return 0;
}

//Sort the request time to handle request one by one ->done

//have a dependence on delay and request time

//swap the functionalities of both elevator

//optimal code for 5 to 10 floor based on available signal

Comments

Popular posts from this blog

Sum of Even Numbers till N

Find the Runner-Up Score!

Print All Substrings