求帮助一下

C++语言 码拜 9年前 (2016-04-13) 1167次浏览
 #include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include<iostream>
#define closetime  300
#define PERIOD1    20
#define PERIOD2    30
#define PERIOD3    50
#define CPUTIME1   5
#define CPUTIME2   15
#define CPUTIME3   10
using namespace std;
typedef struct TCB {
int period; /*周期*/
int cputime;/*需要的cpu时间*/
int remain; /*剩余的cpu时间*/
int num;   /*所处周期数*/
int laxity; /*松弛度*/
} TCB;   /*调度*/

TCB tcb[3];
int curtime;/*调度时刻*/

void init(void)
{ int i;
curtime=0;
tcb[0].period=PERIOD1;tcb[0].cputime=CPUTIME1;
tcb[1].period=PERIOD2;tcb[1].cputime=CPUTIME2;
tcb[2].period=PERIOD3;tcb[2].cputime=CPUTIME3;
/*为调度周期及需要cpu时间赋值*/
for(i=0;i<3;++i){
tcb[i].num=1;
/*初始周期号*/
tcb[i].remain=tcb[i].cputime;/*初始剩余时间*/
tcb[i].laxity=tcb[i].period-tcb[i].remain;/*初始松弛度*/
}
}

void schedule(void)/*调度程序*/
{  int i,j;/*i是被调度运行任务,j是未运行任务*/
int duration;/*本次运行持续时间*/
i=tcb[0].laxity<=tcb[1].laxity ?0:1;/*选最小松弛度的任务*/
i=tcb[1].laxity<=tcb[2].laxity ?0:1;
i=tcb[0].laxity<=tcb[2].laxity ?0:1;
if(curtime<tcb[i].period*(tcb[i].num-1))/*尚未进入该周期*/
i=(i+1)%3;/*选另两个个任务*/
j=(i+1)%3;
if(tcb[i].remain<=tcb[j].laxity)
duration=tcb[i].remain; /*让它运行到结束*/
else
duration=tcb[j].laxity;/*只能运行另一任务的松弛度的时间*/
tcb[i].remain-=duration;/*修改剩余时间*/
printf(” 任务名:%-3d所处周期:%-3d调度时刻:%-6d运行持续时间:%-3d\n”,
i,tcb[i].num,curtime,duration);

curtime+=duration;/*时间推进到下一调度时刻*/
if(tcb[i].remain==0){/*本周期的任务已完成*/
tcb[i].num++;
tcb[i].remain=tcb[i].cputime;/*设置初始剩余时间*/
}
for(i=0;i<3;++i)/*重新计算松弛度*/
tcb[i].laxity=tcb[i].num*tcb[i].period-curtime-tcb[i].remain;
}

void main(void)
{ init();

while(curtime<closetime)
schedule();
getch();
}
怎么样把其中任务名从数字123改成字母ABC

解决方案

80

改成%-3c输出,i变成”A”+i就行

#include <stdio.h>   
#include <stdlib.h>   
#include <conio.h> 
#include<iostream>
#define closetime  300  
#define PERIOD1    20   
#define PERIOD2    30   
#define PERIOD3    50 
#define CPUTIME1   5   
#define CPUTIME2   15
#define CPUTIME3   10
using namespace std;
typedef struct TCB {   
	int period; /*周期*/   
	int cputime;/*需要的cpu时间*/   
	int remain; /*剩余的cpu时间*/   
	int num;   /*所处周期数*/   
	int laxity; /*松弛度*/    
} TCB;   /*调度*/
TCB tcb[3];   
int curtime;/*调度时刻*/   
void init(void)   
{ 
	int i;   
	curtime=0;   
	tcb[0].period=PERIOD1;tcb[0].cputime=CPUTIME1;
	tcb[1].period=PERIOD2;tcb[1].cputime=CPUTIME2;
	tcb[2].period=PERIOD3;tcb[2].cputime=CPUTIME3;
	/*为调度周期及需要cpu时间赋值*/ 
	for(i=0;i<3;++i){   
		tcb[i].num=1;
		/*初始周期号*/   
		tcb[i].remain=tcb[i].cputime;/*初始剩余时间*/   
		tcb[i].laxity=tcb[i].period-tcb[i].remain;/*初始松弛度*/   
	}   
}   
void schedule(void)/*调度程序*/   
{  
	int i,j;/*i是被调度运行任务,j是未运行任务*/   
	int duration;/*本次运行持续时间*/   
	i=tcb[0].laxity<=tcb[1].laxity ?0:1;/*选最小松弛度的任务*/  
	i=tcb[1].laxity<=tcb[2].laxity ?0:1;
	i=tcb[0].laxity<=tcb[2].laxity ?0:1;
	if(curtime<tcb[i].period*(tcb[i].num-1))/*尚未进入该周期*/   
		i=(i+1)%3;/*选另两个个任务*/   
	j=(i+1)%3;   
	if(tcb[i].remain<=tcb[j].laxity)   
		duration=tcb[i].remain; /*让它运行到结束*/
	else
		duration=tcb[j].laxity;/*只能运行另一任务的松弛度的时间*/   
	tcb[i].remain-=duration;/*修改剩余时间*/   
	printf(" 任务名:%-3c所处周期:%-3d调度时刻:%-6d运行持续时间:%-3d\n",   
		"A" + i,tcb[i].num,curtime,duration);   
	curtime+=duration;/*时间推进到下一调度时刻*/  
	if(tcb[i].remain==0){/*本周期的任务已完成*/
		tcb[i].num++;
		tcb[i].remain=tcb[i].cputime;/*设置初始剩余时间*/   
	}   
	for(i=0;i<3;++i)/*重新计算松弛度*/   
		tcb[i].laxity=tcb[i].num*tcb[i].period-curtime-tcb[i].remain;   
}   
void main(void)   
{ 
	init();   
	while(curtime<closetime)   
		schedule();   
	getch();   
}  

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明求帮助一下
喜欢 (0)
[1034331897@qq.com]
分享 (0)