33,311
社区成员
发帖
与我相关
我的任务
分享
int
main()
{
job g[6];
input(g);
/* debug......
g[1].name='a';g[1].arrivetime=2007;g[1].runtime=2008;
g[2].name='b';g[2].arrivetime=2008;g[2].runtime=2009;
g[3].name='c';g[3].arrivetime=2009;g[3].runtime=2010;
g[4].name='d';g[4].arrivetime=2010;g[4].runtime=2011;
g[5].name='e';g[5].arrivetime=2011;g[5].runtime=2012;
g[0].name='f';g[0].arrivetime=2012;g[0].runtime=2013;
end ........ */
job * g_1(g), *g_2(g);
FCFS(g);//////////////////////////////////////////////////////
SJF(g_1);/////////////////////////////////////////////////////
HIGHEST(g_2);/////////////////////////////////////////////////
return 0;
}
#include <iostream>
using namespace std;
struct job {
char name;
float arrivetime;
//到达时间
float runtime;
//运行时间
float starttime;
//开始时间
float finishtime;
//完成时间
float totaltime;
//周转时间
float weighttime;
//带权时间
};
void
input(job * k)
{
int i;
for (i = 0; i < 6; i++) {
cout <<"作业名:";
cin >>k[i].name;////////////////////////////////////////
cout <<"到达时间:";
cin >>k[i].arrivetime;
cout <<"运行时间:";
cin >>k[i].runtime;
}
}
void
output(job * k, float average_totaltime, float average_weighttime)
{
cout <<"顺序:" <<endl;
int i;
for (i = 0; i < 6; i++) {
cout <<k[i].name <<"-> ";
}
cout <<"平均周转时间:" <<average_totaltime <<endl;
cout <<"平均带权周转时间:" <<average_weighttime <<endl;
}
void
calculation(job * k, float &average_totaltime, float &average_weighttime)
{
int i;
float sum_totaltime = 0, sum_weighttime = 0;
for (i = 0; i < 6; i++) {
if (i == 0)
k[i].starttime = k[i].finishtime;
else {
k[i].starttime = k[i - 1].finishtime;
}
k[i].finishtime = k[i].starttime + k[i].runtime;
}
for (i = 0; i < 6; i++) {
k[i].totaltime = k[i].finishtime - k[i].arrivetime;
k[i].weighttime = k[i].totaltime / k[i].runtime;
sum_totaltime = sum_totaltime + k[i].totaltime;
sum_weighttime = sum_totaltime + k[i].weighttime;
}
average_totaltime = sum_totaltime / 6;
average_weighttime = sum_weighttime / 6;
}
void
FCFS(job * k)
{
int i , j;
job t;
float a , b;
for (j = 0; j < 6; j++) {
//????????????????????????????
for(i=0;i<j ; i++) {
if (k[i].arrivetime < k[j].arrivetime) {
t = k[i];
k[i] = k[j];
k[j] = t;
}
}
}
calculation(k, a, b);
output(k, a, b);
}
void
SJF(job * k)
{
int i, j, d, e, next;
job t;
float a , b, min;
for (j = 0; j < 6; j++) {//////////////////////////////////////////
for (i = 0; i < j; i++) {
if (k[i].arrivetime < k[j].arrivetime) {
t = k[i];
k[i] = k[j];
k[j] = t;
}
}
}
for (i = 0; i < 6; i++) {
if (i == 0)
k[i].starttime = k[i].finishtime;
else {
k[i].starttime = k[i - 1].finishtime;
}
k[i].finishtime = k[i].starttime + k[i].runtime;
j = 0;
for (e = i + 1; e < 6; e++) {
if (k[e].arrivetime <= k[i].finishtime)
j++;
} //确定有几个作业可挑选
min = k[i + 1].runtime;
next = i + 1;
for (d = i + 1; d < i + j; d++) {
if (k[d + 1].runtime < min) {
min = k[d + 1].runtime;
next = d + 1;
}
}
t = k[i + 1];
k[i + 1] = k[next];
k[next] = t;
}
calculation(k, a, b);
output(k, a, b);
}
void
HIGHEST(job * k)
{
int i, j, next, e, d;
job t;
float a , b, max;
for (j = 0; j < 6; j++) {
for (i = 0; i < j; i++) {
if (k[i].arrivetime < k[j].arrivetime) {
t = k[i];
k[i] = k[j];
k[j] = t;
}
}
}
for (i = 0; i < 6; i++) {
if (i == 0)
k[i].starttime = k[i].finishtime;
else {
k[i].starttime = k[i - 1].finishtime;
}
k[i].finishtime = k[i].starttime + k[i].runtime;
j = 0;
for (e = i + 1; e < 6; e++) {
if (k[e].arrivetime <= k[i].finishtime)
j++;
} //确定有几个作业可挑选
max = (k[i + 1].starttime - k[i + 1].arrivetime) / k[i + 1].runtime;
next = i + 1;
for (d = i + 1; d < i + j; d++) {
if (max <= (k[i].finishtime - k[d + 1].arrivetime) / k[d + 1].runtime) {
max = (k[i].finishtime - k[d + 1].arrivetime) / k[d + 1].runtime;
next = d + 1;
}
}
t = k[i + 1];
k[i + 1] = k[next];
k[next] = t;
}
calculation(k, a, b);
output(k, a, b);
}
int
main()
{
job g[6];
//input(g);
//debug......
g[1].name='a';g[1].arrivetime=2007;g[1].runtime=2008;
g[2].name='b';g[2].arrivetime=2008;g[2].runtime=2009;
g[3].name='c';g[3].arrivetime=2009;g[3].runtime=2010;
g[4].name='d';g[4].arrivetime=2010;g[4].runtime=2011;
g[5].name='e';g[5].arrivetime=2011;g[5].runtime=2012;
g[0].name='f';g[0].arrivetime=2012;g[0].runtime=2013;
//end ........
job * g_1(g), *g_2(g);
FCFS(g);//////////////////////////////////////////////////////
SJF(g_1);/////////////////////////////////////////////////////
HIGHEST(g_2);/////////////////////////////////////////////////
return 0;
}