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

急星期五就要上交了,求大神帮忙

2013-12-21 
急急急!!!!周五就要上交了,求大神帮忙老师让我们用Microsoft Visual C++ 6.0做的进程调度算法,错误好多,求

急急急!!!!周五就要上交了,求大神帮忙
老师让我们用Microsoft Visual C++ 6.0做的进程调度算法,错误好多,求大神修改

#include <list>
#include <iostream>
#include <algorithm>
using namespace std;
//////////////////////////////
const int num=5;
int Quantum=5;
int N_Clock=0;
//////////////////////////////
class JCB
{
public
int Id;
int Lefttime;
int Ts;
int Ta;
int Tw;
float priority;
void SetJCB(int id,int ser_t,int arr_t)
{
Id=id;
Ts=ser_t;
Lefttime=ser_1;
Ta=arr_1;
Tw=0;
priority=0;
}
friend bool operator<(const JCB &pre,const JCB &next)
{
if(pre.Ts<next.Ts)return true;
return false;
}
};

class record
{
public
void R_Dis(JCB*jcb)
{
float sum=0;
for(int i=0;i<num;i++)
{
Tq[i]=finish Time[i]-jcb[i].Ta;
TqTs[i]=(float)(Tq[i])/jcb[i]Ts;
sum+=TqTs[i];
}
float ave=sum/num;
cout<<"进程表述:";
for(i=0;i<num;i++)cout<<"p"<<jcb[i].Id<<"\t";
cout<<endl;
cout<<"到达时间:\t";
for(i=0;i<num;i++)cout<<jcb[i].Ta<<"\t";
cout<<endl;
cout<<"服务时间:\t";
for(i=0;i<num;i++)cout<<jcb[i].Ts<<"\t";
cout<<endl;
cout<<"周转时间:\t";
for(i=0;i<num;i++)cout<<Tq[i]<<"\t";
cout<<endl;
cout<<"带权周转时间:\t";
for(i=0;i<num;i++)cout<<TqTs[i]<<"\t";
cout<<endl<<"平均带权周转时间:"<<ave<<endl;
}
int FinishTime[num];
int Tq[num];
float TqTs[num];
};



////////////////////////////////////////////////////
bool NewCome(JCB*jcb,JCB&n_p)
{
for(int i=1;i<num;i++)
if(jcb[i].Ta==N_Clock)
{
n_p=jcb[i];
return true;
}
return false;
}
void Init_BQ(JCB*jcb)
{
jcb[0].SetJCB(0,3,0);
jcb[1].SetJCB(1,6,2);
jcb[2].SetJCB(2,4,4);
jcb[3].SetJCB(3,5,6);
jcb[4].SetJCB(4,2,8);
}
/////////////////////////////////////////////////////
void FCFS(JCB*);   //先来先服务调度算法
void SJF(JCB*);    //短作业优先调度算法
void RR(JCB*);     //时间片轮转调度算法
void HRN(JCB*);    //最高响应比优先调度算法
//**************************************************
//********        以下为主函数      ****************
//**************************************************
void main()
{
JCB jcb[num];
Init_BQ(jcb);
FCFS(jcb);
cout<<"press any key to go on ...";getchar();
Init_BQ(jcb);
SJF(jcb);
cout<<"press any key to go on ...";getchar();
Init_BQ(jcb);
RR(jcb);
cout<<"press any key to go on ...";getchar();
Init_BQ(jcb);
HRN(jcb);
cout<<"\n 由以上数据可知,短作业优先调度算法的平均周转时间最短!\n\n";
}
//******************************************************
//**************   以下分别为四个调度算法   ************
//******************************************************
void FCFS(JCB*jcb);
{
cout<<"\n1.***********先来先服务调度算法*********\n";
list<JCB>Q;
list<JCB>::literator iter;
N_Clock=0;
JCB cur_p,new_p;
Record r_rcfs;
Q.push_front(jcb[0]);
while(!Q.empty())
{
cur_p=Q.front();
while(cur_P.Lefttim!=0)
{
N_Clock++;
cur_p.Lefttime--;
if(NewCome(jcb.new_p))Q.push_back(new_p);
}
r_fcfs.FinishTime[cur_p.Id]=N_Clock;
Q.pop_front();
}
r_fcfs.R_Dis(jcb);
}
void SJF(JCB*jcb)





{
cout<<"\n2*****短作业优先调度算法*****\n";
list<JCB>Q;
list<JCB>::iterator iter;
N_Clock=0;
JCB cur_p,new_p;
record r_SJF;
Q.push_front(jcb[0]);
while(!Q.empty())
{
cur_p=Q.front();
while(cur_p.Lefttime!=());
{
N_Clock++;
cur_p.Lefttime--;
if(NewCome(jcb,new_p))
Q.push_back(new_p);
}
r_SJF.FinishTime[cur_p.Id]=N_Clock;
Q.pop_front();
Q.sort();
}
r_SJF.R_Dis(jcb);
}

void RR(JCB*jcb)
{
cout<<"\n3*****时间片轮转调度算法(时间片大小="<<Quantum<<")*****\n";
list<JCB>Q;
list<JCB>::iterator iter;
N_Clock=0;
JCB cur_p,new_p;
Record r_rr;
int temp_clock;
Q.push_front(jcb[0]);
while(!Q.empty())
{
cur_p=Q.front();
if(cur_p.Lefttime<=Quantum)
{
while(cur_p.Lefttime!=());
{
N_Clock++;
cur_p.Lefttime--;
if(NewCome(jcb,new_p))Q.push_back(new_p);
} //while
R_RR.FinishTime[cur_p.Id]=N_Clock;
Q.pop_front();
Q.sort();
}//if
else
{
temp_clock=N_Clock;
while(N_Clock+1<=temp_clock+Quantum)
{
N_Clock++;
cur_p.Lefttime--;
if(NewCome(jcb,new_p))Q.push_back(new_p);
} //while
Q.pop_front();
Q.push_back(cur_p);
}//else
}//while
r_rr.R_Dis(jcb);


}


void rp(JCB&jcb)
{
jcb.Tw++;
jcb.priority=(jcb.Tw+jcb.Ts)/jcb.Ts;
}
 

bool pr(const JCB &pre,const JCB &next) 
{
if(pre.priority<next.priority) return true;
return false;
}

void HRN(JCB*jcb)
{               //Ts(3,1)<Ts(2,2)
cout<<"\n4*****最高响应比优先调度算法(非抢占方式)*****\n";
list<JCB>Q;
list<JCB>::iterator iter;
N_Clock=0;
JCB cur_p,new_p;
Record r_hrp;
Q.push_front(jcb[0]);
while(!Q.empty())
{
iter=max_element(Q.begin().Q.end().pr);
cur_p=(*iter);
Q.erase(iter);
while(cur_p.Lefttime!=0)
{
N_Clock++;
cur_p.Lefttime--;                        
if(NewCome(jcb,new_p))Q.push_back(new_p);
for_each(Q.begin(),Q.end(),rp);
}
r_hrp.FinishTime[cur_p.Id]=N_Clock;
}
r_hrp.R_Dis(jcb);
}


下面是运行出现错误的地方
d:\c++\cpp1.cpp(14) : error C2320: expected ':' to follow access specifier 'type'
d:\c++\cpp1.cpp(39) : error C2320: expected ':' to follow access specifier 'type'
d:\c++\cpp1.cpp(49) : error C2001: newline in constant
d:\c++\cpp1.cpp(119) : error C2447: missing function header (old-style formal list?)
d:\c++\cpp1.cpp(158) : error C2059: syntax error : ')'
d:\c++\cpp1.cpp(179) : error C2065: 'Record' : undeclared identifier
d:\c++\cpp1.cpp(179) : error C2146: syntax error : missing ';' before identifier 'r_rr'
d:\c++\cpp1.cpp(179) : error C2065: 'r_rr' : undeclared identifier
d:\c++\cpp1.cpp(187) : error C2059: syntax error : ')'
d:\c++\cpp1.cpp(193) : error C2065: 'R_RR' : undeclared identifier
d:\c++\cpp1.cpp(193) : error C2228: left of '.FinishTime' must have class/struct/union type
d:\c++\cpp1.cpp(210) : error C2228: left of '.R_Dis' must have class/struct/union type
d:\c++\cpp1.cpp(234) : error C2146: syntax error : missing ';' before identifier 'r_hrp'
d:\c++\cpp1.cpp(234) : error C2065: 'r_hrp' : undeclared identifier
d:\c++\cpp1.cpp(238) : error C2039: 'Q' : is not a member of 'iterator'
        d:\program files (x86)\microsoft visual studio\vc98\include\list(94) : see declaration of 'iterator'
d:\c++\cpp1.cpp(238) : error C2228: left of '.end' must have class/struct/union type
d:\c++\cpp1.cpp(238) : error C2228: left of '.pr' must have class/struct/union type
d:\c++\cpp1.cpp(238) : error C2780: '_FI __cdecl std::max_element(_FI,_FI,_Pr)' : expects 3 arguments - 1 provided
        d:\program files (x86)\microsoft visual studio\vc98\include\algorithm(1360) : see declaration of 'max_element'
d:\c++\cpp1.cpp(238) : error C2780: '_FI __cdecl std::max_element(_FI,_FI)' : expects 2 arguments - 1 provided
        d:\program files (x86)\microsoft visual studio\vc98\include\algorithm(1351) : see declaration of 'max_element'
d:\c++\cpp1.cpp(248) : error C2228: left of '.FinishTime' must have class/struct/union type
d:\c++\cpp1.cpp(250) : error C2228: left of '.R_Dis' must have class/struct/union type
执行 cl.exe 时出错.
[解决办法]
不得不说,你老师这些代码太懒了:
1.函数和变量命名
2.C++定义类都有错误
3.不懂的东西乱用max_element(Q.begin().Q.end().pr);
。。。
牢骚就发到这吧,我修改了代码,现在编译可以通过了,执行结果不正确,你自己调试吧,解决编译错误和定位代码逻辑错误对个人能力提升很大。

#include "stdafx.h"
#include <iostream>
#include <algorithm>
#include <list>
using namespace std;
#pragma warning(disable: 4996)

void fn()
{
int a[252][1024] = {0};


}
const int num=5;
int Quantum=5;
int N_Clock=0;
//////////////////////////////
class JCB
{
public:
int Id;
int Lefttime;
int Ts;
int Ta;
int Tw;
float priority;
void SetJCB(int id,int ser_t,int arr_t)
{
Id=id;
Ts=ser_t;
Lefttime=ser_t;
Ta=arr_t;
Tw=0;
priority=0;
}
friend bool operator<(const JCB &pre,const JCB &next)
{
if(pre.Ts<next.Ts)return true;
return false;
}
};

class Record
{
public:
void R_Dis(JCB*jcb)
{
float sum=0;
int i= 0;
for(int i=0;i<num;i++)
{
Tq[i]=FinishTime[i] - jcb[i].Ta;
TqTs[i]=(float)(Tq[i]) / jcb[i].Ts;
sum+=TqTs[i];
}
float ave=sum/num;
cout<<"进程表述:\";
for(i=0;i<num;i++)
cout<<"p"<<jcb[i].Id<<"\t";
cout<<endl;
cout<<"到达时间:\t";
for(i=0;i<num;i++)
cout<<jcb[i].Ta<<"\t";
cout<<endl;
cout<<"服务时间:\t";
for(i=0;i<num;i++)
cout<<jcb[i].Ts<<"\t";
cout<<endl;
cout<<"周转时间:\t";
for(i=0;i<num;i++)
cout<<Tq[i]<<"\t";
cout<<endl;
cout<<"带权周转时间:\t";
for(i=0;i<num;i++)
cout<<TqTs[i]<<"\t";
cout<<endl<<"平均带权周转时间:"<<ave<<endl;
}
int FinishTime[num];
int Tq[num];
float TqTs[num];
};

////////////////////////////////////////////////////
bool NewCome(JCB*jcb,JCB&n_p)
{
for(int i=1;i<num;i++)
if(jcb[i].Ta==N_Clock)
{
n_p=jcb[i];
return true;
}
return false;
}
void Init_BQ(JCB*jcb)
{
jcb[0].SetJCB(0,3,0);
jcb[1].SetJCB(1,6,2);
jcb[2].SetJCB(2,4,4);
jcb[3].SetJCB(3,5,6);
jcb[4].SetJCB(4,2,8);
}
/////////////////////////////////////////////////////
void FCFS(JCB*);   //先来先服务调度算法
void SJF(JCB*);    //短作业优先调度算法
void RR(JCB*);     //时间片轮转调度算法
void HRN(JCB*);    //最高响应比优先调度算法
//**************************************************
//********        以下为主函数      ****************
//**************************************************

int _tmain(int argc, char* argv[])
{
fn();

JCB jcb[num];
Init_BQ(jcb);
FCFS(jcb);
cout<<"press any key to go on ...";getchar();
Init_BQ(jcb);
SJF(jcb);
cout<<"press any key to go on ...";getchar();
Init_BQ(jcb);
RR(jcb);
cout<<"press any key to go on ...";getchar();
Init_BQ(jcb);
HRN(jcb);
cout<<"\n 由以上数据可知,短作业优先调度算法的平均周转时间最短!\n\n";


getchar();

return 0;
}

//******************************************************
//**************   以下分别为四个调度算法   ************
//******************************************************
void FCFS(JCB*jcb)
{
cout<<"\n1.***********先来先服务调度算法*********\n";
list<JCB>Q;
list<JCB>::iterator iter;
N_Clock=0;
JCB cur_p,new_p;
Record r_rcfs;
Q.push_front(jcb[0]);
while(!Q.empty())
{
cur_p=Q.front();
while(cur_p.Lefttime != 0)
{
N_Clock++;
cur_p.Lefttime--;
if(NewCome(&new_p, cur_p))
Q.push_back(new_p);
}
r_rcfs.FinishTime[cur_p.Id]=N_Clock;
Q.pop_front();
}
r_rcfs.R_Dis(jcb);
}
void SJF(JCB*jcb)
{
cout<<"\n2*****短作业优先调度算法*****\n";
list<JCB>Q;
list<JCB>::iterator iter;
N_Clock=0;
JCB cur_p,new_p;
Record r_SJF;
Q.push_front(jcb[0]);
while(!Q.empty())
{
cur_p=Q.front();
while(cur_p.Lefttime!=0);
{
N_Clock++;
cur_p.Lefttime--;
if(NewCome(jcb,new_p))
Q.push_back(new_p);
}
r_SJF.FinishTime[cur_p.Id]=N_Clock;
Q.pop_front();
Q.sort();
}
r_SJF.R_Dis(jcb);
}

void RR(JCB*jcb)
{
cout<<"\n3*****时间片轮转调度算法(时间片大小="<<Quantum<<")*****\n";
list<JCB>Q;
list<JCB>::iterator iter;
N_Clock=0;
JCB cur_p,new_p;
Record r_rr;
int temp_clock;
Q.push_front(jcb[0]);
while(!Q.empty())
{
cur_p=Q.front();
if(cur_p.Lefttime<=Quantum)
{
while(cur_p.Lefttime!=0);
{
N_Clock++;
cur_p.Lefttime--;
if(NewCome(jcb,new_p))Q.push_back(new_p);
} //while
r_rr.FinishTime[cur_p.Id]=N_Clock;
Q.pop_front();
Q.sort();
}//if
else
{
temp_clock=N_Clock;
while(N_Clock+1<=temp_clock+Quantum)
{
N_Clock++;
cur_p.Lefttime--;
if(NewCome(jcb,new_p))Q.push_back(new_p);
} //while
Q.pop_front();
Q.push_back(cur_p);
}//else
}//while
r_rr.R_Dis(jcb);
}


void rp(JCB&jcb)
{


jcb.Tw++;
jcb.priority=(jcb.Tw+jcb.Ts)/jcb.Ts;
}


bool pr(const JCB &pre,const JCB &next) 
{
if(pre.priority<next.priority) return true;
return false;
}

void HRN(JCB*jcb)
{               //Ts(3,1)<Ts(2,2)
cout<<"\n4*****最高响应比优先调度算法(非抢占方式)*****\n";
list<JCB>Q;
list<JCB>::iterator iter;
N_Clock=0;
JCB cur_p,new_p;
Record r_hrp;
Q.push_front(jcb[0]);
while(!Q.empty())
{
iter=max_element(Q.begin(), Q.end());
cur_p=(*iter);
Q.erase(iter);
while(cur_p.Lefttime!=0)
{
N_Clock++;
cur_p.Lefttime--;                        
if(NewCome(jcb,new_p))Q.push_back(new_p);
for_each(Q.begin(),Q.end(),rp);
}
r_hrp.FinishTime[cur_p.Id]=N_Clock;
}
r_hrp.R_Dis(jcb);
}

热点排行