import java.util.Scanner;
public class SJFP {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
System.out.print("Enter number of processes: ");
int n = sc.nextInt();
int[] pid = new int[n];
int[] AT = new int[n];
int[] BT = new int[n];
int[] CT = new int[n];
int[] TAT = new int[n];
int[] WT = new int[n];
int[]originalBT=new int[n];
int[]flag=new int[n];
for (int i = 0; i < n; i++) {
System.out.print("Enter process ID: ");
pid[i] = sc.nextInt();
System.out.print("Enter arrival time: ");
AT[i] = sc.nextInt();
System.out.print("Enter burst time: ");
BT[i] = sc.nextInt();
originalBT[i]=BT[i];
}
int total=0;
int st=0;
while(true) {
int c=n;
int min=99;
if(total==n)
break;
for(int i=0;i<n;i++) {
if(AT[i]<=st && flag[i]==0 && BT[i]<min) {
min=BT[i];
c=i;
}
}
if(c==n) {
st++;
}
else {
BT[c]--;
st++;
if(BT[c]==0) {
flag[c]=1;
CT[c]=st;
total++;
}
}}
int totalTAT=0;
int totalWT=0;
for(int i=0;i<n;i++) {
TAT[i]=CT[i]-AT[i];
WT[i]=TAT[i]-originalBT[i];
totalTAT+=TAT[i];
totalWT+=WT[i];
}
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - 1 - i; j++) {
if (pid[j] > pid[j + 1]) {
int temp = pid[j];
pid[j] = pid[j + 1];
pid[j + 1] = temp;
temp = AT[j];
AT[j] = AT[j + 1];
AT[j + 1] = temp;
temp = originalBT[j];
originalBT[j] = originalBT[j + 1];
originalBT[j + 1] = temp;
temp = CT[j];
CT[j] = CT[j + 1];
CT[j + 1] = temp;
temp = TAT[j];
TAT[j] = TAT[j + 1];
TAT[j + 1] = temp;
temp = WT[j];
WT[j] = WT[j + 1];
WT[j + 1] = temp;
}
}
}
System.out.println("\\nPID\\tAT\\tBT\\tCT\\tTAT\\tWT");
for ( int i = 0; i < n; i++) {
System.out.println(pid[i] + "\\t" + AT[i] + "\\t" + originalBT[i] + "\\t" +
CT[i] + "\\t" + TAT[i] + "\\t" + WT[i]);
}
double avgTAT = (double) totalTAT / n;
double avgWT = (double) totalWT / n;
System.out.printf("\\nAverage Turnaround Time: "+ avgTAT);
System.out.printf("\\nAverage Waiting Time: " +avgWT);
sc.close();
}
}
