fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct Process {
  5. int id;
  6. int burst_time;
  7. int priority;
  8. int arrival_time;
  9. int completion_time;
  10. int waiting_time;
  11. int turnaround_time;
  12. bool executed;
  13. };
  14.  
  15. void sortByArrivalTime(Process processes[], int n) {
  16. for (int i = 0; i < n - 1; ++i) {
  17. for (int j = i + 1; j < n; ++j) {
  18. if (processes[i].arrival_time > processes[j].arrival_time) {
  19. swap(processes[i], processes[j]);
  20. }
  21. }
  22. }
  23. }
  24.  
  25. int findNextProcess(Process processes[], int n, int current_time) {
  26. int min_priority = 1e9, index = -1;
  27. for (int i = 0; i < n; ++i) {
  28. if (!processes[i].executed && processes[i].arrival_time <= current_time) {
  29. if (processes[i].priority < min_priority) {
  30. min_priority = processes[i].priority;
  31. index = i;
  32. }
  33. }
  34. }
  35. return index;
  36. }
  37.  
  38. void calculateTimes(Process processes[], int n) {
  39. int current_time = 0, completed = 0;
  40.  
  41. while (completed < n) {
  42. int index = findNextProcess(processes, n, current_time);
  43.  
  44. if (index == -1) {
  45. current_time++;
  46. continue;
  47. }
  48.  
  49. processes[index].executed = true;
  50. processes[index].completion_time = current_time + processes[index].burst_time;
  51. processes[index].turnaround_time = processes[index].completion_time - processes[index].arrival_time;
  52. processes[index].waiting_time = processes[index].turnaround_time - processes[index].burst_time;
  53. current_time = processes[index].completion_time;
  54. completed++;
  55. }
  56. }
  57.  
  58. void displayResults(Process processes[], int n) {
  59. cout << "ID\tBurst Time\tArrival Time\tPriority\tWaiting Time\tTurnaround Time\tCompletion Time\n";
  60. for (int i = 0; i < n; ++i) {
  61. cout << processes[i].id << "\t" << processes[i].burst_time << "\t\t" << processes[i].arrival_time
  62. << "\t\t" << processes[i].priority << "\t\t" << processes[i].waiting_time << "\t\t"
  63. << processes[i].turnaround_time << "\t\t" << processes[i].completion_time << endl;
  64. }
  65. }
  66.  
  67. int main() {
  68. int n;
  69.  
  70. cout << "Enter number of processes: ";
  71. cin >> n;
  72.  
  73. Process processes[n];
  74.  
  75. for (int i = 0; i < n; ++i) {
  76. cout << "Enter Burst Time, Priority, Arrival Time for Process " << i + 1 << ": ";
  77. processes[i].id = i + 1;
  78. cin >> processes[i].burst_time >> processes[i].priority >> processes[i].arrival_time;
  79. processes[i].executed = false;
  80. }
  81.  
  82. sortByArrivalTime(processes, n);
  83. calculateTimes(processes, n);
  84. displayResults(processes, n);
  85.  
  86. return 0;
  87. }
  88.  
Success #stdin #stdout 0.01s 5284KB
stdin
6
10 2 1
1 4 0
2 1 3
1 3 2
5 5 3
4 6 5
stdout
Enter number of processes: Enter Burst Time, Priority, Arrival Time for Process 1: Enter Burst Time, Priority, Arrival Time for Process 2: Enter Burst Time, Priority, Arrival Time for Process 3: Enter Burst Time, Priority, Arrival Time for Process 4: Enter Burst Time, Priority, Arrival Time for Process 5: Enter Burst Time, Priority, Arrival Time for Process 6: ID	Burst Time	Arrival Time	Priority	Waiting Time	Turnaround Time	Completion Time
2	1		0		4		0		1		1
1	10		1		2		0		10		11
4	1		2		3		11		12		14
3	2		3		1		8		10		13
5	5		3		5		11		16		19
6	4		5		6		14		18		23