什么连接错误,伤心死了,求指点。谢谢,程序工程不一定对,我现在只想这个程序能调试就行了
/*周转时间 = 作业完成时间 – 作业提交时间
算法思想:段作业优先,即每次作业调度的时候都先调度已经到达的作业中最短的作业,即每次作业调度的时候都要找到最短的那个作业
*/
/*算法思想:随着时间的推移,有的作业被执行而出了队列,有的新的作业进入队列,所以队列就是存储目前可以被调度的作业,
每次调度那个作业就由当前队列中的作业决定,每次在队列中找到最短执行时间的作业*/
#include<iostream>
#include<iomanip>
#include<string>
using namespace std;
void EnterQueue(int SQUEUE[][2],int number,int time,int &front);//入队列,number,代表原先的作业号。time,代表作业的执行时间
int OutQueue(int SQUEUE[][2],int &front);//出队列,number,代表原先的作业号。time,代表作业的执行时间
bool isEmpty(int &front){return front == 0;}
int main(){
cout<<"============以下是“段作业优先(SJF)”算法模拟作业调度程序============="<<endl;
int workArrive[20][2] = {{0,8},{2,5},{3,7},{6,1},{9,4},{11,9},{12,3},{15,9},{14,3},{17,4},{19,10},{21,2},{22,21},{23,12},{32,23},{33,50},{55,70},{100,80},{120,21},{120,32}};//存取作业的到达时间和作业的运行时间
string name[6] ={"作业名称","到达时间","运行时间","开始时间","完成时间","周转时间"};
int particular[20][6];//存取作业的详细信息
int SQUEUE[20][2];//作为存放已进入的作业的队列
int front = 0;//对头指针
int avery = 0;
int totalTime = 0;
for(int r = 0; r < 20;r++){
//入队列
if(isEmpty(front)){
EnterQueue(SQUEUE,r,workArrive[r][1],front);
}
else{
for(int k = r;k < 18;k++){
if(workArrive[front-1][0] < workArrive[k][0] && workArrive[k][0] < totalTime)
EnterQueue(SQUEUE,k,workArrive[r][1],front);
}
}
//出队列
int tt,last;
if(r == 0){
tt = OutQueue(SQUEUE,front);
particular[tt][1] = workArrive[tt][0];//到达时间
particular[tt][2] = workArrive[tt][1];//运行时间
particular[tt][3] = particular[tt][1];//开始时间即为到达时间
particular[tt][4] = particular[tt][2];//完成时间即为运行时间
particular[tt][5] = (particular[tt][4] - particular[tt][1]);//周转时间 = 作业完成时间 – 作业提交时间
avery+= (particular[tt][4] - particular[tt][1]);
totalTime = particular[tt][4];
last = particular[tt][4];
}else{
tt = OutQueue(SQUEUE,front);
particular[tt][1] = workArrive[tt][0];//到达时间
particular[tt][2] = workArrive[tt][1];//运行时间
particular[tt][3] = last;//开始时间即为上一次完成时间
particular[tt][4] = particular[tt][2] + particular[tt][3] ;//完成时间即为运行时间
particular[tt][5] = (particular[tt][4] - particular[tt][1]);//周转时间 = 作业完成时间 – 作业提交时间
avery+= (particular[tt][4] - particular[tt][1]);
totalTime = particular[tt][4];
}
last = particular[tt][4];
}
for(int i = 0;i < 6;i++){
cout<<" "<<name[i];
}
cout<<endl;
int beforTime=0;
for(int j = 0;j < 4;j++){
for(int k = 0;k < 6;k++){
cout<<" "<<setw(8)<<particular[j][k]<<" ";
}
cout<<endl;
}
cout<<"作业平均周转时间:"<<avery<<"/"<<max<<endl;
cout<<endl;
return 0;
}
void EnterQueue(int SQUEUE[][2],int number,int time,int &rear){
/*对进入队列的作业进行排序,将最小的作业放在对头,始终保证最小作业最先出队列*/
SQUEUE[rear][0] = number;//作业编号
SQUEUE[rear][1] = time;//作业的执行时间
for(int i = rear;i > 1;i--){//对进入队列的作业进行排序
int tmp1,tmp2;
if(SQUEUE[i][1] >SQUEUE[i-1][1] ){
tmp1 = SQUEUE[i][0];
tmp2 = SQUEUE[i][1];
SQUEUE[i][0] = SQUEUE[i-1][0];
SQUEUE[i][1] = SQUEUE[i-1][1];
SQUEUE[i-1][0] = tmp1;
SQUEUE[i-1][0] = tmp2;
}
}
rear++;
}
int OutQueue(int SQUEUE[][20],int &front)//出队列,直接返回作业编号,即队列的对头元素
{
if(front == 0)
return -1;
else
return SQUEUE[front--][0];
}