C++ 实现先来先服务 (FCFS) 进程调度算法
#include
int n; //进程数
void input(); //输入数据函数 void display(); //输出数据函数 void FCFS(); //先来先服务算法 bool cmp1(process p1,process p2); //比较函数1,实现按进程到达时间升序排序 bool cmp2(process p1,process p2); //比较函数2,实现按进程编号升序排序
int main(){ input(); FCFS(); display(); return 0; }
void input(){ //输入进程数,每个进程的到达时间和服务时间 cout<<"请输入进程个数n:"; cin>>n; cout<<"请分别输入每个进程的到达时间和服务时间:"<<endl; for (int i=0;i<n;i++){ cin>>p[i].ArrivalTime>>p[i].ServiceTime; p[i].pid = i+1; } }
void display(){ sort(p,p+n,cmp2); cout<<"******************************************************"<<endl; cout<<"进程相关信息如下:"<<endl; cout<<setw(10)<<"进程名(ID)"<<" "; //setw(10)设置输出宽度 cout<<setw(10)<<"到达时间"<<" "; cout<<setw(10)<<"服务时间"<<" "; cout<<setw(10)<<"完成时间"<<" "; cout<<setw(10)<<"周转时间"<<" "; cout<<setw(10)<<"带权周转时间"<<endl; for (int i = 0;i<n;i++){ cout<<setw(10)<<p[i].pid<<" "; cout<<setw(10)<<p[i].ArrivalTime<<" "; cout<<setw(10)<<p[i].ServiceTime<<" "; cout<<setw(10)<<p[i].FinishTime<<" "; cout<<setw(10)<<p[i].FinishTime-p[i].ArrivalTime<<" "; cout<<setw(10)<<(p[i].FinishTime-p[i].ArrivalTime)*1.0/p[i].ServiceTime<<" "<<endl; } }
void FCFS(){
sort(p,p+n,cmp1);
int startTime=0;
for(int i=0;i<n;i++){
startTime = max(p[i].ArrivalTime,p[i-1].FinishTime);
p[i].FinishTime = startTime + p[i].ServiceTime;
}
}
bool cmp1(process p1,process p2){ return p1.ArrivalTime < p2.ArrivalTime; //按到达时间升序排序 }
bool cmp2(process p1,process p2){ return p1.pid < p2.pid; //按进程id升序排序 } 程序中哪部分代码用于求周转时间?哪部分代码用于求带权周转时间? 内容: 求周转时间的部分代码是:
p[i].FinishTime-p[i].ArrivalTime
求带权周转时间的部分代码是:
(p[i].FinishTime-p[i].ArrivalTime)*1.0/p[i].ServiceTime
原文地址: https://www.cveoy.top/t/topic/n46s 著作权归作者所有。请勿转载和采集!