回 帖 发 新 帖 刷新版面

主题:求助修改程序,出现这些错误代码,怎样修改

[C++ Error] jincheng.cpp(2): E2303 Type name expected
[C++ Error] jincheng.cpp(2): E2139 Declaration missing ;
[C++ Error] jincheng.cpp(12): E2451 Undefined symbol 'NULL'
[C++ Error] jincheng.cpp(19): E2303 Type name expected
[C++ Error] jincheng.cpp(19): E2139 Declaration missing ;
[C++ Error] jincheng.cpp(37): E2303 Type name expected
[C++ Error] jincheng.cpp(37): E2139 Declaration missing ;
[C++ Error] jincheng.cpp(60): E2303 Type name expected
[C++ Error] jincheng.cpp(60): E2139 Declaration missing ;
[C++ Error] jincheng.cpp(76): E2303 Type name expected
[C++ Error] jincheng.cpp(76): E2139 Declaration missing ;
[C++ Error] jincheng.cpp(86): E2090 Qualifier 'TForm1' is not a class or namespace name
[C++ Error] jincheng.cpp(86): E2040 Declaration terminated incorrectly


源程序如下:
#define get pcb(type)(type*)malloc(sizeof(type))
struct pcb {String name1;
char state1; //进程状态
int super1; //优先数
int ntime1; // 运行所需时间
int rtime1; //已运行时间
int stime1; //到达时间
int btime1; //开始时间
int ftime1; //完成时间
int totime1; //周转时间
struct pcb *link;
}*ready=NULL;
pcb *p;
int countsup=0;//用于记录作业数
float ave1=0; //整组作业的带权平均周转时间
float turn1=0;//整组作业的平均周转时间
//--------------------------------------------------------------
struct pcbsr{
String name;
char state; //进程状态
int ntime; // 运行所需时间
int rtime; //已运行时间  
int stime; //到达时间
int btime; //开始时间
int ftime; //完成时间
int totime; //周转时间
struct pcbsr *link;
};

pcbsr *readysr=NULL; //在简单轮转法中记录队列的首指针
pcbsr *psr; //在简单轮转法中记录进程,连成链表
pcbsr *rearsr; //在简单轮转法中记录队列的尾指针
int countpsr=0; //用于记录作业数
float ave2=0; //平均带权周转时间
float turn2=0; //平均周转时间
//-------------------------------------------------------------
struct pcbmul{String name;
char state; //进程状态  
int super; //优先数  
int ntime; // 运行所需时间  
int rtime; //已运行时间  
int btime; //开始时间  
int ftime; //完成时间  
int totime; //周转时间  
struct pcbmul *link;
};
pcbmul *pmul; //在多队列反馈算法中记录进程  
pcbmul *ready1=NULL; //记录第一队列首指针  
pcbmul *ready2=NULL;
pcbmul *ready3=NULL;
pcbmul *ready4=NULL;
pcbmul *ready5=NULL;
pcbmul *rear1; //记录第一队列尾指针  
pcbmul *rear2;
pcbmul *rear3;
pcbmul *rear4;
pcbmul *rear5;
//----------------------------------------------------------------
struct pcbsf{
String name;
int ntime; // 运行所需时间  
int rtime; //已运行时间  
int btime; //开始时间  
int ftime; //完成时间  
int totime; //周转时间  
struct pcbsf *link;
};
pcbsf *psf; //在短作业优先算法中记录进程  
pcbsf *readysf1; //在此算法中用了两个队列此为第一队列的首指针  
pcbsf *readysf2;
pcbsf *rearsf1; //第一队列尾指针  
pcbsf *rearsf2;
int countsf=0; //在短作业优先中记录输入的进程数  
typedef struct pcb PCB;
//---------------------------------------------------------------
struct pcbfcfs{String name;
int rtime; //到达时间  
int ntime; //服务时间  
int btime; //开始时间  
int ftime; //完成时间  
int totime; //周转时间  

}FCFS[50];
pcbfcfs SF[10]; //用于记录短作业优先算法中的第一个进程  
int count=0; //记录输入的进程数
void _fastcall TForm1::Button1Click(TObject *Sender)
{
p=getpcb(pcb);
p->name1=Edit1->Text;
p->super1=StrToInt(Edit2->Text);
p->ntime1=StrToInt(Edit3->Text);
p->stime1=0;
p->rtime1=0;
p->state1='W';
p->link=NULL;
Memo1->Lines->Add(p->name1+"\t"+IntToStr(p->super1)+"\t"+IntToStr(p->ntime1));
Edit1->Clear();
Edit2->Clear();
Edit3->Clear();
sort();
countsup++;
Button2->Enabled=true;
}

Void TForm1::sort()//根据优先数对后备队列进行排队
{


bstpcb *fir,*sec;
int ins=0;
if((ready==NULL)||((p->super1)>(ready->super1)))
{
p->link=ready;
ready=p;
}
else
{
fir=ready;
sec=fir->link;
while(sec!=NULL)
{
if((p->super1)>(sec->super1))
{
p->link=sec;
fir->link=p;
sec=NULL;
ins=1;
}
else
{
fir=fir->link;
sec=sec->link;
}

}
if(ins==0) fir->link=p;
}
}

int TForm1::space()//计算后备队列的长度
{
int l=0;pcb *pr=ready;
while(pr!=NULL)
{
l++;
pr=pr->link;
}
return(l);  
}

void TForm1::check(int x)
{

pcb *pr;
String s;
s="现在执行的进程是:"+p->name1;
if(p->rtime1==0) p->btime1=x;
Memo2->Lines->Add(s);

disp(p);
pr=ready;
Memo2->Lines->Add("就绪队列是:");
while(pr!=NULL)
{
disp(pr);
pr=pr->link;
}

}

void TForm1::running(int x)
{

(p->rtime1)++;

if(p->rtime1==p->ntime1)
{
p->ftime1=x;
destroy( );

}
else
{

(p->super1)--;
p->state1='w';
sort();
}
}

void TForm1::disp(pcb *pr)

{
Memo2->Lines->Add("作业名\t状态\t优先数\t所需时间\t执行时间");
Memo2->Lines->Add(pr->name1+"\t"+pr->state1+"\t"+IntToStr(pr->super1)+

"\t"+IntToStr(pr->ntime1)+"\t"+"\t"+IntToStr(pr->rtime1));
}

void TForm1::destroy()
{
float aveturn;
String s;
s="作业 "+p->name1+" 已经完成。";
Memo2->Lines->Add(s);

p->totime1=p->ftime1-p->stime1;//周转时间等于完成时间-到达时间  
aveturn=(float)p->totime1/p->ntime1;//带权周转时间等于周转时间/服务时间  
turn1=turn1+p->totime1;
ave1=ave1+aveturn;
String q;
q.sprintf("%4.2f",aveturn) ;
s="作业名 到达时间 服务时间 开始时间 完成时间 周转时间 带权周转时间";
Memo2->Lines->Add(s);
Memo2->Lines->Add(p->name1+"\t "+IntToStr(p->stime1)+
"\t "+IntToStr(p->ntime1)+"\t "+IntToStr(p->btime1)+
"\t "+IntToStr(p->ftime1)+"\t "+IntToStr(p->totime1)+
"\t "+q );

free(p);
}

void __fastcall TForm1::Button2Click(TObject *Sender)
{
int len,t=0,h=0;
//float wholeto,wholeave;
String s;
len=space();
while((len!=0)&&(ready!=NULL))
{

h++;
s="执行次数:"+IntToStr(h);
Memo2->Lines->Add(s);
p=ready;
ready=p->link;
p->link=NULL;
p->state1='R';

check(t);
running(t);
Sleep(500);
t++;

}

Memo2->Lines->Add("所有作业已执行完毕。");

turn1=turn1/countsup;
ave1=ave1/countsup;

String r;
r.sprintf("%4.2f",turn1);
s="这组作业的平均周转时间为:"+r;
Memo2->Lines->Add(s);
String p;
p.sprintf("%4.2f",ave1);
s="这组作业的平均带权周转时间为:"+p;
Memo2->Lines->Add(s);

}
//---------------------------------------------------------------------------

void TForm1::sortsr()//简单轮转法,先来先服务后备队列排序
{
if(readysr==NULL)
{
psr->link=readysr;
readysr=psr;
rearsr=readysr;

}
else
{
rearsr->link=psr;
psr->link=NULL;
rearsr=psr;

}
}
void TForm1::sort1()//多级反馈队列后备第一队列的排序
{
if(ready1==NULL)
{
pmul->link=ready1;
ready1=pmul;
rear1=ready1;

}
else
{
rear1->link=pmul;
pmul->link=NULL;
rear1=pmul;

}
}

void TForm1::sort2()//多级反馈队列后备第二队列的排序  
{
if(ready2==NULL)
{
pmul->link=ready2;
ready2=pmul;
rear2=ready2;

}
else
{
rear2->link=pmul;
pmul->link=NULL;
rear2=pmul;

}
}

void TForm1::sort3()//多级反馈队列后备第三队列的排序  
{
if(ready3==NULL)
{
pmul->link=ready3;
ready3=pmul;
rear3=ready3;

}
else
{
rear3->link=pmul;
pmul->link=NULL;
rear3=pmul;

}
}

void TForm1::sort4()//多级反馈队列后备第四队列的排序  
{
if(ready4==NULL)
{
pmul->link=ready4;
ready4=pmul;
rear4=ready4;

}
else
{
rear4->link=pmul;
pmul->link=NULL;
rear4=pmul;

}
}

void TForm1::sort5()//多级反馈队列后备第五队列的排序  
{
if(ready5==NULL)
{
pmul->link=ready5;
ready5=pmul;
rear5=ready5;

}
else
{
rear5->link=pmul;
pmul->link=NULL;
rear5=pmul;

}
}
void TForm1::sortsf1()//短作业优先后备队列的排序
{
pcbsf *fir,*sec;
int ins=0;
if((readysf1==NULL)||((psf->ntime)<(readysf1->ntime)))
{
psf->link=readysf1;
readysf1=psf;
}
else
{
fir=readysf1;
sec=fir->link;
while(sec!=NULL)
{
if((psf->ntime)<(sec->ntime))
{
psf->link=sec;
fir->link=psf;
sec=NULL;
ins=1;
}
else
{
fir=fir->link;
sec=sec->link;
}

}
if(ins==0) fir->link=psf;
}
}

void TForm1::sortsf2()//短作业优先后备队列的排序  
{
pcbsf *fir,*sec;
int ins=0;
if((readysf2==NULL)||((psf->ntime)<(readysf2->ntime)))
{psf->link=readysf2;
readysf2=psf;
}
else
{fir=readysf2;
sec=fir->link;
while(sec!=NULL)
{ if((psf->ntime)<(sec->ntime))
{,psf->link=sec;
fir->link=psf;
sec=NULL;
ins=1;
}
else
{ fir=fir->link;
sec=sec->link;
}
}
if(ins==0) fir->link=psf;
}
}

回复列表 (共1个回复)

沙发

在最上面加上:
#include <stdio.h>
#include <stdlib.h>

我来回复

您尚未登录,请登录后再回复。点此登录或注册