fork download
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. struct Process {
  6. int id;
  7. int burst_time;
  8. int priority;
  9. int arrival_time;
  10. int remaining_time;
  11. };
  12.  
  13. void sortProcessesByArrival(Process processes[], int n) {
  14.  
  15. for (int i = 0; i < n - 1; i++) {
  16. for (int j = 0; j < n - i - 1; j++) {
  17. if (processes[j].arrival_time > processes[j + 1].arrival_time) {
  18.  
  19. Process temp = processes[j];
  20. processes[j] = processes[j + 1];
  21. processes[j + 1] = temp;
  22. } else if (processes[j].arrival_time == processes[j + 1].arrival_time &&
  23. processes[j].priority > processes[j + 1].priority) {
  24.  
  25. Process temp = processes[j];
  26. processes[j] = processes[j + 1];
  27. processes[j + 1] = temp;
  28. }
  29. }
  30. }
  31. }
  32.  
  33. void preemptivePriorityScheduling(Process processes[], int n) {
  34. int waiting_time[100];
  35. int completed[100] = {0};
  36. int time = 0;
  37. int remaining_processes = n;
  38.  
  39.  
  40. sortProcessesByArrival(processes, n);
  41.  
  42. while (remaining_processes > 0) {
  43. int idx = -1;
  44.  
  45.  
  46. for (int i = 0; i < n; i++) {
  47. if (!completed[i] && processes[i].arrival_time <= time && processes[i].remaining_time > 0) {
  48. if (idx == -1 || processes[i].priority < processes[idx].priority) {
  49. idx = i;
  50. }
  51. }
  52. }
  53.  
  54. if (idx != -1) {
  55.  
  56. processes[idx].remaining_time--;
  57. time++;
  58.  
  59.  
  60. if (processes[idx].remaining_time == 0) {
  61. completed[idx] = 1;
  62. remaining_processes--;
  63. waiting_time[idx] = time - processes[idx].arrival_time - processes[idx].burst_time;
  64. }
  65. } else {
  66.  
  67. time++;
  68. }
  69. }
  70.  
  71.  
  72. cout << "Process ID | Burst Time | Arrival Time | Priority | Waiting Time\n";
  73. for (int i = 0; i < n; i++) {
  74. cout << " " << processes[i].id << " | "
  75. << processes[i].burst_time << " | "
  76. << processes[i].arrival_time << " | "
  77. << processes[i].priority << " | "
  78. << waiting_time[i] << endl;
  79. }
  80. }
  81.  
  82. int main() {
  83. int n;
  84. cout << "Enter number of processes: ";
  85. cin >> n;
  86.  
  87. Process processes[100];
  88.  
  89. for (int i = 0; i < n; i++) {
  90. cout << "Enter burst time, arrival time, and priority for process " << i + 1 << ": ";
  91. cin >> processes[i].burst_time >> processes[i].arrival_time >> processes[i].priority;
  92. processes[i].id = i + 1;
  93. processes[i].remaining_time = processes[i].burst_time;
  94. }
  95.  
  96. preemptivePriorityScheduling(processes, n);
  97.  
  98. return 0;
  99. }
  100.  
Success #stdin #stdout 0s 5284KB
stdin
6
10 1 2
1 0 4 
2 3 1 
1 2 3
5 3 5
4 5 6
stdout
Enter number of processes: Enter burst time, arrival time, and priority for process 1: Enter burst time, arrival time, and priority for process 2: Enter burst time, arrival time, and priority for process 3: Enter burst time, arrival time, and priority for process 4: Enter burst time, arrival time, and priority for process 5: Enter burst time, arrival time, and priority for process 6: Process ID | Burst Time | Arrival Time | Priority | Waiting Time
   2       |     1     |     0      |     4     |     0
   1       |     10     |     1      |     2     |     2
   4       |     1     |     2      |     3     |     11
   3       |     2     |     3      |     1     |     0
   5       |     5     |     3      |     5     |     11
   6       |     4     |     5      |     6     |     14