📄 zuoyediaodu.txt
字号:
#include<iostream>
#include<iomanip>
int FCFS(); //First Come First Service
int MSF(); //Most Short First
struct JCB
{
int JN;
float TS; //提交时间
float TR; //运行时间
float TB; //开始时间
float TC; //完成时间
float TI; //周转时间
float WI; //带权周转时间
};
/////////////////////////////////////////////////////////////////////////////////////
int main()
{
std::cout<<"1,先来先服务调度算法"<<std::endl;
std::cout<<"2,最短作业优先调度算法"<<std::endl;
std::cout<<"3,Exit!"<<std::endl;
std::cout<<"Please make a choice:";
int choice;
std::cin>>choice;
switch(choice)
{
case 1:
FCFS();
break;
case 2:
MSF();
break;
case 3:
std::cout<<"You choose to exit!"<<std::endl;
break;
default:
std::cout<<"\aNo such a choice!";
break;
}
return 0;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////
FCFS()
{
int i;
std::cout<<"请输入作业的个数:";
int size;
std::cin>>size;
JCB *jcb=new JCB[size];
std::cout<<"请输入各个作业的提交时间和运行时间:"<<std::endl;
for(i=0;i<size;i++)
{
jcb[i].JN=i+1;
std::cin>>jcb[i].TS>>jcb[i].TR;
}
std::cout<<"\n";
float temp;
//按提交时间排序
for(i=0;i<size;i++)
for(int t=i+1;t<size;t++)
{
if(jcb[i].TS>jcb[t].TS)
{
temp=jcb[i].TS;jcb[i].TS=jcb[t].TS;jcb[t].TS=temp;
temp=jcb[i].JN;jcb[i].JN=jcb[t].JN;jcb[t].JN=temp;
temp=jcb[i].TR;jcb[i].TR=jcb[t].TR;jcb[t].TR=temp;
}
}
jcb[0].TB=jcb[0].TS;
jcb[0].TC=jcb[0].TS+jcb[0].TR;
jcb[0].TI=jcb[0].TC-jcb[0].TS;
jcb[0].WI=jcb[0].TI/jcb[0].TR;
for(i=1;i<size;i++)
{
if(jcb[i].TS<jcb[i-1].TC)
jcb[i].TB=jcb[i-1].TC;
else
jcb[i].TB=jcb[i].TS;
jcb[i].TC=jcb[i].TB+jcb[i].TR;
jcb[i].TI=jcb[i].TC-jcb[i].TS;
jcb[i].WI=jcb[i].TI/jcb[i].TR;
}
std::cout<<"****************************************************"<<std::endl;
std::cout<<"JN\tTS\tTR\tTB\tTC\tTI\tWI\t"<<std::endl;
for(int a=0;a<size;a++)
for(int b=a+1;b<size;b++)
{
JCB ntemp;
if(jcb[a].JN>jcb[b].JN){ntemp=jcb[a];jcb[a]=jcb[b];jcb[b]=ntemp;}
}
for(i=0;i<size;i++)
{
std::cout<<jcb[i].JN<<"\t"<<jcb[i].TS<<"\t"<<jcb[i].TR<<"\t"<<jcb[i].TB<<"\t";
std::cout<<jcb[i].TC<<"\t"<<jcb[i].TI<<std::setprecision(4)<<"\t"<<jcb[i].WI<<std::setprecision(4)<<"\t"<<std::endl;
}
std::cout<<"****************************************************"<<std::endl;
return 0;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////
MSF()
{
int i;
std::cout<<"请输入作业的个数:";
int size;
std::cin>>size;
JCB *b=new JCB[size]; //用来保存已运行的作业
JCB *jcb=new JCB[size];
std::cout<<"请输入各个作业的提交时间和运行时间:"<<std::endl;
for(i=0;i<size;i++)
{
jcb[i].JN=i+1;
std::cin>>jcb[i].TS>>jcb[i].TR;
}
std::cout<<"\n";
float temp; //临时变量
JCB ntemp; //临时变量
//按提交时间排序
for(i=0;i<size;i++)
for(int t=i+1;t<size;t++)
{
if(jcb[i].TS>jcb[t].TS)
{
temp=jcb[i].TS;jcb[i].TS=jcb[t].TS;jcb[t].TS=temp;
temp=jcb[i].JN;jcb[i].JN=jcb[t].JN;jcb[t].JN=temp;
temp=jcb[i].TR;jcb[i].TR=jcb[t].TR;jcb[t].TR=temp;
}
}
jcb[0].TB=jcb[0].TS;
jcb[0].TC=jcb[0].TS+jcb[0].TR;
jcb[0].TI=jcb[0].TC-jcb[0].TS;
jcb[0].WI=jcb[0].TI/jcb[0].TR;
b[0]=jcb[0];
for(int j=1;j<size;j++)
{
if(jcb[j].TS>b[j-1].TC)
{
b[j]=jcb[j];
b[j].TB=b[j].TS;
b[j].TC=b[j].TB+b[j].TR;
b[j].TI=b[j].TC-b[j].TS;
b[j].WI=b[j].TI/b[j].TR;
}
else
{
int k,n=1;
ntemp=jcb[j];
for(k=j+1;k<size;k++)
{
if(jcb[k].TS<=b[j-1].TC&&jcb[k].TR<jcb[j].TR)
{
jcb[j]=jcb[k];
jcb[k]=ntemp;
}
else continue;
}
b[j]=jcb[j];
b[j].TB=b[j-1].TC;
b[j].TC=b[j].TB+b[j].TR;
b[j].TI=b[j].TC-b[j].TS;
b[j].WI=b[j].TI/b[j].TR;
}
}
std::cout<<"*****************************************************"<<std::endl;
std::cout<<"JN\tTS\tTR\tTB\tTC\tTI\tWI\t"<<std::endl;
for(int a=0;a<size;a++)
for(int r=a+1;r<size;r++)
{
JCB ntemp;
if(b[a].JN>b[r].JN){ntemp=b[a];b[a]=b[r];b[r]=ntemp;}
}
for(i=0;i<size;i++)
{
std::cout<<b[i].JN<<"\t"<<b[i].TS<<"\t"<<b[i].TR<<"\t"<<b[i].TB<<"\t";
std::cout<<b[i].TC<<"\t"<<b[i].TI<<std::setprecision(4)<<"\t"<<b[i].WI<<std::setprecision(4)<<"\t"<<std::endl;
}
std::cout<<"*****************************************************"<<std::endl;
int main();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -