ghorardim

SJF (Preemptive)

Nov 12th, 2017
212
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.45 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const long long mx=1e5;
  5.  
  6. int n;
  7. int process_id[mx+5];
  8. int burst_time[mx+5];
  9. int arrival_time[mx+5];
  10. int waiting_time[mx+5];
  11. int finishing_time[mx+5];
  12. int remaining_time[mx+5];
  13. int turn_around_time[mx+5];
  14.  
  15. void find_waiting_and_turn_around_time(void)
  16. {
  17.     int i,complete,current_time,index,minimum;
  18.  
  19.     for(i=1; i<=n; i++)
  20.     {
  21.         finishing_time[i] = 0;
  22.         remaining_time[i] = burst_time[i];
  23.     }
  24.  
  25.     index = 0;
  26.     complete = 0;
  27.     current_time = 0;
  28.     minimum = INT_MAX;
  29.  
  30.     while(complete < n)
  31.     {
  32.         for(i=1; i<=n; i++)
  33.         {
  34.             if(arrival_time[i] <= current_time)
  35.             {
  36.                 if(remaining_time[i] < minimum && remaining_time[i] > 0)
  37.                 {
  38.                     index = i;
  39.                     minimum = remaining_time[i];
  40.                 }
  41.             }
  42.         }
  43.  
  44.         if(index > 0)
  45.         {
  46.             remaining_time[index]--;
  47.             minimum = remaining_time[index];
  48.  
  49.             if(minimum == 0)
  50.             {
  51.                 minimum = INT_MAX;
  52.             }
  53.             if(remaining_time[index] == 0)
  54.             {
  55.                 complete++;
  56.                 finishing_time[index] = current_time + 1;
  57.                 turn_around_time[index] = finishing_time[index] - arrival_time[index];
  58.                 waiting_time[index] = finishing_time[index] - arrival_time[index] - burst_time[index];
  59.  
  60.                 index = 0;
  61.             }
  62.         }
  63.         current_time++;
  64.     }
  65.  
  66.     return;
  67. }
  68.  
  69. void find_average_times(void)
  70. {
  71.     int i;
  72.     double total_waiting_time, total_turn_around_time, N;
  73.  
  74.     find_waiting_and_turn_around_time();
  75.  
  76.     N = n;
  77.     total_waiting_time = 0.0;
  78.     total_turn_around_time = 0.0;
  79.     for(i=1; i<=n; i++)
  80.     {
  81.         total_waiting_time += waiting_time[i];
  82.         total_turn_around_time += turn_around_time[i];
  83.     }
  84.     printf("Average Waiting Time: %.02f\n", (total_waiting_time/N));
  85.     printf("Average Turn Around Time: %.02f\n", (total_turn_around_time/N));
  86.     return;
  87. }
  88.  
  89. int main()
  90. {
  91.     int i;
  92.     printf("Number of Processes: ");
  93.     cin>>n;
  94.  
  95.     printf("Process Ids:\n");
  96.     for(i=1; i<=n; i++) cin>>process_id[i];
  97.  
  98.     printf("Process Burst Times:\n");
  99.     for(i=1; i<=n; i++) cin>>burst_time[i];
  100.  
  101.     printf("Process Arrival Times:\n");
  102.     for(i=1; i<=n; i++) cin>>arrival_time[i];
  103.  
  104.     find_average_times();
  105.  
  106.     return 0;
  107. }
Advertisement
Add Comment
Please, Sign In to add comment