实例介绍
【实例简介】
【实例截图】
【实例截图】
【核心代码】
#include<iostream> #include<iomanip> using namespace std; struct Process//定义进程控制块 { char name[10];// 进程名 int priority; //进程优先级 float arive; //进程到达时间 float run; //进程运行时间 float start;//进程开始时间 float finish; //进程完成时间 float zz; //进程周转时间 float dqzz; //进程带权周转时间 bool IsRun; //进程是否运行标志 }; float finish = 0.0f; int count=0; void print(Process pro[],int n)//显示进程 { cout<<"原输入进程信息:"<<endl; cout<<setw(14)<<"进程编号"<<setw(10)<<"进程名"<<setw(10)<<"优先级"<<setw(10)<<"到达时间"<<setw(10)<<"运行时间"<<endl; for(int i=0;i<=n-1;i ) { cout<<setw(10)<<"进程"<<i 1<<setw(10)<<pro[i].name<<setw(10)<<setw(10)<<pro[i].priority <<setw(10)<<pro[i].arive<<setw(10)<<pro[i].run<<endl; } } void fcfs(Process pro[],int n1)//先来先服务法 { //先按照提交时间从小到大排列 for(int i = 0 ; i <=n1-2;i ) { int min = i; for(int j = i 1;j<n1;j ) { if(pro[j].arive < pro[min].arive) { min = j; } } Process tmpPrp; memcpy(&tmpPrp,&pro[i],sizeof(Process)); memcpy(&pro[i],&pro[min],sizeof(Process)); memcpy(&pro[min],&tmpPrp,sizeof(Process)); } ///////////////// int n; cout<<"进程调度顺序为:"; for(n = 0;n <= n1-1;n ) cout<<pro[n].name<<" "; cout<<endl; pro[0].finish = pro[0].arive pro[0].run; pro[0].start=pro[0].arive; pro[0].zz = pro[0].finish - pro[0].arive; pro[0].dqzz = pro[0].zz/pro[0].run; for(n=1;n <= n1;n ) { if(pro[n].arive<pro[n-1].finish) { pro[n].finish = pro[n].run pro[n-1].finish; pro[n].start=pro[n-1].finish; pro[n].zz = pro[n].finish-pro[n].arive; } else { pro[n].finish=pro[n].run pro[n].arive; pro[n].start=pro[n].arive; pro[n].zz=pro[n].run; } } cout<<"调度过程:"<<endl; cout<<setw(14)<<"进程编号"<<setw(10)<<"进程名"<<setw(10)<<"优先级"<<setw(10)<<"到达时间"<<setw(10)<<"运行时间"<<setw(10)<<"开始时间"<<setw(10)<<"完成时间"<<endl; for( i=0;i<=n1-1;i ) { cout<<setw(10)<<"进程"<<i 1<<setw(10)<<pro[i].name<<setw(10)<<setw(10)<<pro[i].priority <<setw(10)<<pro[i].arive<<setw(10)<<pro[i].run<<setw(10)<<pro[i].start<<setw(10)<<pro[i].finish<<endl; } float avezz,avedqzz; avezz=0; avedqzz=0; for(n=0;n<=n1-1;n ) { avezz =pro[n].zz; } avezz=avezz/n1; cout<<"平均周转时间为:"<<avezz<<endl; for(n=0;n<=n1-1;n ) { pro[n].dqzz=pro[n].zz/pro[n].run; avedqzz = pro[n].dqzz; } avedqzz=avedqzz/n1; cout<<"带权平均周转时间为:"<<avedqzz<<endl; } int FindShouldBeRun(Process pro[],int n)//判定优先级并返回在进程表中索引 { int index = -1; //sort(pro,n) ; for(int i = 0 ; i < n; i ) { if(pro[i].arive <= finish && pro[i].IsRun == false) { index = i; if(i < n-1) { for(i = i 1; i <= n-1;i ) { if(pro[i].arive <= finish &&pro[i].priority > pro[index].priority && pro[i].IsRun == false) { index = i; } } return index; } return index; } } return index; } void pri(Process pro[],int n)//优先级法 { int i,j; for(i = 0 ; i <=n-2;i ) { int min = i; for( j = i 1;j<n;j ) { if(pro[j].arive < pro[min].arive) { min = j; } if(pro[j].arive==pro[min].arive&&pro[j].priority>pro[min].priority) { min=j; } } Process tmpPrp; memcpy(&tmpPrp,&pro[i],sizeof(Process)); memcpy(&pro[i],&pro[min],sizeof(Process)); memcpy(&pro[min],&tmpPrp,sizeof(Process)); } cout<<"进程调度顺序为:"; cout<<pro[0].name<<" "; pro[0].finish = pro[0].arive pro[0].run; pro[0].start=pro[0].arive; pro[0].zz = pro[0].finish - pro[0].arive; pro[0].dqzz = pro[0].zz/pro[0].run; pro[0].IsRun = true; finish = pro[0].finish; for(i = 1;i <= n-1; i ) { int index = FindShouldBeRun(pro,n); if(index == -1) { for(i=0;i<n;i ) { if(pro[i].IsRun==false) break; } cout<<pro[i].name<<" "; pro[i].IsRun = true; pro[i].finish=pro[i].arive pro[i].run; pro[i].start=pro[i].arive; pro[i].zz=pro[i].run; finish=pro[i].finish; pro[i].dqzz = pro[i].zz /pro[i].run; } else { cout<<pro[index].name<<" "; pro[index].IsRun = true; pro[index].finish = finish pro[index].run; pro[index].start=finish; pro[index].zz = pro[index].finish - pro[index].arive; finish = pro[index].run; pro[index].dqzz = pro[index].zz /pro[index].run; } } cout<<endl; for(i = 0 ; i <=n-2;i )//按开始时间排序 { int min = i; for( j = i 1;j<n;j ) { if(pro[j].start < pro[min].start) { min = j; } } Process tmpPrp; memcpy(&tmpPrp,&pro[i],sizeof(Process)); memcpy(&pro[i],&pro[min],sizeof(Process)); memcpy(&pro[min],&tmpPrp,sizeof(Process)); } cout<<"调度过程:"<<endl; cout<<setw(14)<<"进程编号"<<setw(10)<<"进程名"<<setw(10)<<"优先级"<<setw(10)<<"到达时间"<<setw(10)<<"运行时间"<<setw(10)<<"开始时间"<<setw(10)<<"完成时间"<<endl; for(i=0;i<=n-1;i ) { cout<<setw(10)<<"进程"<<i 1<<setw(10)<<pro[i].name<<setw(10)<<setw(10)<<pro[i].priority <<setw(10)<<pro[i].arive<<setw(10)<<pro[i].run<<setw(10)<<pro[i].start<<setw(10)<<pro[i].finish<<endl; } float zzTime = 0.0f; float dqzzTime = 0.0f; for(j = 0 ; j < n ; j ) { zzTime = pro[j].zz; dqzzTime = pro[j].dqzz; } zzTime /= n; dqzzTime /= n; cout<<"平均周转时间:"<<zzTime<<endl; cout<<"平均带全周转时间:"<<dqzzTime<<endl; return ; } int main() { int i,j; int n; cout<<"请输入进程个数:"; cin>>n; Process *pro = new Process[n]; Process *pro1 = new Process[n]; Process *pro2 = new Process[n]; for(i = 0 ; i < n; i ) { memset(&pro[i],0,sizeof(Process)); memset(&pro1[i],0,sizeof(Process)); memset(&pro2[i],0,sizeof(Process)); } cout<<"请输入进程名:"; for(i=0;i<=n-1;i ) cin>>pro[i].name; cout<<"请输入进程优先级:"; for(i=0;i<=n-1;i ) cin>>pro[i].priority; cout<<"请输入各进程到达时间:"; for(i=0;i<=n-1;i ) cin>>pro[i].arive; cout<<"请输入各进程运行时间:"; for(i=0;i<=n-1;i ) cin>>pro[i].run; for(i=0;i<n;i ) { pro1[i]=pro[i]; pro2[i]=pro[i]; } system("pause"); system("cls"); while(true) { cout<<"\t\t"<<"********进程调度模拟算法********"<<endl; cout<<"\t\t\t"<<"1.先来先服务法:"<<endl; cout<<"\t\t\t"<<"2.优先法:"<<endl; cout<<"\t\t\t"<<"其他.exit:"<<endl; cin>>j; if(j==1) { print(pro,n); fcfs(pro1,n); } else if(j==2) { print(pro,n); pri(pro2,n); } else { return 0; } system("pause"); system("cls"); } }
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论