如何在这个代码的基础上进行优先级调度算法(静态优先级、非抢占式、1为高优先级)


#include 
#include 
#include 
#include  
using namespace std;
struct fcfs{   //先来先服务算法从这里开始 
    char name[10];    
    float arrivetime;    
    float servicetime;    
    float starttime;    
    float finishtime;    
    float zztime;    //周转时间
    float dqzztime;    //带权周转时间
};   //定义一个结构体,里面包含的有一个进程相关的信息 
fcfs a[100];  

void input(fcfs *p,int N)    //进程的输入
{ 
    int i;   
   cout<<endl; 
      printf("    请您输入进程的           名字   到达时间   服务时间:  (例如: a 0 100)\n\n");    
    for(i=0;i<=N-1;i++)    
    {    
        printf("    请您输入进程%d的信息:\t",i+1);
        scanf("\t\t\t%s%f%f",&p[i].name,&p[i].arrivetime,&p[i].servicetime);   
        
    }    
}    

void Print(fcfs *p,float arrivetime,float servicetime,float starttime,float finishtime,float zztime,float dqzztime,int N)    //先来先服务调度算法的输出
{
    int k;      
    printf("\n\n调用先来先服务算法以后进程运行的顺序是: ");    
    printf("%s",p[0].name);    
    for(k=1;k<N;k++)    
    {
        printf("-->%s",p[k].name);    
    }   
     cout<<endl; 
    printf("\n具体进程调度信息:\n");    
    printf("\t进程名\t到达时间\t服务时间\t开始时间\t结束时间\t周转时间\t带权周转时间\n");    
   
     for(k=0;k<=N-1;k++)    
     {
        printf("\t %s\t%-.2f\t         %-.2f\t         %-.2f\t         %-.2f\t         %-.2f\t           %-.2f\n",p[k].name,p[k].arrivetime,
             p[k].servicetime,p[k].starttime,p[k].finishtime,p[k].zztime,p[k].dqzztime);
     }      
     getchar();    //此处必须要有这个函数,否则就看不到显示器上面的输出,可以看到的结果只是一闪而过的一个框剪 
}
  
void sort(fcfs *p,int N)  //排序  
{    
     for(int i=0;i<=N-1;i++)    
         for(int j=0;j<=i;j++)    
             if(p[i].arrivetime<p[j].arrivetime)    
             {    
                 fcfs temp;    
                 temp=p[i];    
                 p[i]=p[j];    
                 p[j]=temp;    
             }    
}     

void deal(fcfs *p, float arrivetime,float servicetime,float starttime,float finishtime,float &zztime,float &dqzztime,int N)   
//运行阶段,计算开始时间和完成时间,计算周转时间和带权周转时间   
{
    
int k;    
    for(k=0;k<=N-1;k++)    
     {    
         if(k==0)    
         {     
             p[k].starttime=p[k].arrivetime;    
             p[k].finishtime=p[k].arrivetime+p[k].servicetime;}    
   
         else   
         {    
             p[k].starttime=p[k-1].finishtime;    
             p[k].finishtime=p[k-1].finishtime+p[k].servicetime;}    
     }    
   
     for(k=0;k<=N-1;k++)    
     {    
         p[k].zztime=p[k].finishtime-p[k].arrivetime;    
         p[k].dqzztime=p[k].zztime/p[k].servicetime;    
         
     } 

}       

void FCFS(fcfs *p,int N)    
{    
float arrivetime=0,servicetime=0,starttime=0,finishtime=0,zztime=0,dqzztime=0;
sort(p,N);    
    deal(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N);    
    Print(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N);   
getchar();       

}  //先来先服务算法到此结束 

struct sjf{//最短进程优先调度算法从这里开始 
    char name[10];
    float arrivetime;   //到达时间
    float servicetime;  //运行时间
    float starttime;    //开始时间
    float finishtime;   //完成时间

};
sjf a1[100];

void input(sjf *p,int N1)//进程信息输入
{ 
    int i;
    cout<<endl;
    printf("    请您输入进程的           名字   到达时间   服务时间:  (例如: a 0 100)\n\n");
    for(i=0;i<=N1-1;i++)
    { 
       printf("    请您输入进程%d的信息:\t",i+1);
       scanf("\t\t\t%s%f%f",&p[i].name,&p[i].arrivetime,&p[i].servicetime);
    }
}

void Print(sjf *p,float arrivetime,float servicetime,float starttime,float finishtime,int N1)//最终结果输出
{
     int k;
     printf("\n\t调用最短进程优先调度算法以后进程的调度顺序为:");
     printf("%s",p[0].name);
     for(k=1;k<N1;k++)
     {printf("-->%s",p[k].name);} 
     cout<<endl; 
     printf("\n进程具体调度信息:\n");
     printf("\n\t进程名\t到达时间\t运行时间\t开始时间\t完成时间\n");
    
     for(k=0;k<=N1-1;k++)
     {
                        printf(" \t%s\t  %-.2f\t\t  %-.2f\t\t  %-.2f\t\t  %-.2f\t\n",p[k].name,p[k].arrivetime,
         p[k].servicetime,p[k].starttime,p[k].finishtime);
      }
         
          getchar();
   
}
void sort(sjf *p,int N1)//排序
{
     for(int i=0;i<=N1-1;i++)
         for(int j=0;j<=i;j++)
             if(p[i].servicetime<p[j].servicetime)
             {
                 sjf temp;
                 temp=p[i];
                 p[i]=p[j];
                 p[j]=temp;
             }
}

void deal(sjf *p, float arrivetime,float servicetime,float starttime,float finishtime,int N1)//运行阶段
{ int k;
    for(k=0;k<=N1-1;k++)
     {
         if(k==0)
            { 
                p[k].starttime=p[k].arrivetime;
                 p[k].finishtime=p[k].arrivetime+float(p[k].servicetime)/60;}
         else
           {
                p[k].starttime=p[k-1].finishtime;
                 p[k].finishtime=p[k-1].finishtime+float(p[k].servicetime)/60;}
     }
   
} 

void sjff(sjf *p,int N1)
{
        float arrivetime=0,servicetime=0,starttime=0,finishtime=0;
        sort(p,N1);
for(int m=0;m<N1-1;m++)
        {if(m==0)
            p[m].finishtime=p[m].arrivetime+float(p[m].servicetime)/60;
         else
            p[m].finishtime=p[m-1].finishtime+float(p[m].servicetime)/60;
  
         int i=0;
         for(int n=m+1;n<=N1-1;n++)
         {
             if(p[n].arrivetime<=p[m].finishtime)
             i++;
         }
         float min=p[m+1].servicetime;
         int next=m+1;
         for(int k=m+1;k<m+i;k++)
         {
          if(p[k+1].servicetime<min)
            {min=p[k+1].servicetime;
            next=k+1;}
            
         }
            sjf temp;
            temp=p[m+1];
            p[m+1]=p[next];
            p[next]=temp;
        }
        
        deal(p,arrivetime,servicetime,starttime,finishtime,N1);
   
        Print(p,arrivetime,servicetime,starttime,finishtime,N1);

        getchar();
}//最短进程优先调度算法到这里结束 
char menu()//用来输出相关信息的函数 
{
     char cse1;
     while(1)
     {
     system("cls");
     fflush(stdin); //清空缓冲区
     cout<<endl; 
     cout<<endl; 
     cout<<"\t"<<"|| <<<<<<<<<<<<欢<<<<<<<<<<< >>>>>>>>>>>>迎>>>>>>>>>>>  ||"<<endl ;
     cout<<"\t"<<"||                                                      ||"<<endl ;
     cout<<"\t"<<"||"<<"\t  实 验 一    进 程 调 度 算 法 实 验"<<"\t\t"<<"||"<<endl; 
     cout<<"\t"<<"||                                                      ||"<<endl ;
     cout<<"\t"<<"||"<<"\t\t  1.先来先服务调度算法  "<<"\t\t"<<"||"<<endl;
     cout<<"\t"<<"||                                                      ||"<<endl ;
     cout<<"\t"<<"||"<<"\t\t  2.最短进程优先调度算法  "<<"\t\t"<<"||"<<endl; 
     cout<<"\t"<<"||                                                      ||"<<endl ;
     cout<<"\t"<<"|| <<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>> ||"<<endl ;_
```c



```_
     cout<<endl;
     cout<<endl;
     cout<<"\t\t    请输入您的选择(1/2):";
     cse1=getchar();           
     if(cse1<'1'||cse1>'2')
       cout<<"你的输入有错!"<<endl;                                 
       else
       break; 
     }
     return cse1;
}

int main(int argc, char *argv[])
{
    while(1)
    {
      switch(menu())
           {
           case '1':
           int N;    
           cout<<endl;
           cout<<endl; 
           printf("\t\t<<---!!!@@@先来先服务调度算法@@@!!!--->>\n");    
           cout<<endl;
           printf("输入进程数目:");    
           scanf("%d",&N);    
           input(a,N);    
           FCFS(a,N); 
                   
           case '2':      
           int N1;
           cout<<endl;
           cout<<endl; 
           printf("\t\t<<---!!!@@@最短进程优先调度算法@@@!!!--->>\n");
           cout<<endl;
            printf("输入进程数目: ");
            scanf("%d",&N1);
            input(a1,N1);
            sjf *b=a1;
            sjf *c=a1;
            sjff(b,N1);
            getchar();   
            }
    }
    system("PAUSE");
    return EXIT_SUCCESS;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^