⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dd.cpp

📁 进程管理调度算法,可以对进程的管理有一定的了解
💻 CPP
字号:
#include <iostream.h>



struct course_Info
{
	  
	char course_name[20];    //进程名
	int  enter_time;       //进入时间
	int run_time;          //运行时间
	int begin_time;        //开始时间
	int end_time;            //完成时间
	int turnover_time;             //周转时间
    double w_turnover_time;//带权周转时间
	int wait_time;//等待时间
	    
};
typedef struct course_Info Course;
void fcfs(Course p[],int num);
int  min(Course p[],int num);
void spf(Course p[],int num);

void menu(Course p[],int num);
void print(Course p[],int num);

void main()
{  
	int num; 
    Course *p;
    cout<<"输入进程的个数:";
    cin>>num;
    p=new Course[num];
    menu(p,num);
}

void menu(Course p[],int num)
{

int i;
	for(i=0;i<num;i++)
	{
        cout<<"第"<<i+1<<"个进程";
		cout<<"输入进程名:"<<endl;
		cin>>p[i].course_name;
		cout<<"进入系统时间:"<<endl;
		cin>>p[i].enter_time;
		cout<<"运行时间"<<endl;
		cin>>p[i].run_time;
	}



  int choice, exit_flag=1;
while (exit_flag)
	{
	cout<<endl;
    	cout<<"          *******       算法列表              *******"<<endl;
		cout<<"          *******                             *******"<<endl;
		cout<<"          *******   1.  先来先服务FCFS        *******"<<endl;
		cout<<"          *******   2.  短进程优先SPF         *******"<<endl;
		cout<<"          *******   3.  高级优先级调度算法HPF *******"<<endl;
		cout<<"          *******   4.  时间片轮转RR          *******"<<endl;
	    cout<<"          *******   0.  退出                  *******"<<endl;

		cout<<"请选择(0-4):"<<endl;
		cin>>choice;	
		switch(choice)
		{
			case 1:	    fcfs(p,num);
				        break;
	                   

		  	case 2:		spf(p,num);
				       break;		
				        

			case 3:    break;
						
				 
			case 4:	
				        break;




			case 0:		  exit_flag=0;
				           break;
				    	 
				default:  cout<<"警告, 请再次选择..."<<endl;		 

						
					
		
		}
	}
 
}

void fcfs(Course p[],int num)
{

int i;

	
	     p[0].begin_time=p[0].enter_time;
         p[0].end_time=p[0].enter_time+p[0].run_time;
         p[0].turnover_time=p[0].end_time-p[0].enter_time;
         p[0].w_turnover_time=p[0].turnover_time/p[0].run_time;
		 p[0].wait_time=p[0].turnover_time-p[0].run_time;

	for( i=1;i<num;i++)
	{
		if(p[i-1].end_time>p[i].enter_time)
       
	     p[i].begin_time=p[i-1].end_time;
       else
		   p[i].begin_time=p[i].enter_time;

         p[i].end_time=p[i].begin_time+p[i].run_time;
		 p[i].turnover_time=p[i].end_time-p[i].enter_time;
         p[i].w_turnover_time=p[i].turnover_time/p[i].run_time;
         p[i].wait_time=p[i].turnover_time-p[i].run_time;
	}



  print(p,num);
  
}

int min(Course p[],int num)
{
   int mi;
   mi=p[1].run_time;
   

   for(int j=1;j<num;j++)
   {
	   if(mi>p[j].run_time)
		   mi=p[j].run_time;
   }
   return mi;  
}

void spf(Course p[],int num)
{     int a=num;
      int mi;
	  int k=0;
	  int b[10];
	  Course q[10];
         p[0].begin_time=p[0].enter_time;
         p[0].end_time=p[0].enter_time+p[0].run_time;
         p[0].turnover_time=p[0].end_time-p[0].enter_time;
         p[0].w_turnover_time=p[0].turnover_time/p[0].run_time;
         p[0].wait_time=p[0].turnover_time-p[0].run_time;

         while(num>1)
		 {
          mi=min(p,num);
		 for(int i=1;i<num;i++)
		 {

		    if(p[i].run_time==mi)
			 {
				
				
		
				 b[k]=i;
				 q[k]=p[i];
				 k++;

				 for(int n=i;n<num-1;n++)
					 p[n]=p[n++];
				     num--;

			 }
				 
		 }
			
			
		 }
     if(p[0].end_time>q[0].enter_time)
		 q[0].begin_time=p[0].end_time;
	 else
		 q[0].begin_time=q[0].enter_time;
     
         q[0].end_time=q[0].begin_time+q[0].run_time;
	 q[0].turnover_time=q[0].end_time-q[0].enter_time;
         q[0].w_turnover_time=q[0].turnover_time/q[0].run_time;
         q[0].wait_time=q[0].turnover_time-q[0].run_time;

         for(int j=1;j<=k;j++)
		 {
          if(q[j-1].end_time>q[j].enter_time)
			  q[j].begin_time=q[j-1].end_time;
		  else
			  q[j].begin_time=q[j].enter_time;

          

         q[j].end_time=q[j].begin_time+q[j].run_time;
		 q[j].turnover_time=q[j].end_time-q[j].enter_time;
         q[j].w_turnover_time=q[j].turnover_time/q[j].run_time;
         q[j].wait_time=q[j].turnover_time-q[j].run_time;

		 }
		 for(int t=0;t<k;t++)
		 {
			p[b[t]]= q[t];
		 }
		 
   print(p,a);

}

void print(Course p[],int num)
{
	double T=0;
	double W=0;
	cout<<"进程"<<"  "<<"进入时间"<<"  "<<"运行时间"<<"  "<<"开始时间"<<
			"  "<<"完成时间"<<"  "<<"周转时间"<<"  "<<"带权周转时间"<<" "<<"等待时间"<<endl;
	for(int i=0;i<num;i++)
	{
		
		cout<<p[i].course_name<<"      "<<p[i].enter_time<<
			"         "<<p[i].run_time<<"           "<<p[i].begin_time<<
			"           "<<p[i].end_time<<"        "<<p[i].turnover_time<<
			"        "<<p[i].w_turnover_time<<"        "<<p[i].wait_time<<endl;
	}

	for(int j=0;j<num;j++)
	{
		
		T=T+p[j].turnover_time;
        W=W+p[j].w_turnover_time;
	}
 cout<<"平均周转时间"<<T/num<<endl;
 cout<<"平均带权周转时间"<<W/num<<endl;

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -