首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

什么连接异常,伤心死了,求指点。多谢,程序工程不一定对,小弟我现在只想这个程序能调试就行了

2013-01-28 
什么连接错误,伤心死了,求指点。谢谢,程序工程不一定对,我现在只想这个程序能调试就行了/*周转时间 作业

什么连接错误,伤心死了,求指点。谢谢,程序工程不一定对,我现在只想这个程序能调试就行了

/*周转时间 = 作业完成时间 – 作业提交时间
算法思想:段作业优先,即每次作业调度的时候都先调度已经到达的作业中最短的作业,即每次作业调度的时候都要找到最短的那个作业
*/
/*算法思想:随着时间的推移,有的作业被执行而出了队列,有的新的作业进入队列,所以队列就是存储目前可以被调度的作业,
每次调度那个作业就由当前队列中的作业决定,每次在队列中找到最短执行时间的作业*/
#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];
}



错误信息如下:1>------ 已启动生成: 项目: 最短作业优先JSF队列版, 配置: Debug Win32 ------
1>生成启动时间为 2013/1/3 15:58:09。
1>InitializeBuildStatus:
1>  正在对“Debug\最短作业优先JSF队列版.unsuccessfulbuild”执行 Touch 任务。
1>ClCompile:
1>  JSFsque.cpp
1>ManifestResourceCompile:
1>  所有输出均为最新。
1>JSFsque.obj : error LNK2019: 无法解析的外部符号 "int __cdecl OutQueue(int (* const)[2],int &)" (?OutQueue@@YAHQAY01HAAH@Z),该符号在函数 _main 中被引用
1>F:\C++源代码\最短作业优先JSF队列版\Debug\最短作业优先JSF队列版.exe : fatal error LNK1120: 1 个无法解析的外部命令
1>
1>生成失败。
1>
1>已用时间 00:00:00.97
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

[解决办法]
int  OutQueue(int SQUEUE[][2],int &front);// 你的函数声明
int  OutQueue(int SQUEUE[][20],int &front){ xxx }// 你的函数定义

参数类型不同, 被当成是重载了...
[解决办法]
 OutQueue(int SQUEUE[][20], 数组长度改一下:2

热点排行