#include<iostream>
using namespace std;
const int N=10;
double daoda[N];//存储到达时间的数组
double fuwu[N]; //存储服务时间的数组
double fuwu_[N];//服务时间的副本
double wancheng[N]={0};//存储完成时间的数组 ,完成时间先都赋值为0
double zhouzhuan[N];//存储周转时间的数组
double daiquanz[N];//存储带权周转时间的数组
string name[N];//每个进程的名字
int main()
{//RR 时间片轮转算法 cout<<"请输入进程数:"<<endl; int n;//作业数cin>>n;cout<<"请按照顺序分别输入"<<n<<"个进程的名字、到达时间和运行时间(h):"<<endl;for(int i=0;i<n;i++){cin>>name[i];//进程的名字 比如A B C 之类的 cin>>daoda[i]>>fuwu[i];//初始条件 存入到达时间和运行时间 fuwu_[i]=fuwu[i];//备份 }double q;cout<<"请输入时间片q:"<<endl;cin>>q;for(int i=0;i<n;i++)//选择排序法 根据到达时间从小到大进行排序 {for(int j=0;j<n;j++){if(daoda[i]<daoda[j]){swap(daoda[i],daoda[j]);//这下面这几步是为了同一个进程的这些时间对应的保持一致 swap(fuwu[i],fuwu[j]);//当到达时间交换了,对应的其他时间也应该交换 swap(fuwu_[i],fuwu_[j]); swap(zhouzhuan[i],zhouzhuan[j]);swap(daiquanz[i],daiquanz[i]);swap(name[i],name[j]);//进程的名字也要跟着作业排序的变化而变化 }}}//下面计算完成时间//----------------------double addfuwu=0;//累计服务时间,初始值设为0 int count=n;//为了不改变进程总数n的值,令count=n int count1=0;//在某一轮轮转中完成的进程 while(count!=0)//当进程数不为0的时候 {count=count-count1;//还剩下没有完成的进程数目 for(int i=0;i<n;i++){if(fuwu[i]<=q)//如果还剩下的服务时间小于时间片 {if(wancheng[i]!=0)//这里是防止在进行新一轮的轮转时,会重复把已经完成的进程算进去 {addfuwu=addfuwu+0;//算进去累计时间加0 }else{addfuwu=addfuwu+fuwu[i];//累计时间就等于之前的累计时间+最后这一轮的真正服务服务时间(反正小于q) wancheng[i]=addfuwu;//则完成时间=目前累计服务时间 count1++;//计算这一次轮转结束的进程数目 }}else{fuwu[i]=fuwu[i]-q;//剩余的服务时间就是服务时间-时间片q addfuwu=addfuwu+q;//累计服务时间=之前服务时间+时间片q(这一轮这个进程的服务时间) }}}// ----------------------//计算周转时间和带权周转时间for(int i=0;i<n;i++){zhouzhuan[i]=wancheng[i]-daoda[i];//周转时间=完成时间-到达时间 daiquanz[i]=zhouzhuan[i]/fuwu_[i];//带权周转时间=周转时间/服务时间 } for(int i=0;i<n;i++){cout<<"进程"<<name[i]<<":";cout<<"到达时间:"<<daoda[i]<<"\t"<<"服务时间:"<<fuwu_[i]<<"\t";cout<<"完成时间:"<<wancheng[i]<<"\t";cout<<"周转时间:"<<zhouzhuan[i]<<"\t"<<"带权周转时间:"<<daiquanz[i]<<endl; } double sum1=0;double sum2=0;for(int i=0;i<n;i++){sum1+=zhouzhuan[i];//计算周转时间的和  sum2+=daiquanz[i]; //计算带权周转时间的和 }cout<<"平均周转时间:"<<sum1/n<<endl;//平均周转时间=周转时间/进程数量 cout<<"平均带权周转时间:"<<sum2/n<<endl;//平均带权周转时间=带权周转时间/进程数量 return 0;
}

测试结果:

设计思路:一开始定义了七个数组用来存储到达时间、服务时间、服务时间副本、完成时间、周转时间、带权周转时间和进程名字,完成时间初始化赋值为0,然后屏幕输入例如进程名字、到达时间和服务时间(运行时间),然后屏幕输入时间片,根据到达时间的先后对进程进行排序,然后时计算完成时间,先是count存入进程总数(不直接用n是防止改变n值影响后面的计算),count1存入每一轮完成的进程数,addfuwu存入累计服务时间,然后设立while循环,当进程数为0的时候结束循环,每一次循环开始先计算剩余进程数赋值给总进程数,然后设立for循环,表示对n个进程调度一轮的调度,在for循环中设立if语句,用来判断这一轮的剩余服务时间和时间片大小的比较,如果剩余服务时间小于等于时间片,先判断这是不是已经结束了的进程,(根据完成时间是不是0来判断),如果是累计服务时间+0,如果不是累计服务时间+这一轮的剩余服务时间,完成时间=累计服务时间,count1++存入完成进程数;如果剩余服务时间大于时间片,剩余服务时间-时间片q,累计服务时间+q;这样while循环下来可以计算完成时间,然后再算周转时间和带权周转时间、平均周转时间和平均带权周转时间,(计算这些时间的时候的服务时间用的是备份的服务时间,因为服务时间在计算完成时间的时候被更改),最后屏幕输出。

原创不易,请大家多多支持呀!小白一枚,欢迎大家提出问题!

时间片轮转算法(RR算法)c++ 数组相关推荐

  1. 操作系统--时间片轮转调度算法(RR算法)

    操作系统–时间片轮转调度算法(RR算法) 实验内容: 模拟实现时间片轮转调度算法,具体如下: 设置进程体:进程名,进程的到达时间,服务时间,,进程状态(W--等待,R--运行,F--完成),进程间的链 ...

  2. 经典时间片轮转RR算法C语言实现

    **RR算法主要体现在两个时机的调度: 1.进程的服务时间用完时,无论时间片到没到,时间片都需要置0. 2.进程的服务时间没用完,而且时间片到了,需要把此进程添加到队尾,时间片置0. 进程都运行结束时 ...

  3. Java操作系统进程调度算法——时间片轮转(RR)算法

    Java操作系统进程调度算法--时间片轮转(RR)算法 文章目录 Java操作系统进程调度算法--时间片轮转(RR)算法 前言 一.算法思想 二.数据结构 1.定义PCB进程控制块 2.实现思路 三. ...

  4. 【操作系统】RR算法(时间片轮转,假设时间片q=1)

    假定在一个处理机上执行的操作如下: 作业 估计服务时间 各作业到达时间 A 2 0 B 3 3 C 1 4 D 5 6 E 4 5 请用RR算法(时间片轮转,假设时间片 q =1)来完成这些作业的调度 ...

  5. java实现操作系统时间片轮转进程调度算法(RR算法)

    Time类 package RR算法; public class time {private int hour;private int min;public int getHour() {return ...

  6. CPU调度算法——FCFS算法/SJF算法/优先级调度算法/RR算法

    文章目录 一.先来先服务(FCFS)调度算法 二.最短作业优先(SJF)算法 1. 非抢占式SJF 2. 抢占式SJF 三.优先级调度算法 1. 非抢占式优先级调度算法 2. 抢占式优先级调度算法 四 ...

  7. 【操作系统】RR算法

    文章目录 一.调度算法 完成时间(核心) 周转时间=完成时间-到达时间 带权周转时间=周转时间 / 服务时间 总结 RR算法(时间片轮转,假设时间片 q =1,q=2,q=4)来完成这些作业的调度情况 ...

  8. C语言实现操作系统的进程调度算法--RR算法

    c语言实现调度算法--RR算法 测试输入为4个进程,时间片q=3,进程为A.B.C.D,序列号为都为0,运行时间分别为6/7/9/12 测试输入为4个进程,时间片q=3,进程为A.B.C.D,序列号为 ...

  9. c语言rr算法,[判断题] 在RR、PF、MAXC/I三种算法中,RR算法的用户公平性最好

    [判断题] 在RR.PF.MAXC/I三种算法中,RR算法的用户公平性最好 更多相关问题 在等差数列中,有,则此数列的前13项之和为()A.24B.39C.52D.104 已知y=xlnx,则y(10 ...

  10. 操作系统进程调度 FCFS,SJF,RR算法(Java实现)

    有用就给个关注呗 进程控制块 为了管理和控制进程,系统在创建每一个进程时,都为其开辟一个专用的存储区,用以随时记录它在系统中的动态特性.通常,把这一存储区称为该进程的"进程控制块" ...

最新文章

  1. base64图片保存获取本地路径
  2. ios和android交互差异,Android 和 iOS 主要交互区别整理
  3. Java 8 中的哈希表
  4. ei会议和ei源刊的区别_核心期刊SCI论文发表 | SCI和EI和核心有什么区别
  5. ajax引入html_Vue中发送ajax请求的库有哪些?
  6. 发布水晶报表时需要在服务器进行如下操作
  7. mysql rac_MySQL Galera集群和ORACLE RAC的实现原理比较
  8. 如何成为一名网络工程师
  9. Tensorflow手写数字识别
  10. C语言处理中文字符,C语言中关于汉字的处理
  11. lpad函数和rpad函数的用法
  12. 谈谈火车票信息泄漏问题
  13. 福师《计算机应用基础》在线作业一,福师《计算机应用基础》在线作业一答案...
  14. 光模块单模和多模的区别
  15. SQL SERVER 为现有表中增加列
  16. 【电力系统】经济调度、最优潮流、机组组合
  17. linux设置开机自启某个命令
  18. Halcon标定板标定
  19. ACM-ICPC 2018 南京赛区网络预赛 I Skr (马拉车+hash去重)或(回文树)
  20. 调起安卓手机自带应用商店

热门文章

  1. mysql用alter修改root密码_mysql修改root密码
  2. R049---UiPath发不定数量附件outlook邮件
  3. ROSS仿真系统简单教程
  4. 我能创未来——中国青年创业行动
  5. 《深入线出MFC》读书笔记(一):必备的Win32程序设计原理
  6. 算法时间复杂度及其计算
  7. win7 网络打印机 未授予用户在此计算机上的请求登录类型,如何解决Win7“未授予用户在此计算机上的请求登录类型quot;问题 - Win10专业版官网...
  8. 拉姆达表达式 filter与map的讲解
  9. native2ascii详解
  10. 聚合数据以科技赋能数字化转型,提升金融服务质效