CPP/计算机组成原理实验代码/FCFS_2.cpp
2023-05-12 00:34:15 +08:00

112 lines
2.7 KiB
C++

#include<iostream>
using namespace std;
#define N 3
struct PCB
{
char name[8];
int arrive_time;
int run_time;
int finish_time;
int zhouzhuan_time;
float daiquan_time;
};
float sumzhouzhuantime,sumdaiquanzhouzhuantime;
struct PCB pcb[N],temp;
void input(); //输入进程
void sort(); //对输入的进程按到达时间进行排序执行
void output(); //输出算法调度时间表
int main()
{
input();
sort( );
output();
}
void input()
{
int i;
cout<<"--------------------------------------"<<endl;
cout<<" FCFS调度算法 "<<endl;
cout<<"--------------------------------------"<<endl;
cout<<" 输入五个进程信息:"<<endl;
for ( i=0;i<N;i++)
{
printf("请输入进程名:\n" );
scanf("%s",pcb[i].name);
printf("请输入到达时间:");
scanf("%d",&pcb[i].arrive_time);
printf("请输入要运行时间:");
scanf("%d",&pcb[i].run_time);
}
cout<<"各进程:"<<endl;
for( i=0;i<N;i++)
{ printf("%s ",pcb[i].name);
printf("%d ",pcb[i].arrive_time);
printf("%d \n",pcb[i].run_time);
}
}
void sort()//按照到达时间对进程进行排序
{
for(int i=0;i<N-1;i++)
{
for(int j=i+1;j<N;j++)
{
if(pcb[i].arrive_time>pcb[j].arrive_time)
{
temp=pcb[i];
pcb[i]=pcb[j];
pcb[j]=temp;
}
}
}
}
void output()
{
int i;
cout<<"FCFS调度算法:"<<endl;
pcb[0].finish_time=pcb[0].arrive_time+pcb[0].run_time;
pcb[0].zhouzhuan_time=pcb[0].finish_time-pcb[0].arrive_time;
pcb[0].daiquan_time=(float)pcb[0].zhouzhuan_time/pcb[0].run_time;
for(i=1;i<N;i++)
{
if(pcb[i].arrive_time>pcb[i-1].finish_time)
{
pcb[i].finish_time=pcb[i].arrive_time+pcb[i].run_time;
pcb[i].zhouzhuan_time=pcb[i].run_time;
pcb[i].daiquan_time=(float)pcb[i].zhouzhuan_time/pcb[i].run_time;
}
else
{
pcb[i].finish_time=pcb[i-1].finish_time+pcb[i].run_time;
pcb[i].zhouzhuan_time=pcb[i].finish_time-pcb[i].arrive_time;
pcb[i].daiquan_time=(float)pcb[i].zhouzhuan_time/pcb[i].run_time;
}
}
for(i=0;i<N;i++)
{
sumzhouzhuantime+=pcb[i].zhouzhuan_time;
sumdaiquanzhouzhuantime+=pcb[i].daiquan_time;
}
printf("----------------------------------------------------------------\n");
printf("进程名 到达时间 运行时间 完成时间 周转时间 带权周转时间 \n");
printf("----------------------------------------------------------------\n");
for(i=0;i<N;i++)
{
printf(" %s %d %d %d %d %.2f\n",pcb[i].name,pcb[i].arrive_time,pcb[i].run_time,pcb[i].finish_time,pcb[i].zhouzhuan_time,pcb[i].daiquan_time);
}
cout<<"平均周转时间:"<<sumzhouzhuantime/N<<endl;
cout<<"平均带权周转时间:"<<sumdaiquanzhouzhuantime/N<<endl;
printf("----------------------------------------------------------------\n");
}