Showing posts with label first come first serve. Show all posts
Showing posts with label first come first serve. Show all posts

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");
    }
}