#include<stdio.h>
main()
{
int n,i;
puts("enter no. of process");
scanf("%d",&n);
int at[n],bt[n],pri[n];
puts("enter arrival,burst and priority");
for(i=0;i<n;i++)
scanf("%d%d%d",&at[i],&bt[i],&pri[i]);
int wt[n],tt[n],j,min,temp_pri[n];
puts("Process\tArrival\tBurst\tPriority");
for(i=0;i<n;i++)
{
wt[i]=tt[i]=0;
printf("p%d\t%d\t%d\t%d\n",i+1,at[i],bt[i],pri[i]);
}
for(i=0;i<n;i++)
{
min=i;
for(j=i+1;j<n;j++)
{
if(at[min]>at[j])
min=j;
}
at[min]=at[min]+at[i]-(at[i]=at[min]);
bt[min]=bt[min]+bt[i]-(bt[i]=bt[min]);
pri[min]=pri[min]+pri[i]-(pri[i]=pri[min]);
}
int k,wait=0,count=0;
for(i=0;i<n-1;i++)
{
if(bt[i]==0)
bt[i]=-1;
else if(bt[i]>0)
{
j=0;
while(at[i]>=at[j]&&j<n)
{
temp_pri[j]=pri[j];
j++;
}
min=0;
for(k=0;k<j;k++)
{
if(temp_pri[k]>0&&temp_pri[min]>temp_pri[k])
min=k;
}
wt[min]+=wait-tt[min];
wait+=at[i+1]-at[i];
tt[min]=wait;
if(bt[min]>=wait)
bt[min]-=at[i+1]-at[i];
else
{
bt[min]=0;
pri[i]=-1;
}
}
}
i=0;
while(count<n)
{
if(bt[i]==0)
{
bt[i]=-1;
count++;
}
else if(bt[i]>0)
{
min=i;
for(j=0;j<n;j++)
{
if(pri[min]>pri[j]&&pri[j]>0)
min=j;
}
wt[min]+=wait-tt[min];
wait+=bt[min];
tt[min]=wait;
pri[min]=-1;
bt[min]=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+=tt[i]-at[i];
}
awt=awt/n;
atat=atat/n;
printf("Average waiting time = %.2f\n",awt);
printf("Average turn around time time = %.2f\n",atat);
}
Comments
Post a Comment