#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
// Structure to represent a process
struct Process {
int id; // Process ID
int arrivalTime; // Arrival time of the process
int burstTime; // Burst time of the process
int completionTime; // Completion time of the process
int waitingTime; // Waiting time of the process
int turnaroundTime; // Turnaround time of the process
};
// Function to calculate waiting time, turnaround time, and completion time
void calculateTimes(vector<Process>& processes) {
for (size_t i = 0; i < processes.size(); i++) {
if (i == 0) {
// First process starts execution immediately
processes[i].waitingTime = 0;
processes[i].completionTime = processes[i].arrivalTime + processes[i].burstTime;
} else {
// Waiting time is the idle time plus the time taken by previous processes
processes[i].waitingTime = max(0, processes[i - 1].completionTime - processes[i].arrivalTime);
processes[i].completionTime = processes[i].arrivalTime + processes[i].waitingTime + processes[i].burstTime;
}
// Turnaround time is the total time taken by the process
processes[i].turnaroundTime = processes[i].completionTime - processes[i].arrivalTime;
}
}
// Function to display the FCFS schedule
void displaySchedule(const vector<Process>& processes) {
cout << "Process\tArrival Time\tBurst Time\tWaiting Time\tTurnaround Time\tCompletion Time\n";
for (const auto& process : processes) {
cout << process.id << "\t" << process.arrivalTime << "\t\t" << process.burstTime << "\t\t"
<< process.waitingTime << "\t\t" << process.turnaroundTime << "\t\t" << process.completionTime << "\n";
}
}
int main() {
int n; // Number of processes
cout << "Enter the number of processes: ";
cin >> n;
vector<Process> processes(n);
// Input arrival time and burst time for each process
for (int i = 0; i < n; i++) {
cout << "Enter arrival time and burst time for process " << i + 1 << ": ";
cin >> processes[i].arrivalTime >> processes[i].burstTime;
processes[i].id = i + 1; // Assign process ID
}
// Sort processes based on arrival time
sort(processes.begin(), processes.end(), [](const Process& a, const Process& b) {
return a.arrivalTime < b.arrivalTime;
});
// Calculate waiting time, turnaround time, and completion time
calculateTimes(processes);
// Display the schedule
displaySchedule(processes);
return 0;
}