代码如下
#include<iostream>
#include<Windows.h>
#include<stdio.h>
#include<stdlib.h>
#include <time.h>
#define N 5
using namespace std;
struct Mystruct
{
float arrivetime;
float runtime;
float starttime;
float waittime;
float endtime;
float turnaroundtime;
float rightturnaroundtime;
}Thread[N];
void sort(struct Mystruct Thread[]) {//按进程到达时间排序
for (int i = 0; i < N; i++) {
for (int j = 0; j < N - 1; j++) {
if (Thread[j].arrivetime > Thread[j + 1].arrivetime) {
float t1 = Thread[j + 1].arrivetime;
Thread[j + 1].arrivetime = Thread[j].arrivetime;
Thread[j].arrivetime = t1;
float t2 = Thread[j + 1].runtime;
Thread[j + 1].runtime = Thread[j].runtime;
Thread[j].runtime = t2;
}
}
}
}
float JRR(float i, float j, float k) {//计算响应比
float s = (i - j + k) / k;
//cout << i << " " << j << " " << k << "响应比" << s << endl;
return s;
}
void RRsort(int i) {//找出最小响应比进程的下标与下次要运行的进程交换次序,使处在就绪状态响应比最小的进程下次运行
int next = 0;
float min = 30;
for (int j = i + 1; j < N; j++)
{
if (Thread[j].arrivetime <= Thread[i].endtime) {
float RR;
// cout << Thread[i].endtime << endl;
if (i != 4)
RR = JRR(Thread[i].endtime, Thread[j].arrivetime, Thread[j].runtime);
if (RR < min)//找出最小响应比
{
min = RR;
next = j;
}
}
}
Mystruct temp;
temp = Thread[i + 1];
Thread[i + 1] = Thread[next];
Thread[next] = temp;
}
void HRRN(struct Mystruct Thread[])
{
int count = 0;
float avewaittime = 0, aveturnaroundtime = 0, averightturnaroundtime = 0;
cout << "==========================高响应比算法调度==========================" << endl;
cout << "作业号" << "\t" << "提交时间" << "\t" << "运行时间" << "\t" << "开始时间" << "\t" << "等待时间" << "\t" << "完成时间" << "\t" << "周转时间" << "\t" << "带权周转时间" << endl;
for (int i = 0; i < N; i++)
{
count++;
if (count == 1)Thread[i].starttime = Thread[i].arrivetime; else Thread[i].starttime = Thread[i - 1].starttime + Thread[i - 1].runtime;
if (Thread[i].starttime < Thread[i].arrivetime)
{
Thread[i].starttime = Thread[i].arrivetime;
}
Thread[i].endtime = Thread[i].starttime + Thread[i].runtime;
RRsort(i);//找出处在等待的最小响应比的进程下次运行
Thread[i].waittime = Thread[i].starttime - Thread[i].arrivetime;
Thread[i].turnaroundtime = Thread[i].endtime - Thread[i].arrivetime;
Thread[i].rightturnaroundtime = Thread[i].turnaroundtime / Thread[i].runtime;
avewaittime += Thread[i].waittime; aveturnaroundtime += Thread[i].turnaroundtime; averightturnaroundtime += Thread[i].rightturnaroundtime;
char index;
if (0 == i)
index = 'A';
else if(1 == i)
index = 'B';
else if (2 == i)
index = 'C';
else if (3 == i)
index = 'D';
else if (4 == i)
index = 'E';
cout << index << "\t" << Thread[i].arrivetime << "\t\t" << Thread[i].runtime << "\t\t" << Thread[i].starttime << "\t\t" << Thread[i].waittime << "\t\t" << Thread[i].endtime << "\t\t" << Thread[i].turnaroundtime << "\t\t" << Thread[i].rightturnaroundtime << endl;
}
cout << "平均等待时间:" << avewaittime / N << "\t" << "平均周转时间:" << aveturnaroundtime / N << "\t" << "平均带权周转时间:" << averightturnaroundtime / N << endl;
}
int main() {
srand((int)time(0));
for (int i = 0; i < N; i++) {
Thread[i].arrivetime = i*2;
if(0 ==i)
Thread[i].runtime = 3;
else if (1 == i)
Thread[i].runtime = 6;
else if (2 == i)
Thread[i].runtime = 4;
else if (3 == i)
Thread[i].runtime = 5;
else if (4 == i)
Thread[i].runtime = 2;
else{}
}
HRRN(Thread);
system("pause");
return 0;
}
运行结果如截图