作者:ai琳伟_261 | 来源:互联网 | 2023-05-30 11:51
个人练习
输入:作业序列,即一系列要执行的作业,每个作业包括三个数据项:
作业号、作业进入系统的时间(用一整数表示,如 10:10,表示成 1010)、
估计执行时间(单位分)
3
参数用空格隔开,下面是示例:
1 800 50
2 815 30
3 830 25
4 835 20
5 845 15
6 900 10
7 920 5
按不同的调度算法输出作业序列,进入内存的时间;每行输出一个作业信息
#include
using namespace std;struct JOB {char name[10];int arrivetime;int runtime;int starttime;int endtime;int zztime;double dqzztime;int time;int R;
};JOB z[100];
int time_hm(int n) {int a;int b;int time_min;a = (int)n * 1.0 / 100;b = n % 100;time_min = a * 60 + b;return time_min;
}int time_mh(int n) {int a;int b;int time;a = (int)n * 1.0 / 60;b = n % 60;time = a * 100 + b;return time;
}
void input(JOB* p, int n) {int i;cout << "请输入作业编号&#xff0c;到达时间&#xff0c;运行时间" << endl;for (i &#61; 0; i <&#61; n - 1; i&#43;&#43;) {cout << "输入作业" << i &#43; 1 << "的信息&#xff1a;" << endl;cin >> z[i].name >> z[i].time >> z[i].runtime;z[i].arrivetime &#61; time_hm(z[i].time);}
}
void print(JOB* p, int arrivetime, int runtime, int starttime, int endtime, int zztime, double dqzztime, int n) {int k;cout << "执行顺序&#xff1a;";cout << z[0].name;for (k &#61; 1; k < n; k&#43;&#43;) {cout << "->" << z[k].name;}cout << endl;cout << "作业信息如下" << endl;cout << "到达时间 " << "开始时间 " << "结束时间 " << "运行时间 " << "周转时间 " << "带权周转时间 " << endl;for (k &#61; 0; k <&#61; n - 1; k&#43;&#43;) {cout << time_mh(z[k].arrivetime) << " " << time_mh(z[k].starttime) << " " << time_mh(z[k].endtime) << " " << z[k].runtime << " " << z[k].zztime << " " << z[k].dqzztime << endl;}
}
void sort(JOB* p, int n) {for (int i &#61; 0; i <&#61; n - 1; i&#43;&#43;) {for (int j &#61; 0; j <&#61; i; j&#43;&#43;) {if (z[i].arrivetime < z[j].arrivetime) {JOB temp;temp &#61; z[i];z[i] &#61; z[j];z[j] &#61; temp;}}}
}
void deal(JOB* p, int arrivetime, int runtime, int starttime, int endtime, int zztime, double dqzztime, int n) {int k;for (k &#61; 0; k <&#61; n - 1; k&#43;&#43;) {if (k &#61;&#61; 0) {z[k].starttime &#61; z[k].arrivetime;z[k].endtime &#61; z[k].arrivetime &#43; z[k].runtime;}else {if (z[k - 1].endtime >&#61; z[k].arrivetime) {z[k].starttime &#61; z[k - 1].endtime;}else {z[k].starttime &#61; z[k].arrivetime;}z[k].endtime &#61; z[k].starttime &#43; z[k].runtime;}}for (k &#61; 0; k <&#61; n - 1; k&#43;&#43;) {z[k].zztime &#61; z[k].endtime - z[k].arrivetime;z[k].dqzztime &#61; z[k].zztime * 1.0 / z[k].runtime;}
}
void FIFO(JOB* p, int n) {cout << endl;cout << "----------先进先出算法----------" << endl;int arrivetime &#61; 0, runtime &#61; 0, starttime &#61; 0, endtime &#61; 0, zztime &#61; 0, dqzztime &#61; 0;sort(p, n);deal(p, arrivetime, runtime, starttime, endtime, zztime, dqzztime, n);print(p, arrivetime, runtime, starttime, endtime, zztime, dqzztime, n);}
void SJF(JOB* p, int n) {cout << endl;cout << "----------短作业优先调度算法----------" << endl;int arrivetime &#61; 0, runtime &#61; 0, starttime &#61; 0, endtime &#61; 0, zztime &#61; 0, dqzztime &#61; 0;sort(p, n);for (int m &#61; 0; m < n - 1; m&#43;&#43;) {if (m &#61;&#61; 0) z[m].endtime &#61; z[m].arrivetime &#43; z[m].runtime;else {if (z[m - 1].endtime >&#61; z[m].arrivetime) {z[m].starttime &#61; z[m - 1].endtime;}else {z[m].starttime &#61; z[m].arrivetime;}z[m].endtime &#61; z[m].starttime &#43; z[m].runtime;}int i &#61; 0;for (int g &#61; m &#43; 1; g <&#61; n - 1; g&#43;&#43;) {if (z[g].arrivetime <&#61; z[m].endtime)i&#43;&#43;;}float min &#61; z[m &#43; 1].runtime;int next &#61; m &#43; 1;for (int k &#61; m &#43; 1; k < m &#43; i; k&#43;&#43;) {if (z[k &#43; 1].runtime < min) {min &#61; z[k &#43; 1].runtime;next &#61; k &#43; 1;}}JOB temp;temp &#61; z[m &#43; 1];z[m &#43; 1] &#61; z[next];z[next] &#61; temp;}deal(p, arrivetime, runtime, starttime, endtime, zztime, dqzztime, n);print(p, arrivetime, runtime, starttime, endtime, zztime, dqzztime, n);
}
void HRN(JOB* p, int n) {cout << endl;cout << "----------最高响应比优先算法----------" << endl;int arrivetime &#61; 0, runtime &#61; 0, starttime &#61; 0, endtime &#61; 0, zztime &#61; 0, dqzztime &#61; 0;sort(p, n);for (int m &#61; 0; m < n - 1; m&#43;&#43;) {if (m &#61;&#61; 0) z[m].endtime &#61; z[m].arrivetime &#43; z[m].runtime;else {if (z[m - 1].endtime >&#61; z[m].arrivetime) {z[m].starttime &#61; z[m - 1].endtime;}else {z[m].starttime &#61; z[m].arrivetime;}z[m].endtime &#61; z[m].starttime &#43; z[m].runtime;}int i &#61; 0;for (int g &#61; m &#43; 1; g <&#61; n - 1; g&#43;&#43;) {if (z[g].arrivetime <&#61; z[m].endtime)i&#43;&#43;;}for (int l &#61; 0; l <&#61; n; l&#43;&#43;) {z[l].R &#61; 1 &#43; (z[l].starttime - z[l].arrivetime) * 1.0 / z[l].runtime;}float max &#61; z[m &#43; 1].R;int next &#61; m &#43; 1;for (int k &#61; m &#43; 1; k < m &#43; i; k&#43;&#43;) {if (z[k &#43; 1].R > max) {max &#61; z[k &#43; 1].R;next &#61; k &#43; 1;}}JOB temp;temp &#61; z[m &#43; 1];z[m &#43; 1] &#61; z[next];z[next] &#61; temp;}deal(p, arrivetime, runtime, starttime, endtime, zztime, dqzztime, n);print(p, arrivetime, runtime, starttime, endtime, zztime, dqzztime, n);
}int main() {int n;cout << "请输入作业个数&#xff1a;" << endl;JOB* b &#61; z;cin >> n;input(z, n);FIFO(b, n);SJF(b, n);HRN(b, n);
}
测试结果