You are on page 1of 4

#include<stdio.

h>

struct Process {

char id[3];

int arrival_time;

int burst_time;

int waiting_time;

int turnaround_time;

};

void printGanttChart(struct Process processes[], int num_processes) {

int total_time = 0;

// Calculate the total execution time

for (int i = 0; i < num_processes; i++) {

total_time += processes[i].burst_time;

// Print the top line of the Gantt chart

printf("\nGantt Chart:\n");

for (int i = 0; i < total_time; i++) {

printf("-");

printf("\n");

// Print the process IDs in the Gantt chart

int current_time = 0;

for (int i = 0; i < num_processes; i++) {

printf("|");

for (int j = 0; j < processes[i].burst_time; j++) {

printf("%s", processes[i].id);
current_time++;

printf("|\n");

// Print the bottom line of the Gantt chart

for (int i = 0; i < total_time; i++) {

printf("-");

printf("\n");

// Print the timeline

current_time = 0;

printf("0");

for (int i = 0; i < num_processes; i++) {

for (int j = 0; j < processes[i].burst_time; j++) {

current_time++;

printf("%2d", current_time);

printf("\n");

void calculateWaitingTime(struct Process processes[], int num_processes) {

processes[0].waiting_time = 0;

for (int i = 1; i < num_processes; i++) {

processes[i].waiting_time = processes[i - 1].waiting_time + processes[i - 1].burst_time;

}
void calculateTurnaroundTime(struct Process processes[], int num_processes) {

for (int i = 0; i < num_processes; i++) {

processes[i].turnaround_time = processes[i].waiting_time + processes[i].burst_time;

int main() {

struct Process processes[5] = {

{"P1", 3, 4},

{"P2", 5, 3},

{"P3", 0, 2},

{"P4", 5, 1},

{"P5", 4, 3}

};

int num_processes = sizeof(processes) / sizeof(processes[0]);

// Sort the processes based on arrival time

for (int i = 0; i < num_processes - 1; i++) {

for (int j = 0; j < num_processes - i - 1; j++) {

if (processes[j].arrival_time > processes[j + 1].arrival_time) {

struct Process temp = processes[j];

processes[j] = processes[j + 1];

processes[j + 1] = temp;

printf("Process Id\tArrival time\tBurst time\n");

for (int i = 0; i < num_processes; i++) {

printf("%s\t\t%d\t\t%d\n", processes[i].id, processes[i].arrival_time, processes[i].burst_time);


}

calculateWaitingTime(processes, num_processes);

calculateTurnaroundTime(processes, num_processes);

printf("\nProcess Id\tWaiting time\tTurnaround time\n");

for (int i = 0; i < num_processes; i++) {

printf("%s\t\t%d\t\t%d\n", processes[i].id, processes[i].waiting_time,


processes[i].turnaround_time);

printGanttChart(processes, num_processes);

return 0;

You might also like