#include #include #include #include #include <Windows.h> //#include<bits/stdc++.h> using namespace std; struct process{ //进程结构体 int pid; //进程id int ArrivalTime; //到达时间 int ServiceTime; //服务时间 int FinishTime; //完成时间 }; const int N=100; //最大进程数 process p[N];
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); double totalTurnaroundTime = 0, totalWeightTurnaroundTime = 0; 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; totalTurnaroundTime += p[i].FinishTime-p[i].ArrivalTime; totalWeightTurnaroundTime += (p[i].FinishTime-p[i].ArrivalTime)*1.0/p[i].ServiceTime; } cout<<'平均周转时间:'<<totalTurnaroundTime/n<<endl; cout<<'平均带权周转时间:'<<totalWeightTurnaroundTime/n<<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升序排序 }


原文地址: https://www.cveoy.top/t/topic/n48B 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录