random 如何做网络营销推广 vuejs 教程 bootstrap后台模版 后台系统模板 nginx视频 鼠标进入和离开事件 mac虚拟打印机 java多行注释 docker查看所有容器 solidworks图库 vue使用bootstrap python转java kubernetes安装 python正则匹配空格 java编程 javaswitch java的string 搭建java环境 java接口类 java迭代器 java正则表达式匹配 java手册 java入门代码 java的socket通信 din字体 键盘模拟器 图片生成网址 maya2008 flash基础 编程语言实现模式 千千静听老版本 管理文件 我的世界透视 js获取子元素 正则表达式数字 流媒体下载 vbs代码 黑道圣徒4去马赛克 摇骰子表情包
当前位置: 首页 > 学习教程  > 编程语言

C++实现高响应比调度算法

2020/12/5 10:37:39 文章标签:

//#include <malloc.h> //引入动态分配文件 #include <stdio.h> //引入输入输出流文件 #include <string.h> //引入字符串文件 #define NULL 0 //宏定义 常量0 #define N 10 //宏定义常量 10 typedef struct table //声明一个结构体 { char name[8]; /作业名…

//#include <malloc.h> //引入动态分配文件
#include <stdio.h> //引入输入输出流文件
#include <string.h> //引入字符串文件
#define NULL 0 //宏定义 常量0
#define N 10 //宏定义常量 10
typedef struct table //声明一个结构体
{ char name[8]; /作业名/
float in_well; /进入输入井时间/
float begin_run; /开始运行时间/
float run_time; /运行时间/
float end_run; /结束运行时间/
float turnover_time; /周转时间/
}jobtable; //结构体的名字
void init(jobtable job[],int n) /初始化作业表/
{
int i,j; //定义整形变量
printf(“input %d job information\n”,n); //输出语句
printf(“in_well run_time name\n”); //输出语句
for(i=0;i<n;i++) //执行要循环的次数
{
scanf("%f %f %s",&job[i].in_well,&job[i].run_time,job[i].name);//输入进入时间, 和运行时间以及任务的名字
job[i].begin_run=0.0; //作业执行初始值
job[i].end_run=0.0; //作业结束初始值
job[i].turnover_time=0.0; //作业周转次数
}
}
void print (jobtable job[],int n) /输出链表/
{ int i; //定义整形变量
printf(“name in_well run_time begin_run end_run turnover_time\n”);//输出提示信息
for(i=0;i<n;i++) //设置for循环
{ printf("%s\t%0.1f\t%0.1f\t",job[i].name,job[i].in_well,job[i].run_time);//打印进入时间,运行时间以及任务的名字
if(job[i].begin_run0.0&&job[i].end_run0.0&&job[i].turnover_time==0.0)
printf(" \n");//如果三个值都为0就输出换行
else
printf("%9.1f%9.1f\t%0.1f\n",job[i].begin_run,job[i].end_run,job[i].turnover_time);
//非零值的话就输出三个带有9位小数的浮点数
}
}
void swap(jobtable job[],int p,int q) //将结构体作为参数传入交换函数
{ float temp1; //定义单精度浮点型变量
char temp2[8]; //定义char型数组
strcpy(temp2,job[p].name);strcpy(job[p].name,job[q].name);strcpy(job[q].name,temp2);
//使用复制函数进行元素的复制
temp1=job[p].in_well;job[p].in_well=job[q].in_well;job[q].in_well=temp1;
//进行元素交换
temp1=job[p].run_time;job[p].run_time=job[q].run_time;job[q].run_time=temp1;
//将时间元素进行交换
}
float response_ratio(jobtable job[],int n)/模拟当前作业表的调度过程/
{ int i,j,temp; //定义int型变量
float average_time,ratio1,ratio2; //定义三个浮点数的值
job[0].begin_run=job[0].in_well; //将默认时间赋值给
job[0].end_run=job[0].begin_run+job[0].run_time;//将初始时间加上运行时间加一起给结束时间
job[0].turnover_time=job[0].end_run-job[0].begin_run;//结束时间减去初始时间得出周转时间
average_time=job[0].turnover_time; //计算平均响应时间
for(i=1;i<n;i++) //定义for循环执行响应作业次数
{ if(job[i].in_well<=job[i-1].end_run)//如果进入时间等于结束时间
{ j=i+1;temp=i;//将j变量的值累加
ratio1=1+(job[i-1].end_run-job[i].in_well)*1.0/job[i].run_time;//计算平均相应时间
while(j<n&&job[j].in_well<=job[i-1].end_run)
{
ratio2=1+(job[i-1].end_run-job[j].in_well)*1.0/job[j].run_time;
if(ratio2>ratio1) temp=j;
j++;
}
if(temp!=i)
swap(job,i,temp);
}
job[i].begin_run=job[i-1].end_run;
job[i].end_run=job[i].begin_run+job[i].run_time;
job[i].turnover_time=job[i].end_run-job[i].in_well;
average_time=average_time+job[i].turnover_time;
}
return(average_time/n); //返回平均相应时间
}
int main()
{ int n; //定义整形变量
float ave_turnover_time; //定义浮点型变量
jobtable job[N]; // 定义一个结构体
printf(“input job numbers\n”); //输出提示语句
scanf("%d",&n); //输入定义的变量
if(n<=N) //定义if条件语句
{
printf(“按照进入输入井的先后顺序初始化作业表 \n”); //输出提示语句
init(job,n);//调用init函数
printf(“initial station \n”);//输出提示语句
print(job,n);//打印参数值
ave_turnover_time=response_ratio(job,n);//给函数的返回值赋值
printf(“termination station \n”);
print(job,n);
printf(“ave_turnover_time is:%12.1f\n”,ave_turnover_time);
}
else printf(“error!\n”);
}
运行结果:
在这里插入图片描述


本文链接: http://www.dtmao.cc/news_show_450287.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?