四.编码实现
1.先进先出算法(源程序) #include
using namespace std;
struct fcfs{
char name[10]; float arrivetime; float servicetime; float starttime; float finishtime; float zztime; float dqzztime; };
fcfs a[100];
void input(fcfs *p,int N) {
int i;
cout< printf(\ 请您输入进程的 名字 到达时间 服务时间: (例如: a 0 100)\\n\\n\ for(i=0;i<=N-1;i++) { printf(\ 请您输入进程%d的信息:\\t\ scanf(\ } } void Print(fcfs *p,float arrivetime,float servicetime,float starttime,float finishtime,float zztime,float dqzztime,int N) { int k; printf(\调用先来先服务算法以后进程运行的顺序是: \ printf(\ for(k=1;k } cout< printf(\ 具体进程调度信息:\\n\ printf(\进程名 到达时间 服务时间 开始时间 结束时间 周转时间 带权周转时间\\n\ for(k=0;k<=N-1;k++) { printf(\ %-.2f\\t %-.2f\\t %-.2f\\t %-.2f\\t %-.2f\\n\p[k].arrivetime, p[k].servicetime,p[k].starttime,p[k].finishtime,p[k].zztime,p[k].dqzztime); } getchar(); //此处必须要有这个函数,否则就看不到显示器上面的输出,可以看到的结果只是一闪而过的一个框剪 } void sort(fcfs *p,int N) //排序 { for(int i=0;i<=N-1;i++) for(int j=0;j<=i;j++) if(p[i].arrivetime fcfs temp; temp=p[i]; p[i]=p[j]; p[j]=temp; } } void deal(fcfs *p, float arrivetime,float servicetime,float starttime,float finishtime,float &zztime,float &dqzztime,int N) //运行阶段 { int k; for(k=0;k<=N-1;k++) { if(k==0) { p[k].starttime=p[k].arrivetime; p[k].finishtime=p[k].arrivetime+p[k].servicetime;} else { p[k].starttime=p[k-1].finishtime; p[k].finishtime=p[k-1].finishtime+p[k].servicetime;} } for(k=0;k<=N-1;k++) { p[k].zztime=p[k].finishtime-p[k].arrivetime; p[k].dqzztime=p[k].zztime/p[k].servicetime; } } void FCFS(fcfs *p,int N) { float arrivetime=0,servicetime=0,starttime=0,finishtime=0,zztime=0,dqzztime=0; sort(p,N); deal(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N); Print(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N); getchar(); } char menu() { char cse1; while(1) { system(\ fflush(stdin); cout< cout<<\*********欢<<<<<<<<<<< >>>>>>>>>>>>迎********* ||\ cout<<\ ||\ cout<<\ 进程调度算法模拟\ cout<<\ ||\ cout<<\ 先来先服务调度算法 \ cout<<\ ||\ cout<<\<<<<<<<<<<<<<<<<<<<< int N; cout< printf(\先来先服务调度算法@@@!!!--->>\\n\ cout< printf(\输入进程数目:\ scanf(\ input(a,N); FCFS(a,N); cse1=getchar(); system(\ return EXIT_SUCCESS; return cse1; } } int main(){ menu(); } 2时间片轮转算法(源程序) #include static int id = 0; int process_num; int current_process; struct pcb { char name[20]; int id; char state; int need_time; int run_time; struct pcb *next; }*p, *q, *first_pcb = NULL; typedef struct pcb PCB; /* 排序输出各个进程PCB */ void printSort() { int i; q = first_pcb; for(i = 0; i < process_num;) { if(i == q -> id) { printf(\need_time, q -> run_time); i++; q = first_pcb; } else { q = q -> next; if(q == NULL) { q = first_pcb; i++; } } } } /* 调度一次PCB并显示 */ void showPCB() { int i; first_pcb -> run_time++; first_pcb -> state = 'r'; /* 进程执行完毕,将其清除出链表 */ if((first_pcb -> run_time) == (first_pcb -> need_time)) { current_process--; printf(\进程%s已经运行完毕\system(\ first_pcb = first_pcb -> next; if(first_pcb == NULL) { printf(\所有进程都已经运行完毕\system(\return; } first_pcb -> state = 'r'; } system(\ /* 显示运行的进程和就绪的进程 */ q = first_pcb -> next; printf(\当前运行的进程是:进程%s/n/n\