Untitled

 avatar
unknown
plain_text
15 days ago
1.5 kB
3
Indexable
#include <bits/stdc++.h>
using namespace std;
struct P { int id, at, bt, ct, wt, tat; };
bool cmp(P a, P b) { return (a.at == b.at) ? (a.bt < b.bt) : (a.at < b.at); }

int main() {
    int n = 10, total_wt = 0, total_tat = 0, t = 0;
    P p[n];

    cout << "Enter Arrival Time (AT) and Burst Time (BT) for " << n << " processes:\n";
    for (int i = 0; i < n; i++) { p[i].id = i + 1; cin >> p[i].at >> p[i].bt; }

    sort(p, p + n, cmp);
    
    for (int i = 0; i < n; i++) {
        if (t < p[i].at) t = p[i].at;  // If CPU is idle, move time forward
        p[i].ct = t + p[i].bt;
        p[i].tat = p[i].ct - p[i].at;
        p[i].wt = p[i].tat - p[i].bt;
        t = p[i].ct;
        total_wt += p[i].wt;
        total_tat += p[i].tat;
    }

    cout << "\nProcess Details:\n";
    cout << "ID\tAT\tBT\tCT\tWT\tTAT\n";
    for (int i = 0; i < n; i++) 
        cout << p[i].id << "\t" << p[i].at << "\t" << p[i].bt << "\t" << p[i].ct 
             << "\t" << p[i].wt << "\t" << p[i].tat << "\n";

    cout << "\nAverage Waiting Time: " << (float)total_wt / n;
    cout << "\nAverage Turnaround Time: " << (float)total_tat / n << "\n";

    // Gantt Chart
    cout << "\nGantt Chart:\n ";
    for (int i = 0; i < n; i++) cout << "----";
    cout << "\n|";
    for (int i = 0; i < n; i++) cout << " P" << p[i].id << " |";
    cout << "\n ";
    for (int i = 0; i < n; i++) cout << "----";
    cout << "\n" << p[0].at;
    for (int i = 0; i < n; i++) cout << setw(4) << p[i].ct;
    cout << "\n";
}
Leave a Comment