a_pramanik

SJF(non-preemptive)

Feb 24th, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.52 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.  
  10. vector<gt>v;
  11. int arr[1000], bur[1000], tmp[1000], wt[1000], flg;
  12. int main()
  13. {
  14.     int n, i, j, k, x, y, min1, min2, st;
  15.     struct gt temp;
  16.  
  17.     cout<<"Enter number of processes : ";
  18.     cin>>n;
  19.  
  20.     for(i=0; i<n; i++)
  21.     {
  22.         printf("Enter arrival and burst time of process %d : ", i);
  23.         scanf("%d%d", &arr[i], &bur[i]);
  24.         tmp[i]=bur[i];
  25.     }
  26.  
  27.     min1=99999999;
  28.  
  29.     for(i=0; i<n; i++)
  30.     {
  31.         if(arr[i]==0)
  32.         {
  33.             if(bur[i]<min1)
  34.             {
  35.                 min1 = bur[i];
  36.                 st=i;
  37.             }
  38.         }
  39.     }
  40.  
  41.     memset(wt, 0, sizeof wt);
  42.  
  43.     temp.pro=st;
  44.     temp.time=0;
  45.     v.push_back(temp);
  46.  
  47.     int t=1;
  48.     int now = st;
  49.     tmp[now]--;
  50.  
  51.     while(1)
  52.     {
  53.         min1=tmp[now];
  54.         for(i=0; i<n; i++)
  55.         {
  56.             if(i!=now && tmp[i]<min1 && tmp[i]>0 && arr[i]<=t)
  57.             {
  58.                 min1=tmp[i];
  59.                 now=i;
  60.             }
  61.         }
  62.  
  63.         for(i=0; i<n; i++)
  64.         {
  65.             if(i!=now && tmp[i]>0 && arr[i]<=t)
  66.             {
  67.                 wt[i]++;
  68.             }
  69.         }
  70.  
  71.         temp.pro=now;
  72.         temp.time=t;
  73.         v.push_back(temp);
  74.  
  75.         tmp[now]--;
  76.         t++;
  77.  
  78.         if(tmp[now]==0)
  79.         {
  80.  
  81.             min1 = 99999999;
  82.             flg=0;
  83.             for(i=0; i<n; i++)
  84.             {
  85.                 if(arr[i]<=t && tmp[i]!=0 && min1>tmp[i])
  86.                 {
  87.                     flg=1;
  88.                     min1=tmp[i];
  89.                     now=i;
  90.                 }
  91.             }
  92.  
  93.             if(flg==0)
  94.             {
  95.                 min1=99999999;
  96.                 min2=99999999;
  97.                 for(i=0; i<n; i++)
  98.                 {
  99.                     if(tmp[i]>0 && arr[i]<=min1 && tmp[i]<min2)
  100.                     {
  101.                         min1=arr[i];
  102.                         min2=tmp[i];
  103.                         t=arr[i];
  104.                         now=i;
  105.                     }
  106.                 }
  107.  
  108.             }
  109.  
  110.         }
  111.  
  112.         int koyta=0;
  113.  
  114.         for(i=0; i<n; i++)
  115.         {
  116.             if(tmp[i]==0)koyta++;
  117.         }
  118.         if(koyta==n)break;
  119.     }
  120.  
  121.  
  122.     printf("\n\t****Individual Waiting time****\n");
  123.     printf("\t  Process            Waiting Time\n");
  124.  
  125.     for(i=0; i<n; i++)
  126.     {
  127.         printf("\t      %d                 %d\n", i, wt[i]);
  128.     }
  129.     printf("\n");
  130.  
  131.  
  132.  
  133.     double sum = 0.0;
  134.  
  135.     for(i=0; i<n; i++)
  136.     {
  137.         sum+=(double)wt[i];
  138.     }
  139.     printf("Average waiting time : %.3lf\n", sum/n);
  140.  
  141.  
  142.  
  143.     printf("\n\t\t*****Gantt Chart*****\n\n");
  144.  
  145.     /*for(i=0; i<v.size(); i++)
  146.     {
  147.         printf("p%d ", v[i].pro);
  148.     }
  149.     printf("\n");
  150.  
  151.     for(i=0; i<v.size(); i++)
  152.     {
  153.         if(v[i].time<=9)printf("%d  ", v[i].time);
  154.         else printf("%d ", v[i].time);
  155.     }
  156.     printf("\n");*/
  157.  
  158.     int process, startTime, endTime;
  159.     int cnt=0;
  160.     for(i=0; i<v.size();){
  161.             cnt++;
  162.         process = v[i].pro;
  163.         startTime = v[i].time;
  164.         endTime;
  165.         for(j=i+1; j<v.size(); j++){
  166.             if(v[j].pro!=process){
  167.                 i=j;
  168.                 endTime=v[j-1].time+1;
  169.                 break;
  170.             }
  171.         }
  172.         if(j>=(v.size()-1)){
  173.             endTime=v[v.size()-1].time+1;
  174.             i=v.size();
  175.         }
  176.         printf("%d __[p%d]__ %d  ", startTime, process, endTime);
  177.     }
  178.  
  179.  
  180.      printf("\n");
  181.  
  182.     return 0;
  183. }
Add Comment
Please, Sign In to add comment