操作系统实验之时间轮转算法(数组实现,简单易懂,快速编程)

mac2024-08-20  56

前段时间上操作系统实验课,刚开始因为懒得写所以直接在上找代码copy。 但是找了很久发现都有些许bug不能运行出来,一气之下自己动手写了。 看了很多人都是用链表写的,但是由于我上学期数据结构没怎么仔细听课,链表没学好,所以我是用数组写的,我觉得数组更简单易懂。 尚在学习,代码肯定多有不足,望大家指教。

#include<cstdlib> #include<iostream> #include<iomanip> using namespace std; struct F{ char name[10]; float arrivetime; float servicetime; float savetime; float finishtime; float zztime; float dqzztime; }; F a[100]; float timeslice;//时间片 float pjzztime; float pjdqzztime; float z; float d; void input(F *p,int N) { int i; cout<<endl; cout<<"请输入进程的名字、到达时间、服务时间:(例如A 0 1)"; cout<<endl; for(i=0;i<N;i++) { cout<<"请输入进程"<<i+1<<"的信息:"; cin>>p[i].name>>p[i].arrivetime>>p[i].servicetime; p[i].savetime=p[i].servicetime; } } void Print(F *p,float arrivetime,float servecetime,float finishtime,float zztime,float dqzztime,int N) {//打印调用作业情况 int i; cout<<"具体进程调度信息如下:"; cout<<endl; cout<<" 进程名 到达时间 服务时间 结束时间 周转时间 带权周转时间"; cout<<endl; for(i=0;i<=N-1;i++) { cout<<"\t"<<p[i].name<<"\t"<<p[i].arrivetime<<"\t"<<p[i].servicetime<<"\t"<<p[i].finishtime<<"\t"<<p[i].zztime<<"\t"<<p[i].dqzztime; cout<<endl; } } void Sort(F *p,int N) {//排序,以防用户不按到达时间先后输入进程 for(int i=1;i<=N-1;i++) for(int j=1;j<=i;j++) if(p[i].arrivetime<p[j].arrivetime) { F temp; temp=p[i]; p[i]=p[j]; p[j]=temp; } } void Deal(F *p,float arrivetime,float servecetime,float savetime,float finishtime,float zztime,float dqzztime,int N) { cout<<"请输入时间片:"; cin>>timeslice; int i,j,a; //float saveslice; float current=0;//当前时间 for(a=0;a<=N-1;a++){ while(p[a].savetime!=0){ for(i=0;i<=N-1;i++) { //saveslice=timeslice; for(j=0;j<timeslice;j++){ if(p[i].savetime!=0) { p[i].savetime--; current++; //saveslice=0; if(p[i].savetime==0) {p[i].finishtime=current;} if(p[i].savetime<0) { p[i].savetime++; current--; p[i].finishtime=current; } } } } for(i=0;i<=N-1;i++) { p[i].zztime=p[i].finishtime-p[i].arrivetime; p[i].dqzztime=p[i].zztime/p[i].servicetime; } for(i=0;i<=N-1;i++) { z+=p[i].zztime; d+=p[i].dqzztime; pjzztime=z/N; pjdqzztime=d/N; } } } } void Test(F *p,int N) { float arrivetime=0,servicetime=0,savetime=0,finishtime=0,zztime=0,dqzztime=0; input(p,N); Sort(p,N); Deal(p,arrivetime,servicetime,savetime,finishtime,zztime,dqzztime,N); Print(p,arrivetime,servicetime,finishtime,zztime,dqzztime,N); getchar(); } int main() { int N; cout<<endl; cout<<"请输入进程数目:"; cin>>N; Test(a,N); cout<<"平均周转时间为:"<<pjzztime<<"平均带权周转时间为:"<<pjdqzztime; system("pause"); }

运行结果示例如下:

最新回复(0)