//can someone debug this program,,, thanks,,,
#include<stdio.h>
#include<conio.h>
#include<dos.h>
#include<graphics.h>
#include<stdlib.h>
#define N 100
struct processors //PROCESS ATTRIBUTES//
{
float burst;
float arrival;
int priority;
int num;
}p[20],temp;
struct ssss
{
int no;
int xx;
float arr;
float burst;
float ww;
int pri;
float wait;
}process[N];
void main()
{
void roundrobin(int);
{
//void graphics(float *,float,int);
int i,j,c,n;float left,right,top,bottom;
/* select a driver and mode that supports */
/* multiple background colors. */
int gdriver = EGA, gmode = EGAHI, errorcode;
int bkcol, maxcolor, x, y;
char msg[80];
/* initialize graphics and local variables */
initgraph(&gdriver, &gmode, "C:\\TC\\BGI");
/* read result of initialization */
errorcode = graphresult();
if (errorcode != grOk) /* an error occurred */
{
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1); /* terminate with an error code */
}
cleardevice();//Gets the input from the user//
printf("ENTER THE NUMBER OF PROCESSES:\t");
scanf("%d",&n);
for(i=0;i<n;i++)
{
gotoxy(22,2);
printf("PROCESS:%d\n",i+1);
printf("BURST TIME :\t");
scanf("%f",&p[i].burst);
printf("ARRIVAL TIME :\t");
scanf("%f",&p[i].arrival);
printf("PRIORITY :\t");
scanf("%d",&p[i].priority);
p[i].num = i+1;
if(p[i].arrival < 0 || p[i].burst <=0 || p[i].priority > n || p[i].burst> 40)
{
printf("\n\nINVALID INPUT\n");
printf("PLEASE RE ENTER THE PARAMETERS FOR PROCESS %d",i+1);
i--;
getch();
}
cleardevice();
}
for(i=0;i<n;i++)
{
for(j=i;j<n;j++)
{
if(p[i].arrival > p[j].arrival)
{
temp = p[i];
p[i] = p[j];
p[j] = temp;
}
}
}
void roundrobin(int n)
{
int i,j,l=0,pr[30];float tot[10]={1,1,1,1,1,1,1,1,1,1},s[10]={0,0,0,0,0,0,0,0,0,0},c=1,y=0;
float q,awt,total=0,wt[10]={0,0,0,0,0,0,0,0,0,0},g[400];
void graphics(float *,float,int,float *,int,int *,int);
cleardevice();
printf("Enter the time quantum: ");
scanf("%f",&q);
for(i=0;i<n;i++)
{
tot[i] = p[i].burst;
}
g[y++] = total;
g[y++] = 0;
g[y++] = total = total + p[0].arrival;
while(c<=n) //Keeps track of the processes that are completed
{
for(i=0;i<n;j++)//Performs the round robin function
{
if(tot[i]>0) //Checks whether the process is over or not
{
tot[i] = tot[i] - q; //decreases the burst time by the
//time quantum
if(tot[i]<=0) // checks whether this is the last
//round for this process
{
g[y++] = p[i].num;
g[y++] = total = total + tot[i] + q;
//calculates the waiting time of the proces
wt[i] = total - p[i].burst - p[i].arrival;
//checks whether a process has arrived in the mean time
if(total>=p[i+1].arrival)
{
i++;
}
else
{
i=0;
}
c++;
}
else
{
g[y++] = p[i].num;
g[y++] = total = total + q;
while(tot[i+1]<=0)//increments 'i' till it reaches an incomplete
i++; //process
if(total>=p[i+1].arrival)
{
i++;
}
else
{
i=0;
}
}
}
else
{
i++;
if(p[i].arrival > total) //checks for idle time
{
if(i<=n)
{
g[y++] = 0;
g[y++] = total = p[i].arrival;
}
else if(i==n-1 && c==n-1)
{
g[y++] = 0;
g[y++] = total = p[i].arrival;
}
}
}
}
}
g[y++] = p[i-1].num;
q=0;
for(i=0;i<n;i++) //calculates average waiting time
{
//printf("%d. %f\n",p[i].num,wt[i]);
q = q + wt[i];
}
awt = q/n;
graphics(wt,awt,n,g,y,pr,l);
outtextxy(200,0,"FOR ROUND ROBIN SCHEDULING");
getch();
}
void graphics(float *wt,float awt,int n,float *g,int y,int *pr,int l)
{
int i,msg1=0,j=0,u=0;
char msg[30];
float left,right,top,bottom,awd=0,turn=0,d=0;
getch();
cleardevice();
setlinestyle(4, 1, 1);
setfillstyle(10,1);
bar3d(0,0,620,340,0,0);
line(0, 2, 618, 2);
line(2,2,2,338);
line(2,338,618,338);
line(618,338,618,2);
setlinestyle(0,1,1);
left = 0;
top = 40;
bottom = 80;
right = 15;
for(i=0;i<y;i++)
{
left = right;
right = *(g+i);
right = (15-j) * (right - u);
bar3d(left,top,right,bottom,0,0);
sprintf(msg,"%2.1f",*(g+i));
outtextxy(right,(82+msg1),msg);
i++;
setfillstyle(1,*(g+i));
if(right>=600)
{
right = 0;
top = 120;
bottom = 160;
msg1 = 82;u= *(g+i-1);
i--;
outtextxy(right,164,msg);
i++;
}
delay(500);
}
setcolor(CYAN+BLINK);
settextstyle(DEFAULT_FONT, HORIZ_DIR, 0);
sprintf(msg,"AVERAGE WAITING TIME : %f",awt);
outtextxy(20,30,msg);
for(i=0;i<n;i++)
{
d = d + p[i].burst;
}
awd = d/n;
turn = awd + awt;
//settextstyle(DEFAULT_FONT, HORIZ_DIR, 4);
sprintf(msg,"AVERAGE TURN AROUND TIME : %f",turn);
outtextxy(300,30,msg);
setcolor(WHITE);
sprintf(msg,"PROCESS");
outtextxy(32,210,msg);
sprintf(msg,"WAITING TIME");
outtextxy(190,210,msg);
outtextxy(340,210,"COLORS");
outtextxy(410,210,"IDLE");
setfillstyle(1,0);
bar3d(455,206,515,216,0,0);
for(i=0;i<n;i++)
{
sprintf(msg,"%d.",p[i].num);
outtextxy(48,226+(i*17),msg);
sprintf(msg,"%f",*(wt+i));
outtextxy(208,226+(i*17),msg);
if(i==6)
break;
}
//getch();
//cleardevice();
/*for(i=7;i<n;i++)
{
sprintf(msg,"%d.",p[i].num);
outtextxy(48,226+((i-7)*17),msg);
sprintf(msg,"%f",*(wt+i));
outtextxy(208,226+((i-7)*17),msg);
} */
for(i=0;i<n;i++)
{
setfillstyle(1,p[i].num);
bar3d(330,225+(i*17),390,235+(i*17),0,0);
if(i==6)
break;
}
settextstyle(TRIPLEX_FONT, HORIZ_DIR,2 );
outtextxy(50,0,"GANTT CHART");
if(n>=7)
{
getch();
cleardevice();
settextstyle(DEFAULT_FONT,HORIZ_DIR,0);
sprintf(msg,"PROCESS");
outtextxy(32,10,msg);
sprintf(msg,"WAITING TIME");
outtextxy(190,10,msg);
outtextxy(340,10,"COLORS");
outtextxy(410,10,"IDLE");
setfillstyle(1,0);
bar3d(455,6,515,16,0,0);
for(i=7;i<n;i++)
{
sprintf(msg,"%d.",p[i].num);
outtextxy(48,26+((i-7)*17),msg);
sprintf(msg,"%f",*(wt+i));
outtextxy(208,26+((i-7)*17),msg);
}
for(i=7;i<n;i++)
{
setfillstyle(1,p[i].num);
bar3d(330,25+((i-7)*17),390,35+((i-7)*17),0,0);
}
}
getch();
}