#include <iostream>
using namespace std;
struct Process {
int id;
int burst_time;
int priority;
int arrival_time;
int completion_time;
int waiting_time;
int turnaround_time;
};
void sortByArrivalTime(Process processes[], int n) {
for (int i = 0; i < n - 1; ++i) {
for (int j = i + 1; j < n; ++j) {
if (processes[i].arrival_time > processes[j].arrival_time) {
swap(processes[i], processes[j]);
}
}
}
}
void sortByPriority(Process processes[], int n) {
for (int i = 0; i < n - 1; ++i) {
for (int j = i + 1; j < n; ++j) {
if (processes[i].priority > processes[j].priority) {
swap(processes[i], processes[j]);
}
}
}
}
void calculateTimes(Process processes[], int n) {
int current_time = 0;
for (int i = 0; i < n; ++i) {
if (processes[i].arrival_time > current_time) {
current_time = processes[i].arrival_time;
}
processes[i].completion_time = current_time + processes[i].burst_time;
processes[i].turnaround_time = processes[i].completion_time - processes[i].arrival_time;
processes[i].waiting_time = processes[i].turnaround_time - processes[i].burst_time;
current_time = processes[i].completion_time;
}
}
void displayResults(Process processes[], int n) {
cout << "ID\tBurst Time\tArrival Time\tPriority\tWaiting Time\tTurnaround Time\tCompletion Time\n";
for (int i = 0; i < n; ++i) {
cout << processes[i].id << "\t" << processes[i].burst_time << "\t\t" << processes[i].arrival_time
<< "\t\t" << processes[i].priority << "\t\t" << processes[i].waiting_time << "\t\t"
<< processes[i].turnaround_time << "\t\t" << processes[i].completion_time << endl;
}
}
int main() {
int n;
cout << "Enter number of processes: ";
cin >> n;
Process processes[n];
for (int i = 0; i < n; ++i) {
cout << "Enter Burst Time, Priority, Arrival Time for Process " << i + 1 << ":\n";
processes[i].id = i + 1;
cin >> processes[i].burst_time >> processes[i].priority >> processes[i].arrival_time;
}
sortByArrivalTime(processes, n);
sortByPriority(processes, n);
calculateTimes(processes, n);
displayResults(processes, n);
return 0;
}