#include<stdio.h>
#include<conio.h>
#include<string.h>

struct input
{
char pname[10];
int bt,at,ct,tbt,p;
}tab[5];

struct sequence
{
int start,end;
char pname[10];
}seq[100],seq1[20];

int finish,time,n,k,prev;
void getinput()
{
int i;
clrscr();
printf("\nEnter no.of Process:- ");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("\nProcess Name:- ");
scanf("%s",tab[i].pname);
printf("\nBurst Time:- ");
scanf("%d",&tab[i].bt);
printf("Arrival Time:- ");
scanf("%d",&tab[i].at);
printf("Priority:- ");
scanf("%d",&tab[i].p);
tab[i].tbt=tab[i].bt;
}
}
void printinput()
{
int i;
printf("\nProcess \t BT \t AT");
for(i=0;i<n;i++)
printf("\n %s\t%d\t%d",tab[i].pname,tab[i].bt,tab[i].at);
getch();
}
void bubble()
{
struct input t;
int i,j;
for(i=0;i<n;i++)
for(j=0;j<(n-1)-i;j++)
if(tab[i].at>tab[j+1].at)
{
t=tab[j];
tab[j]=tab[j+1];
tab[j+1]=t;
}
}
void printoutput()
{
int i;
float avgtt=0,avgwt=0;
clrscr();
printf("\n----------Final Table---------\n");
printf("\nProcess \t AT \t BT \t CT \t TAT \t TWT \n");
for(i=0;i<n;i++)
{
printf("\n%s \t %d \t %d \t %d \t %d \t %d",tab[i].pname,tab[i].at,tab[i].bt,tab[i].ct,tab[i].ct-tab[i].at,tab[i].ct-tab[i].bt-tab[i].at);
avgtt+=tab[i].ct-tab[i].at;
avgwt+=tab[i].ct-tab[i].at-tab[i].bt;
}
avgtt /=n;
avgwt /=n;
printf("\nAverage Turn Around Time = %f",avgtt);
printf("\nAverage Waiting Time = %f", avgwt);
getch();
}
int arrivaltime(int t)
{
int i;
for(i=0;i<n;i++)
if(tab[i].at<=t && tab[i].tbt!=0)
return 1;
return 0;
}
int getmin(int t)
{
int min=99;
int mini, i;
for(i=0;i<n;i++)
if(tab[i].at<=t && tab[i].tbt!=0 && tab[i].p<min)
{
min=tab[i].p;
mini=i;
}
return mini;
}
void processinput()
{
int i,j;
finish=0,k=0;
while(finish!=n)
{
outside:
if(arrivaltime(time))
{
i=getmin(time);
while(tab[i].tbt!=0)
{
time++;
tab[i].tbt--;
}
tab[i].ct=time;
seq[k].start=prev;
seq[k].end=time;
strcpy(seq[k++].pname,tab[i].pname);
prev=time;
finish++;
goto outside;
}
if(finish!=n)
{
time++;
seq[k].start=prev;
seq[k].end=time;
strcpy(seq[k++].pname,"*");
prev=time;
break;
}
}
}
void ganttchart()
{
int i,j=1;
clrscr();
seq1[0]=seq[0];
printf("\nGantt Chart");
//printf("k:%d",k);
for(i=1;i<k;i++)
{
if(strcmp(seq1[j-1].pname,seq[i].pname)==0)
seq1[j-1].end=seq[i].end;
else
seq1[j++]=seq[i];
}

for(i=0;i<j;i++)
printf("\n%d \t %s \t %d\n",seq1[i].start,seq1[i].pname,seq1[i].end);
getch();
}
void main()
{
int i;
getinput();
printf("\nEntered Data");
printinput();
bubble();
printf("\n\nData after sorting according to AT");
printinput();
processinput();
printoutput();
ganttchart();
getch();
}

Post a Comment

Previous Post Next Post