#include<iostream>
#include"string"
using namespace std;
struct JOB {string name;   //作业名字int length;    //作业长度,可以用来判断作业是否合法(小于0时,为非法进程)int printer;   //执行作业需要的打印机数目int tape;      //执行作业需要的磁带机的数目int runtime;   //作业要求服务时间int waittime;  //作业在系统中等待时间//int next;      //指向下一个作业控制块的指针,先不用。float xyb;     //自己加上的一个响应比,判断优先执行哪个作业int sfzx;      //标志位,用来标志该作业块是否执行过,0表示未执行,1表示已执行。
};
//1、其实这个结构体没有考虑到到达时间的问题,统一认为处理时刻所有作业都已经到达。
//2、模拟多处理机的时候,不太了解怎么实现异步的操作。
const int max = 5;  //允许的就绪队列最大作业数
const int printer = 2; //打印机数量
const int tape = 4;   //磁带机数量
const int memory = 64;  //主存容量。
//这些常量被用作判断输入的数据是否合法。
string search_name(JOB job_small[], int count) {  //里面的count值为就绪队列中作业的个数。//search_name里面的标志位都是直接用的job_small里面的,而不是job_hrrn里面的。string name;JOB job_hrrn[max];     //如果不使用job_hrrn这个中间结构体的话,名称和数据结构里面的数据不会统一。for (int i = 0; i < count; i++) {if (job_small[i].sfzx == 0) {  //筛除已经工作完成的作业job_hrrn[i].name = job_small[i].name;job_hrrn[i].runtime = job_small[i].runtime;job_hrrn[i].waittime = job_small[i].waittime;    //之所以取出这两个信息就是为了下面的计算优先权。job_hrrn[i].xyb = (job_hrrn[i].runtime + job_hrrn[i].waittime) / (float)job_hrrn[i].runtime;  //计算响应比(优先权),需要考虑到小数的情况。}}for (int i = 0; i < count; i++) {  //将作业按照优先权,从大到小形成新的队列。for (int j = i + 1; j < count; j++) {if (job_small[i].sfzx == 0) {   //排除已经访问过的作业块if (job_hrrn[i].xyb < job_hrrn[j].xyb) {   //这里的j写成i了,犯了致命错误。string temp;float tmp;temp = job_hrrn[i].name;job_hrrn[i].name = job_hrrn[j].name;job_hrrn[j].name = temp;tmp = job_hrrn[i].xyb;job_hrrn[i].xyb = job_hrrn[j].xyb;job_hrrn[j].xyb = tmp;} //end if}//end if}  //end for}  //end forfor (int i = 0; i < count; i++) {   //实现每调用一次search_name(),就能够把响应比最高的作业的名称返回。if (job_small[i].sfzx == 0) {name = job_hrrn[i].name;break;}}return name;
}void input() {JOB job_small[max]; //副结构体,负责作为search_name里的形参。int count = 0;   //计数器,记录就绪队列中一共有多少个作业。int job_memory = 0;for (int i = 0; i < max; i++) {   //给job_small赋值printf("请输入作业名称、作业长度、需要打印机数目、需要磁带机数目、要求服务时间、等待时间(输入作业名称为0时,结束作业输入):\n");//计算优先权的工作放在方法search_name里面操作。cin >> job_small[i].name >> job_small[i].length >> job_small[i].printer >> job_small[i].tape >> job_small[i].runtime >> job_small[i].waittime;job_memory = job_memory + job_small[i].length;while (job_small[i].length < 0 || job_memory > 64 || job_small[i].printer > 2 || job_small[i].tape > 4) {  //作业长度非法或者是作业总内存过载的情况。if(job_small[i].length < 0)printf("错误:此作业长度有误,请重新输入!\n");if (job_memory > 64) {printf("错误:内存超载,请重新输入!\n");job_memory = job_memory - job_small[i].length;}if (job_small[i].printer > 2)printf("错误:打印机数量不足,请重新输入!\n");if (job_small[i].tape > 4)printf("错误:磁带机数量不足,请重新输入!\n");printf("请输入作业名称、作业长度、需要打印机数目、需要磁带机数目、要求服务时间、等待时间:\n");cin >> job_small[i].name >> job_small[i].length >> job_small[i].printer >> job_small[i].tape >> job_small[i].runtime >> job_small[i].waittime;job_memory = job_memory + job_small[i].length;if (job_small[i].length > 0 && job_memory <= 64 && job_small[i].printer <= 2 && job_small[i].tape <= 4)break;}printf("\n");if (job_small[i].name == "0")break;count++;job_small[i].sfzx = 0;  //将标志位记为0,既未访问过。}JOB job[max];   //主结构体,负责作业的全部字段,也是最后负责输出的结构体for (int i = 0; i < count; i++) {//在后面代码再给结构体加上信息job[i].sfzx = 0;}//核心算法int index = 0;    //做嵌套内循环的下标使用,千万不能放在第一个循环里面,不然使得下标一直是0;for (int m = 0; m < count; m++) {string name = search_name(job_small, count);for (int i = 0; i < count; i++) {if (job_small[i].name == name) {job[index].name = job_small[i].name;job[index].length = job_small[i].length;job[index].printer = job_small[i].printer;job[index].tape = job_small[i].tape;job[index].waittime = job_small[i].waittime;job[index].runtime = job_small[i].runtime;job_small[i].sfzx = 1; //将标志位置1;index++;break;  //跳出内层for循环。} //end if}//end for}//end forprintf("\n\n\n作业名称\t作业长度\t需要打印机数目\t需要磁带机数目\t服务时间\t等待时间\n");for (int i = 0; i < count; i++) {cout << "   " << job[i].name << "\t\t" << "   " << job[i].length << "\t\t" << "     " << job[i].printer<< "\t\t" << "     " << job[i].tape << "\t\t" << "   " << job[i].runtime << "\t\t" << "   " << job[i].waittime << endl;//printf("%s%10d%10d\n",job[i].name, job[i].runtime, job[i].waittime);}
}//end input
void main() {input();
}

C++、高响应比优先算法相关推荐

  1. 作业调度算法【平均周转时间、平均带权周转时间、先来先服务FCFS、短作业优先SJF、高优先权(级)算法FPF、高响应比优先算法HRRN】

    文章目录 先来先服务算法(FCFS) 短作业优先算法(SJF).短进程优先算法(SPF) 周转时间和带权周转时间 高优先权(级)调度算法FPF 高响应比优先调度算法HRRN 先来先服务算法(FCFS) ...

  2. 高响应比优先算法实现进程调度模拟

    一.实验要求 1.用可视化编程工具编制程序,在机器上调试运行,并通过上机考核. 2.要求将功能集中在一个界面中,界面设计美观,功能完整,使用方便. 二.设计题目 题目1 进程调度模拟程序 目的: 熟悉 ...

  3. 高响应比优先算法代码_以梦为码丨让每一行代码都充满温情

    本期热点 智能校园部招聘专场 小海 小海冲鸭 我们一直在打磨的多款产品在上周海亮教育研究院产品发布会上崭露头角,激动!!! 别说话,我在敲代码 发布了哪些呀? 小海冲鸭 iClass.海亮星课堂.模板 ...

  4. 十一、FCFS(先来先服务)、SJF(短作业优先)、HRRN(高响应比优先)

    一.知识总览 二.先来先服务(FCFS) **注意:**针对于先来先服务算法某些作业(或进程)平均周转时间长的缺点,提出了短作业优先的算法(SJF) 三.短作业优先(SJF) 1.非抢占式的短作业优先 ...

  5. 作业调度算法--高响应比优先 操作系统_处理器管理_编程题

    操作系统_处理器管理_编程题 作业调度算法–高响应比优先 输入N个作业,输入每个的作业名字,到达的时间,服务的时间,根据高响应比优先算法,计算出每个作业的完成的时间,周转的时间,带权周转的时间(其中保 ...

  6. 7-3 作业调度算法--高响应比优先 (40 分)(思路+详解+vector容器做法)Come Baby!!!!!

    一:题目 输入N(N>0)个作业,输入每个作业的名字,到达时间,服务时间,按照高响应比优先算法,计算每个作业的完成时间,周转时间,带权周转时间(保留2位小数). 输入格式: 第一行输入作业数目, ...

  7. 操作系统调度算法--高响应比优先调度算法解析

    高响应比优先调度算法(Highest Response Radio Next,HRRN)是一种对CPU中央控制器响应比的分配的算法.HRRN是介于FCFS(先来先服务算法)与SJF(短作业优先算法)之 ...

  8. 高响应比优先调度算法

    任务描述 本关任务:编写一个高响应比优先调度算法解决一个实际的进程调度问题,并打印出每个进程的完成时间.周转时间和带权周转时间 相关知识 为了完成本关任务,你需要掌握:1.先来先服务调度算法,2.进程 ...

  9. 调度算法——先来先服务(FCFS)、短作业优先(SJF)、高响应比优先(HRRN) 例题详细!!!

    文章目录 前言 知识总览 先来先服务(FCFS, First Come First Serve) 短作业优先(SJF, Shortest Job First) 对FCFS和SJF两种算法的思考 高响应 ...

最新文章

  1. 使用python中的库matplotlib绘制箱线图(boxplot)
  2. 字节跳动又一款中重度游戏曝光,它要进军“漫改MMO”领域!
  3. 在Spring boot 配置过滤器(filter)
  4. Python3 爬虫实战 — 58同城武汉出租房【加密字体对抗】
  5. python判断某一天是周几
  6. cloud_config学习_1
  7. 工具类TestTools
  8. 转 ---《协程小结》
  9. httpclient java多线程_Apache HttpClient4.5多个HTTP请求使用多线程执行
  10. flask第九篇——url_for【2】
  11. Spring Cloud入门-Oauth2授权之JWT集成(Hoxton版本)
  12. 远方的人 -- 龙瑜
  13. cydia无法安装卸载插件_简单 用文件管理器干掉Cydia顽固插件源
  14. overscroll-behavior
  15. html5个人影集,全屏的个人影集展示网页模板
  16. Win10自带录屏怎么用?一键开启,超级简单!
  17. 上市公司融资需要哪些条件
  18. Java8 默认垃圾回收器(GC)
  19. numpy中,矩阵的三种转置transpose、getT、getH的区别
  20. 京东Java岗:来自面试官的夺命连环56问,你怀疑人生了吗?

热门文章

  1. 全国计算机程序员等级,计算机等级考试程序员级考试之四大经验
  2. npm包发布正式和测试版
  3. 圆周率为什么会等于4?
  4. win32获取本地ip
  5. SQL 注入式攻击的终极防范
  6. JVM内存回收机制及回收器-一目了然
  7. 排序算法之简单插入排序法
  8. python编程8g的内存够么_内存8G够用吗?深入解读~
  9. android 6g 有必要吗,Android手机: 6G和8G运行内存之间有多大差异?网民: 做这些事有区别...
  10. 冯诺依曼体系结构与操作系统