Preview:
#include <stdio.h>

#define MAX_PROCESSES 100

int main() {
    int n;
    int burst[MAX_PROCESSES], wait[MAX_PROCESSES], turn[MAX_PROCESSES], arrival[MAX_PROCESSES], pid[MAX_PROCESSES];
    int completion[MAX_PROCESSES], isCompleted[MAX_PROCESSES] = {0};

    // Input number of processes
    printf("Enter number of processes: ");
    scanf("%d", &n);

    // Input burst time and arrival time for each process
    for (int i = 0; i < n; i++) {
        pid[i] = i + 1;
        printf("Enter arrival time for process %d: ", pid[i]);
        scanf("%d", &arrival[i]);
        printf("Enter burst time for process %d: ", pid[i]);
        scanf("%d", &burst[i]);
    }

    int currentTime = 0, completed = 0;
    while (completed != n) {
        int shortest = -1;
        int minBurst = 100000; // A large number to represent infinity

        // Find process with shortest burst time among the processes that have arrived
        for (int i = 0; i < n; i++) {
            if (arrival[i] <= currentTime && !isCompleted[i] && burst[i] < minBurst) {
                minBurst = burst[i];
                shortest = i;
            }
        }

        if (shortest == -1) {
            currentTime++;
        } else {
            currentTime += burst[shortest];
            completion[shortest] = currentTime;
            turn[shortest] = completion[shortest] - arrival[shortest];
            wait[shortest] = turn[shortest] - burst[shortest];
            isCompleted[shortest] = 1;
            completed++;
        }
    }

    // Print process information
    printf("PID\tArrival Time\tBurst Time\tWaiting Time\tTurnaround Time\tCompletion Time\n");
    for (int i = 0; i < n; i++) {
        printf("%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n", pid[i], arrival[i], burst[i], wait[i], turn[i], completion[i]);
    }

    // Calculate and print average waiting and turnaround times
    float totalWait = 0, totalTurnaround = 0;
    for (int i = 0; i < n; i++) {
        totalWait += wait[i];
        totalTurnaround += turn[i];
    }

    printf("Average Waiting Time: %.2f\n", totalWait / n);
    printf("Average Turnaround Time: %.2f\n", totalTurnaround / n);

    return 0;
}
downloadDownload PNG downloadDownload JPEG downloadDownload SVG

Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!

Click to optimize width for Twitter