Saturday, August 9, 2014

FCFS and SJF program

 This is a program for the implementation of First Come First Serve and Shortest Job First Scheduling. If you have any doubts, please let me know.

#include<stdio.h>
#include<string.h>
struct process
{
   int arr,bur,wait,turn,t;
   char pid[5];
}p[100],temp;

int n;
void chart()
{
            int i,j,k;
            printf("0");
            for(j=0;j<n;j++)
            {
                        i=0;
                        while(i!=p[j].bur)
                        {
                                    printf("=");
                                    i++;
                        }
            printf("%d",p[j].t);
            }
            printf("\n");
            i=0;
            printf("p%s",p[0].pid);
           
            for(j=0,k=1;j<n-1;j++,k++)
            {
                        while(i!=p[j].t)
                        {
                                    printf(" ");
                                    i++;
                        }
            printf("p%s",p[k].pid);
            }
            printf("\n");

}

void avg()
    {
        int i;
        float avgw=0,avgt=0;
        for(i=0;i<n;i++)
       {
        avgw=avgw+p[i].wait;
        avgt=avgt+p[i].turn;
      }
    avgw=avgw/n;
    avgt=avgt/n;

    printf("\nAverage waiting time :%d\nAverage turnaround time :%d\n",avgw,avgt);
 }


void disp()
{
         printf("\npid\tburst\tarrival\twait\tturnaround\n");
         int i;
         for(i=0;i<n;i++)
            {
            printf("%s\t%d\t%d\t%d\t%d\n",p[i].pid,p[i].bur,p[i].
arr,p[i].wait,p[i].turn);
        }
    avg();
    chart();

}

void fcfs()
{
        int i,j;
         for(i=0;i<n-1;i++)
            {
            for(j=i+1;j<n;j++)
               {
                if(p[i].arr>p[j].arr)
                {
                    temp=p[i];
                    p[i]=p[j];
                    p[j]=temp;
                }
             }
        }
        p[0].wait=0;
        p[0].turn=p[0].wait+p[0].bur;
                        p[0].t=p[0].bur;

        for(i=1;i<n;i++)
       {
            p[i].t=p[i-1].t+p[i].bur;
            p[i].wait=p[i-1].t-p[i].arr;
            p[i].turn=p[i].wait+p[i].bur;
      }
                        disp();
}


void sjf()
{
            int i,j;
            for(i=0;i<n-1;i++)
            {
            for(j=i+1;j<n;j++)
                {
                if(p[i].arr>p[j].arr)
                {
                    temp=p[i];
                    p[i]=p[j];
                    p[j]=temp;
                }
                }
            }
            for(i=1;i<n-1;i++)
            {
            for(j=i+1;j<n;j++)
                {
                if(p[i].bur>p[j].bur)
                {
                    temp=p[i];
                    p[i]=p[j];
                    p[j]=temp;
                }
                }
          }

            p[0].wait=0;
            p[0].turn=p[0].wait+p[0].bur;
            p[0].t=p[0].bur;
            for(i=1;i<n;i++)
            {
               p[i].t=p[i-1].t+p[i].bur;
               p[i].wait=p[i-1].t-p[i].arr;
               p[i].turn=p[i].wait+p[i].bur;
            }
                disp();
}
void main()
{
    int j,i,ch;
    printf("Enter number of processess : ");
    scanf("%d",&n);
    for(i=0;i<n;i++)
        {
            printf("Enter pid : ");
            scanf("%s",p[i].pid);
            printf("enter arrival time : ");
            scanf("%d",&p[i].arr);
            printf("Enter burst time : ");
            scanf("%d",&p[i].bur);
        }


    printf("\nMENU\n1.FCFS\n2.SJF\n3.exit\nEnter your choice : ");
    scanf("%d",&j);
    switch(j)
    {
    case 1:fcfs();
              break;
    case 2:  sjf();
              break;
    case 3:
          break;
    default : printf("Wrong Choice");
    }
}





No comments:

Post a Comment