Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<queue>
- using namespace std;
- typedef struct process
- {
- int pid,arr_time,burst_time,finishing_time,priority;
- float waiting_time,turn_arnd_time;
- }process;
- process Process[10],p1[10],temp;
- queue<int> queue1;
- int accept(int ch);
- void turn_wait(int n);
- void display(int n);
- void ganttrr(int n);
- int main()
- {
- int i,n,ts,ch,j,x;
- Process[0].turn_arnd_time=0;
- Process[0].waiting_time=0;
- n=accept(ch);
- ganttrr(n);
- turn_wait(n);
- display(n);
- return 0;
- }
- int accept(int ch) //functions for accepting inputs from the user
- {
- int i,n;
- cout<<"\nEnter the no. of process : ";
- cin>>n;
- if(n==0)
- {
- cout<<endl<<"wrong no. of processes entered";
- exit(1);
- }
- cout<<"Provide inputs"<<endl;
- for(i=1;i<=n;i++)
- {
- cout<<endl<<"Arrival time for process P"<<i<<" : ";
- cin>>Process[i].arr_time;
- Process[i].pid=i;
- cout<<endl<<"Burst time for process P"<<i<<" : ";
- cin>>Process[i].burst_time;
- cout<<endl<<endl;
- }
- cout<<endl<<"Table of inputs provided by you : "<<endl<<endl;
- cout<<"==============================================================="<<endl;
- cout<<endl<<"Process\tAT\tBT";
- for(i=1;i<=n;i++)
- {
- printf("\nP%d\t%d\t%d",Process[i].pid,Process[i].arr_time,Process[i].burst_time);
- }
- printf("\n============================================================");
- for(i=1;i<=n;i++) // creating dummy array
- {
- p1[i]=Process[i];
- }
- return n;
- }
- void ganttrr(int n) // Displaying ghant chart
- {
- int i,ts,m,nextval,nextarr;
- nextval=Process[1].arr_time;
- cout<<"\nEnter time slice : ";
- cin>>ts;
- nextval=p1[1].arr_time;
- cout<<endl<<"\nGantt chart :\n"<<endl;
- cout<<p1[1].arr_time;
- for(i=1;i<=n,p1[i].arr_time<=nextval;i++)
- queue1.push(p1[i].pid);
- nextarr=p1[i].arr_time;
- while(!queue1.empty())
- {
- m=queue1.front();
- queue1.pop();
- if(p1[m].burst_time>=ts)
- nextval=nextval+ts;
- else
- nextval=nextval+p1[m].burst_time;
- cout<<"->P"<<p1[m].pid<<"->"<<nextval;
- p1[m].burst_time=p1[m].burst_time-ts;
- if(nextval<nextarr)
- {
- if(p1[m].burst_time>0)
- queue1.push(m);
- if(p1[m].burst_time<=0)
- Process[m].finishing_time=nextval;
- }
- else
- {
- while(i<=n&&p1[i].arr_time<=nextval)
- {
- queue1.push(p1[i].pid);
- i++;
- }
- if(i<=n)
- nextarr=p1[i].arr_time;
- if(p1[m].burst_time>0)
- queue1.push(m);
- if(p1[m].burst_time<=0)
- Process[m].finishing_time=nextval;
- }
- }
- }
- void turn_wait(int n) // Calculating turn around time and waiting time
- {
- int i;
- for(i=1;i<=n;i++)
- {
- Process[i].turn_arnd_time=Process[i].finishing_time-Process[i].arr_time;
- Process[i].waiting_time=Process[i].turn_arnd_time-Process[i].burst_time;
- Process[0].turn_arnd_time=Process[0].turn_arnd_time+Process[i].turn_arnd_time;
- Process[0].waiting_time=Process[0].waiting_time+Process[i].waiting_time;
- }
- Process[0].turn_arnd_time=Process[0].turn_arnd_time/n;
- Process[0].waiting_time=Process[0].waiting_time/n;
- }
- void display(int n) // Display result
- {
- int i;
- cout<<"\n\n-------------------RESULT----------------------------------\n";
- cout<<"\nProcess\tAT\tBT\tFT\tTAT\tWT";
- for(i=1;i<=n;i++)
- {
- cout<<"\nP"<<Process[i].pid<<"\t"<<Process[i].arr_time<<"\t"<<Process[i].burst_time<<"\t"<<Process[i].finishing_time<<"\t"<<Process[i].turn_arnd_time<<"\t"<<Process[i].waiting_time;
- }
- cout<<"\n\n-----------------------------------------------------------";
- cout<<"\nAverage Turn Around Time: "<<Process[0].turn_arnd_time;
- cout<<"\nAverage Waiting Time: "<<Process[0].waiting_time<<endl;
- }
Add Comment
Please, Sign In to add comment