a_pramanik

Round Robin

Feb 24th, 2018
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.86 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. struct gt
  5. {
  6.     int pro;
  7.     int time;
  8. };
  9. int arr[1000], bur[1000], tmp[1000], wt[1000], tq, n;
  10. vector<gt>v;
  11. bool isAllDone()
  12. {
  13.     int cnt=0;
  14.     for(int i=0; i<n; i++){
  15.         if(tmp[i]==0)cnt++;
  16.     }
  17.     if(cnt==n)return true;
  18.     return false;
  19. }
  20.  
  21. int main()
  22. {
  23.     int i, j, k, flg, min1;
  24.     struct gt tt;
  25.     printf("Enter number of processes : ");
  26.     scanf("%d", &n);
  27.  
  28.     for(i=0; i<n; i++){
  29.         printf("Enter burst time and arrival time of process %d : ", i);
  30.         scanf("%d%d", &bur[i], &arr[i]);
  31.         tmp[i]=bur[i];
  32.     }
  33.  
  34.     printf("Now enter time quantam : ");
  35.     scanf("%d", &tq);
  36.  
  37.     int now;
  38.  
  39.     for(i=0; i<n; i++){
  40.         if(arr[i]==0){
  41.             now=i;
  42.             break;
  43.         }
  44.     }
  45.     int tq2=0;
  46.  
  47.     for(i=0;isAllDone()==false ;i++){
  48.  
  49.         if(tq2==tq || tmp[now]==0){
  50.             flg=0;
  51.  
  52.             for(j=now+1; j<n; j++){
  53.                 if(arr[j]<=i && tmp[j]>0){
  54.                     flg=1;
  55.                     now=j;
  56.                     break;
  57.                 }
  58.             }
  59.  
  60.             if(flg==0){
  61.                 for(j=0; j<now; j++){
  62.                     if(arr[j]<=i && tmp[j]>0){
  63.                         flg=1;
  64.                         now=j;
  65.                         break;
  66.                     }
  67.                 }
  68.             }
  69.  
  70.             if(flg==0){
  71.                 min1=99999;
  72.                 for(j=0; j<n; j++){
  73.                     if(arr[j]<min1 && tmp[j]>0){
  74.                         min1=arr[j];
  75.                         now=j;
  76.                     }
  77.                 }
  78.             }
  79.            tq2=0;
  80.         }
  81.         if(i<arr[now])i=arr[now];
  82.  
  83.        tt.pro=now;
  84.        tt.time=i;
  85.  
  86.          for(j=0; j<n; j++){
  87.         if(arr[j]<=i && j!=now && tmp[j]>0){
  88.             wt[j]++;
  89.         }
  90.        }
  91.        tq2++;
  92.        v.push_back(tt);
  93.        tmp[now]--;
  94.     }
  95.  
  96.     double sum=0.0;
  97. printf("\t***Individual Waiting time***\n");
  98.  
  99.  printf("\tProcess       waiting time\n");
  100.  for(i=0; i<n; i++){
  101.     printf("\t  p%d            %d\n",i,wt[i]);
  102.     sum+=(double)wt[i];
  103.  }
  104.  
  105.  printf("\n***Average of waiting time = %.3lf s\n", sum/n);
  106.  
  107.  printf("\n\t\t***Gantt Chart***\n");
  108.  
  109.     int process, startTime, endTime;
  110.     int cnt=0;
  111.     for(i=0; i<v.size();){
  112.             cnt++;
  113.         process = v[i].pro;
  114.         startTime = v[i].time;
  115.         endTime;
  116.         for(j=i+1; j<v.size(); j++){
  117.             if(v[j].pro!=process){
  118.                 i=j;
  119.                 endTime=v[j-1].time+1;
  120.                 break;
  121.             }
  122.         }
  123.         if(j>=(v.size()-1)){
  124.             endTime=v[v.size()-1].time+1;
  125.             i=v.size();
  126.         }
  127.         printf("%d __[p%d]__ %d  ", startTime, process, endTime);
  128.     }
  129.  
  130.      printf("\n");
  131.  
  132. }
  133.  
  134. /*4
  135. 2 0
  136. 4 3
  137. 1 4
  138. 6 13
  139. 2
  140.  
  141. 4
  142. 11 0
  143. 9 3
  144. 3 4
  145. 6 5
  146. 2*/
Add Comment
Please, Sign In to add comment