轮转调度算法

#include<stdio.h>

#include<stdlib.h>

#define N 100

typedef struct process {

 int num;

 int time;

 int start;

 int end;

 int begin;  

int freetime;  

int arrivetime;

 int finish;

 int turn;

 double reaction;

 double average;

}

P;

P a[N],b;

int wordtime=0;

int decide(n)

{  

int i,t=0;

 for(i=0;i<n;i++)

 {   

if(a[i].end==1)  

 {    

t=1;  

  }  

 else

  {  

  t=0; 

   break;

 }  

}

if(t==0)   return 0;

else  return 1;

}

void rr(int i,int j,int n,int x)

{  while(decide(n)==0)

 {    

 //j=1;   

for(i=0;i<n;i++)   {

   if(a[i].end==1)    {   

      }  

  else

if(a[i].end==0)    {

    if(a[i].arrivetime<=wordtime)   

  {  

          if(a[i].freetime>0)     

 {       

a[i].freetime--;   

    wordtime++;    

  }    

   if(a[i].freetime==0)   

   {       

a[i].end=1;      

 a[i].finish=wordtime;      

       }          

 }   

  else {  

     for(j=i;j<n;j++)       {   

 if(a[j].arrivetime<=wordtime&&a[j].end==0)  

      {

  x=0;  

       i=j-1;  

       break;   

     }      

  else if(j==i-1)  

      {  

      x=1;    

 break;    

    }    

    else     

          x=1;   

                if(j==n-1&&i!=0)     

           j=-1;     

  }     if(x==1)

    wordtime++;      

        }  

  }

 }

    }

}

void main() {

 int n=5,i,t,sum=0,num=2,j,x=1;  

double average=0,turn=0;

  printf("请输入进程个数:");

  scanf("%d",&n);  

 for(i=0;i<n;i++){

  printf("\n");  

 printf("请输入第%d个进程到达时间:",i+1);

  scanf("%d",&a[i].arrivetime);

  printf("请输入第%d个进程需要时间:",i+1);

  scanf("%d",&a[i].time);

  printf("\n");  

 a[i].start=a[i].arrivetime;  

 a[i].freetime=a[i].time;

//剩余时间赋值  

 a[i].num=i+1;

  a[i].start=a[i].end=0;

 }//输入数据  

 for(i=0;i<n;i++)  {  

 for(t=i+1;t<n;t++)   {

   if(a[t].arrivetime<a[i].arrivetime)    {

    b=a[i];    

 a[i]=a[t];    

 a[t]=b;  

  }  

  else if(a[t].arrivetime==a[i].arrivetime)

   {    

 if(a[i].time>a[t].time)    

 {    

  b=a[i];  

    a[i]=a[t];   

   a[t]=b;     

}   

 }

  }

 }//排序

 rr(i,j,n,x);

 for(i=0;i<n;i++)

 {  

 a[i].turn=a[i].finish-a[i].arrivetime;   

a[i].average=(float)a[i].turn/a[i].time;

 }

   printf("进程号\t完成时间\t周转时间\t带权周转时间\n");

 for(i=0;i<n;i++)  

 printf("%d\t%d\t\t%d\t\t%.2f\n",a[i].num,a[i].finish,a[i].turn,a[i].average);

   for(i=0;i<n;i++)  {

  turn=turn+(float)a[i].turn;   

average=average+(float)a[i].turn/a[i].time;

 }  

turn=turn/n;  

average=average/n;

 printf("平均周转时间\t平均带权周转时间\n");

 printf("%.2f\t\t%.2f\n",turn,average);

posted @ 2016-06-19 18:40  16彭庆聪  阅读(566)  评论(0编辑  收藏  举报