📄 dd.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 + -