final
#include<stdio.h>
#include<string.h>
struct PCB{
char name[10];
int arr_time;
int bur_time;
int sta_time;
int fin_time;
int T;
double W;
}
int num;
struct PCB p[10];
int n;
void creat_Process(){
printf("請(qǐng)輸入創(chuàng)建進(jìn)程個(gè)數(shù):\n");
scanf("%d",&num);
for(int i=1;i<=num;i++){
printf("進(jìn)程名稱、到達(dá)時(shí)間、服務(wù)時(shí)間:\n");
scanf("%s",&p[i].name);
scanf("%d",&p[i].arr_time);
scanf("%d",&p[i].bur_time);
}}
void display(){
for(int i=1;i<=num;i=++){
printf(" \t%s",p[i].name);}
printf(" \n到達(dá)時(shí)間");
for(i=1;i<=num;i++){
printf("\t%d",p[i].arr_time);}
printf(" \n服務(wù)時(shí)間");
for(i=1;1<=num;i++){
printf("\t%d",p[i].bur_time);}
printf("\n開始運(yùn)行時(shí)間");
for(i=1;i<=num;i++){
printf("\t%d",p[i].sta_time);}
printf("\n完成時(shí)間");
for(i=1;i<=num;i++){
printf("\t%d",p[i].fin_time);}
printf("\n周轉(zhuǎn)時(shí)間");
for(i=1;i<=num;i++){
printf("\t%d",p[i].T);}
printf("\n帶權(quán)周轉(zhuǎn)時(shí)間");
for(i=1;i<=num;i++){
printf("\t%.1lf",p[i].W);}}
void FCFS(){
for( int i=1;i<=num;i++){
for(int j=i+1;j<=num;j++){
if(p[i].arr_time>p[j].arr_time){
p[0]=p[j];
p[j]=p[i];
p[i]=p[0];}}}
p[1].sta_time=p[1].arr_time;
p[1].fin_time=p[1].arr_time+p[1].bur_time;
p[1].T=p[1].fin_time-p[1].arr_time;
p[1].W=P[1].T/P[1].bur_time;
for(i=2;i<=num;i++){
p[i].sta_time=p[i-1].sta_time+p[i-1].bur_time;
p[i].fin_time=p[i-1].fin_time+p[i].bur_time;?
p[i].T=p[i].fin_time-p[i].arr_time;
p[i].W=(double)p[i].T/p[i].bur_time;}
double sum_T=0;
double sum_W=0;
for(i=1;i<=sum;i++)
{
sum_T+=p[i].T;
sum_W+=p[i].w;}
double o_T=sum_T/num;
double o_W=sum_W/num;
printf("\nFCFS");
display();
printf("\n平均周轉(zhuǎn)時(shí)間:%.2lf",o_T);
printf("\n平均帶權(quán)周轉(zhuǎn)時(shí)間:%.2lf",o_W);}
viod SJF(){
for( int i=1;i<=num;i++){
for(int j=1;j<=num;j++){
if(p[j].arr_time>p[j+1].arr_time){
p[0]=p[j];
p[j]=p[j+1];
p[j+1]=p[0];}
else if(p[j].arr_time==p[j+1].arr_time){
if(p[j].bur_time>p[j+1].bur_time){
p[0]=p[j];
p[j]=p[j+1];
p[j+1]=p[0];
}
}
}
p[1].sta_time=p[1].arr_time;
p[1].fin_time=p[1].arr_time+p[1].bur_time;
p[1].T=p[1].fin_time-p[1].arr_time;
p[1].W=P[1].T/P[1].bur_time;
int time=p[1].fin_time;
for(i=2;i<=num;i++){
for(int j=i+1;j<=num;j++){
if(time>p[j].arr_time){
if(p[i].bur_time>p[j].bur_time){
p[0]=p[j];
p[j]=p[i];
p[i]=p[0];}}
else{
continue}
}
p[i].sta_time=p[i-1].sta_time+p[i-1].bur_time;
p[i].fin_time=p[i-1].fin_time+p[i].bur_time;?
p[i].T=p[i].fin_time-p[i].arr_time;
p[i].W=(double)p[i].T/p[i].bur_time;
}
double sum_T=0;
double sum_W=0;
for(i=1;i<=sum;i++)
{
sum_T+=p[i].T;
sum_W+=p[i].w;}
double o_T=sum_T/num;
double o_W=sum_W/num;
printf("\nSJF");
display();
printf("\n平均周轉(zhuǎn)時(shí)間:%.2lf",o_T);
printf("\n平均帶權(quán)周轉(zhuǎn)時(shí)間:%.2lf",o_W);}
viod menu(){
printf("\t*************************\n");
printf("\t*\t1.創(chuàng)建新進(jìn)程? ? ? ? ? ? ?*\n");
printf("\t*\t2.先來先服務(wù)問題? ? ? ? ? ? ? ?*\n");
printf("\t*\t3.短作業(yè)優(yōu)先問題? ? ? ? ? ?*\n");
printf("\t*\t4.退出程序? ? ? ? ? ?*\n");
printf("\t*************************\n");}
int main(){
int n;
menu();
while(1){
printf("\n\n請(qǐng)輸入你的選擇:\n");
scanf("%d",&n);
switch(n){
case 1:
creat_Process();
break;
case 2:
FCFS();
break;
case 3:
SJF();
break;
case 4:
printf("Bye");
return 0;
}}}