⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vb.cpp

📁 代码运行没有错误
💻 CPP
字号:
#define N 20
#include <stdio.h>
#include <conio.h>
typedef struct pcb
{
	char pname[N];     /*进程名*/
	int runtime;       /*运行时间*/ 
	int arrivetime;    /*到达时间*/
	char state;        /*进程状态*/
	struct pcb *next;

}PCB;
PCB head_input;
PCB head_run;
PCB *pcb_input;
static char R='r',C='C';
unsigned long current;   /*记录系统当前时间的变量*/
void inputprocess();     /*建立进程函数*/
int readyprocess();      /*建立就绪队列函数*/
int readydata();         /*判断进程是否就绪函数*/
int runprocess();        /*运行进程函数*/
FILE *f;
/*定义建立就绪队列函数*/
int readyprocess()
{
	while(1)
	{
		if(readydata()==0)       /* 判断是否就绪函数*/
			return 1;
		else
			runprocess();        /*运行进程函数*/

	}
}
/*定义判断就绪队列是否有进程函数*/
int readydata()
{
	if(head_input.next==NULL)
	{
		if(head_run.next==NULL)
			return 0;
		else 
			return 1;
	}
	PCB *p1,*p2,*p3;
	p1=head_run.next;
	p2=&head_run;
	while(p1!=NULL)
	{
		p2=p1;
		p1=p2->next;
	}
	p1=p2;
	p3=head_input.next;
	p2=&head_input;
	while(p3!=NULL)
	{
		if(((unsigned long)p3->arrivetime <=current)&&(p3->state ==R))
		{
			printf("Time slice is %8d(time%4d);Process%s start,\n",current,(current+500)/1000,p3->pname );
            fprintf(f,"Time slice is %8d(time%4d);Process %s stare ,\n",current,(current+500)/1000,p3->pname );
			p2->next =p3->next ;
			p3->next =p1->next ;
			p1->next =p3;
			p3=p2;
		}
		p2=p3;
		p3=p3->next ;
	}
	return 1;
}
int runprocess()    /*定义运行进程函数*/
{
	PCB *p1,*p2;
	if (head_run.next ==NULL)
	{
		current++;
		return 1;
	}
	else
	{
		p1=head_run.next ;
		p2=&head_run;
		while (p1!=NULL)
		{
			p1->runtime --;
			current++;
			if(p1->runtime <=0)
			{
				printf("Time slice is %8d time %4d;Process %s end.\n",current,(current+500)/1000,p1->pname );
				fprintf(f,"Time slice is %8d time %4d;Process %s end.\n",current,(current+500)/1000,p1->pname );
				p1->state =C;
				p2->next =p1->next ;
				delete p1;
				p1=NULL;

			}
			else
			{
				p2=p1;
				p1=p2->next ;
			}
		}
		return 1;
	}
}
/*-----定义建立进程函数-----*/
void inputprocess()
{
	PCB *p1,*p2;
	int num;      /*要建立的进程数*/
	 unsigned long max=0;
	 printf("How many processes do you want to run: ");

	 fprintf(f,"How many processes do you want to run:");
	 scanf("%d",&num);
	 fprintf(f,"%d\n",&num);
	 pcb_input=new PCB;
	 p1=pcb_input;
	 for (int i=0;i<num;i++)
	 {
		 printf("No. %3d process input pname: ",i+1);
		 fprintf(f,"No. %3d process input pname: ",i+1);
		 scanf("%s",p1->pname );
		 fprintf(f,"%s\n",p1->pname );
		 printf("            runtime:  ");
		 fprintf(f,"            runtime:  ");
		 scanf("%d",&(p1->runtime ));
		 fprintf(f,"%d\n",&(p1->runtime ));
		 printf("         arrivetime:  ");
		 fprintf(f,"         arrivetime:  ");
		 scanf("%d",&(p1->arrivetime ));
		 fprintf(f,"%d\n",&(p1->arrivetime ));
		 p1->runtime =(p1->runtime )*1000;
		 p1->arrivetime =(p1->arrivetime )*1000;
		 p1->state =R;
		 if((unsigned long)(p1->arrivetime )>max)
			 max =p1->arrivetime ;
		 p1->next =new PCB;
		 p2=p1;
		 p1=p1->next ;


	 }
	 delete p1;
	 p1=NULL;
	 p2->next =NULL;

}
/*------定义建立进程函数------*/

void inputprocess1()
{
	PCB *p1,*p2;
	int num;      /*要建立的进程数*/
	 unsigned long max=0;
	 printf("How many processes do you want to run: ");

	 fprintf(f,"How many processes do you want to run:");
	 scanf("%d",&num);
	 fprintf(f,"%d\n",&num);
	 pcb_input=new PCB;
	 p1=pcb_input;
	 for (int i=0;i<num;i++)
	 {
		 printf("No. %3d process input pname: ",i+1);
		 fprintf(f,"No. %3d process input pname: ",i+1);
		 scanf("%s",p1->pname );
		 fprintf(f,"%s\n",p1->pname );
		 printf("            runtime:  ");
		 fprintf(f,"            runtime:  ");
		 scanf("%d",&(p1->runtime ));
		 fprintf(f,"%d\n",&(p1->runtime ));
		 printf("         arrivetime:  ");
		 fprintf(f,"         arrivetime:  ");
		 scanf("%d",&(p1->arrivetime ));
		 fprintf(f,"%d\n",&(p1->arrivetime ));
		 p1->runtime =(p1->runtime )*1000;
		 p1->arrivetime =(p1->arrivetime )*1000;
		 p1->state =R;
		 if(i!=num-1)
		 {
			 p1->next =new PCB;
			 p1=p1->next ;
		 }
		 else
		 {
			 p1->next =pcb_input;
		 }
	 }
	 p1=pcb_input;
	 while (p1->next !=pcb_input)
	 {
		 printf("process name is %s\n",p1->pname );
		 fprintf(f,"process name is %s\n",p1->pname );
		 p1=p1->next ;
	 }
	 printf("process name is %s\n",p1->pname );
	 fprintf(f,"process name is %s\n",p1->pname );
}
void runprocess1()  /*定义运行进程函数*/
{
     pcb *pre,*cur;
	 if(pcb_input==NULL)
		 return ;
	 else
	 {
		 cur=pcb_input;
		 pre=cur->next ;
		 while(pre->next !=cur)   //find the last node in the list
		 {
			 pre=pre->next ;
		 }
		 while ((cur->runtime >=0)||(cur->next !=cur))
		 {
			 if(current<(unsigned long)cur->arrivetime )
			 {
				 pre=cur;
				 cur=cur->next ;
			 }
			 else
			 {
				 if(current==(unsigned long)cur->arrivetime )
				 {
					 printf("Time slice is %8d(time %4d);Process %s start,\n",current,(current+500)/1000,cur->pname );
					 fprintf(f,"Time slice is %8d(time %4d);Process %s start,\n",current,(current+500)/1000,cur->pname );

				 }
				 cur->runtime --;
				 if(cur->runtime <0)//means the job have ended;
				 {
                       printf("Time slice is %8d(time %4d);Process %s start,\n",current,(current+500)/1000,cur->pname );
					 fprintf(f,"Time slice is %8d(time %4d);Process %s start,\n",current,(current+500)/1000,cur->pname );
                      if(cur==cur->next )   //delete the last job then break;
					  {
						  delete cur;
						  cur=NULL;
						  return;
					  }
					  else
					  {
						  pre->next =cur->next ;
						  pcb *tmp=cur;
						  delete tmp;
						  cur=pre->next ;
					  }
				 }
				 else
				 {
					 cur->runtime --;
					 pre=cur;
					 cur=cur->next ;
				 }
			 }
			 current++;
		 }
	 }
}
//To DO set one cycle link to solve the problem
void main()
{
	f=fopen("result.txt","w");
	printf("\ntime 1=1000 time slice\n");
	fprintf(f,"\ntime 1=1000 time slice\n");
	current=0;
	inputprocess();
	readyprocess();
	//inputprocess();
	//runprocess();
	getch();
	fclose(f);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -