SJF PREEMPTIVE WITH ARRIVAL TIME // ALSO KNOWN AS SRJF

#include<stdio.h>
main()
{
   int n,i,j,pos;
   puts("Enter the number of processes");
   scanf("%d",&n);

   float at[n],bt[n],wt[n],fin[n];

   puts("Enter the arrival time and burst time");
   for(i=0;i<n;i++)
   {
      wt[i]=-1;
      fin[i]=0;
      scanf("%f%f",&at[i],&bt[i]);
   }

   printf("Process\tArrival Time\tBurst time\n");
   for(i=0;i<n;i++)
   printf("P[%d]\t%.1f\t\t%.1f\n",i+1,at[i],bt[i]);

   for(i=0;i<n;i++)
   {
      pos=i;
      for(j=i+1;j<n;j++)
      {
         if(at[pos]>at[j])
         pos=j;
      }
      at[pos]=at[pos]+at[i]-(at[i]=at[pos]);
      bt[pos]=bt[pos]+bt[i]-(bt[i]=bt[pos]);
   }

  int k=0;
  for(i=0;i<n-1&&bt[i]>0;i++)
  {
    pos=i;
    for(j=0;j<=i;j++)
    {
      if(bt[j]>0&&bt[pos]>bt[j])
      pos=j;
    }
    if(wt[pos]==-1)
    wt[pos]=k;
    k+=at[i+1]-at[i];
    bt[pos]-=at[i+1]-at[i];
    fin[pos]=k;
  }
 
  int count=0;
  i=0;
  while(count<n)
  {
    if(bt[i]==0)
    {
      bt[i]=-1;
      count++;
    }
    else if(bt[i]>0)
    {
      pos=i;
      for(j=0;j<n;j++)
      {
        if(bt[j]>0&&bt[pos]>bt[j])
        pos=j;
      }
      if(wt[pos]==-1)
      wt[pos]=0;
      wt[pos]+=k-fin[pos];
      k+=bt[pos];
      fin[pos]=k;
      bt[pos]=0;
    }
    if(i==n-1)
    i=0;
    else i++;
  }
 
  float awt=0,atat=0;
  for(i=0;i<n;i++)
  {
    awt+=wt[i]-at[i];
    atat+=fin[i]-at[i];
  }
  printf("AVG WAITING TIME = %.2f\n",awt/n);
  printf("AVG TURN AROUND TIME = %.2f",atat/n);
}

Comments