Program:
#include<stdio.h>
void main()
{
int n;
printf("\n Enter Number of Process:");
scanf("%d",&n);
// Array to Store
// 0 - Arrival Time
// 1 - Burst Time
// 2 - TAT (Turn Around Time)
// 3 - WT (Waiting Time)
// 4 - Proc essNo
// arr = [[A,B,TAT,WT]]
float arr[n][5];
for(int i=0;i<n;i++)
{
printf("\n Enter Arrival Time and Burst Time for Process P%d:",i+1);
scanf("%f%f",&arr[i][0],&arr[i][1]);
arr[i][4] = i+1;
}
printf("\n\n Displaying the Values:");
printf("\n ProcessNo \t ArrivalTime \t BurstTime");
for(int i=0;i<n;i++)
{
printf("\n P%0.0f \t\t %0.2f \t\t %0.2f",arr[i][4],arr[i][0],arr[i][1]);
}
//Sort According to Arrival Time
for(int i=0;i<n;i++)
{
for(int j=0;j<n-1;j++)
{
if(arr[j][0] > arr[j+1][0])
{
int at, bt,pn;// pn = process number
at = arr[j][0];
bt = arr[j][1];
pn = arr[j][4];
arr[j][0] = arr[j+1][0];
arr[j][1] = arr[j+1][1];
arr[j][4] = arr[j+1][4];
arr[j+1][0] = at;
arr[j+1][1] = bt;
arr[j+1][4] = pn;
}
}
}
printf("\n\n After Scheduling Process According to FCFS:");
printf("\n P \t AT \t BT \t TAT \t WT");
//TAT = Exit Time - Arrival Time
//WT = TAT - BT
float total_tat = 0,total_tat_cal = 0,total_wt = 0,cpu_idle=0;
// Assuming Process Starts from 0
if(arr[0][0] != 0)
{
total_tat = arr[0][0];
}
for(int i=0;i<n;i++)
{
total_tat += arr[i][1];
arr[i][2] = total_tat - arr[i][0]; // TAT
total_tat_cal += arr[i][2];
arr[i][3] = arr[i][2] - arr[i][1]; // WT
total_wt +=arr[i][3];
// If next Process has not arrived
if(arr[i+1][0] > total_tat && i<n-1)
{
cpu_idle += arr[i+1][0] - total_tat;
total_tat = arr[i+1][0];
}
printf("\n P%0.0f \t %0.2f \t %0.2f \t %0.2f \t %0.2f \n",arr[i][4],arr[i][0],arr[i][1],arr[i][2],arr[i][3]);
}
printf("\n\n Average TurnAround Time: %0.2f",total_tat_cal/n);
printf("\n Average Waiting Time: %0.2f",total_wt/n);
printf("\n CPU IDLE Time: %0.2f",cpu_idle);
printf("\n\n");
return;
}
Output:
