CPP/计算机组成原理实验代码/RR.cpp

170 lines
3.5 KiB
C++
Raw Normal View History

2023-05-12 00:34:15 +08:00
#include <iostream>
#include <queue>
#include <iomanip>
using namespace std;
typedef struct
{
char name;
int ArrivalTime;
int ServiceTime;
int FinishedTime;
int WholeTime;
double WeightWholeTime;
}RR;
static queue<RR>RRqueue; //<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static double AverageWT =0,AverageWWT=0;
static int q; //ʱ<><CAB1>Ƭ
static int n; //<2F><><EFBFBD≯<EFBFBD><CCB8><EFBFBD>
static RR RRarray[100]; //<2F><><EFBFBD>̽ṹ
void Input()
{
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>ģʽ
cout<<"________________________________________________________"<<endl;
cout<<"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
cin>>n;
cout<<"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>Ƭ<EFBFBD><EFBFBD> ";
cin>>q;
cout<<"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:"<<endl;
for (int i=0;i<n;i++)
{
cin>>RRarray[i].name;
}
cout<<"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̵ĵ<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>:"<<endl;
for (int i=0;i<n;i++)
{
cin>>RRarray[i].ArrivalTime;
}
cout<<"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̵ķ<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>:"<<endl;
for (int i=0;i<n;i++)
{
cin>>RRarray[i].ServiceTime;
}
}
void RRAlgorithm()
{
char processMoment[100]; //<2F>洢ÿ<E6B4A2><C3BF>ʱ<EFBFBD><CAB1>Ƭp<C6AC><70>Ӧ<EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RRqueue.push(RRarray[0]);
int processMomentPoint = 0;
int CurrentTime=0;
int tempTime;
int i=1; //ָ<><D6B8><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD>̵<EFBFBD><CCB5>±<EFBFBD>
int finalProcessNumber = 0; //ִ<><D6B4>RR<52><EFBFBD>󣬽<EFBFBD><F3A3ACBD>̵ĸ<CCB5><C4B8><EFBFBD>
int processTime[50];
//CurrentTime<6D>ij<EFBFBD>ʼ<EFBFBD><CABC>
if (RRarray[0].ServiceTime>=q)
{
CurrentTime = q;
}
else
{
CurrentTime = RRarray[0].ServiceTime;
}
while(!RRqueue.empty())
{
for (int j=i;j<n;j++) //ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̵ĵ<CCB5><C4B5><EFBFBD>ʱ<EFBFBD><CAB1>С<EFBFBD>ڵ<EFBFBD>ǰʱ<C7B0><CAB1><EFBFBD>Ľ<EFBFBD><C4BD>̶<EFBFBD><CCB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if (RRarray[j].name!=NULL && CurrentTime >= RRarray[j].ArrivalTime)
{
RRqueue.push(RRarray[j]);
i++;
}
}
if (RRqueue.front().ServiceTime<q)
{
tempTime = RRqueue.front().ServiceTime;
}
else
{
tempTime = q;
}
RRqueue.front().ServiceTime -= q; //<2F><><EFBFBD><EFBFBD>ÿִ<C3BF><D6B4>һ<EFBFBD>Σ<EFBFBD><CEA3>ͽ<EFBFBD><CDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> -q
//<2F><><EFBFBD><EFBFBD><EFBFBD>׽<EFBFBD><D7BD>̵<EFBFBD><CCB5><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
processMoment[processMomentPoint] = RRqueue.front().name;
processMomentPoint++;
processTime[finalProcessNumber] = tempTime;
finalProcessNumber++;
if (RRqueue.front().ServiceTime <= 0) //<2F><>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>
{
//RRqueue.front().FinishedTime = CurrentTime;
RRqueue.pop(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̵ķ<CCB5><C4B7><EFBFBD>ʱ<EFBFBD><CAB1>С<EFBFBD>ڵ<EFBFBD><DAB5>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ջ
}
else
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD>β
RRqueue.push(RRqueue.front());
RRqueue.pop();
}
CurrentTime += tempTime;
}
for (int i=0;i<n;i++)
{
RRarray[i].WholeTime = RRarray[i].FinishedTime - RRarray[i].ArrivalTime;
RRarray[i].WeightWholeTime = (double)RRarray[i].WholeTime/RRarray[i].ServiceTime;
}
double x=0,y=0;
for (int i=0;i<n;i++)
{
x += RRarray[i].WholeTime;
y += RRarray[i].WeightWholeTime;
}
AverageWT = x/n;
AverageWWT = y/n;
}
void display()
{
cout<<"________________________________________________________"<<endl;
cout<<"RR<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㷨ִ<EFBFBD>к󣺽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD>£<EFBFBD>"<<endl;
cout<<setw(10)<<"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID<EFBFBD><EFBFBD>"<<" ";
cout<<setw(10)<<"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>"<<" ";
cout<<setw(10)<<"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>"<<" ";
cout<<setw(10)<<"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>"<<" ";
cout<<setw(10)<<"<EFBFBD><EFBFBD>תʱ<EFBFBD><EFBFBD>"<<" ";
cout<<setw(10)<<"<EFBFBD><EFBFBD>Ȩ<EFBFBD><EFBFBD>תʱ<EFBFBD><EFBFBD>"<<endl;
for (int i = 0;i<n;i++)
{
cout<<setw(10)<<RRarray[i].name<<" ";
cout<<setw(10)<<RRarray[i].ArrivalTime<<" ";
cout<<setw(10)<<RRarray[i].ServiceTime<<" ";
cout<<setw(10)<<RRarray[i].FinishedTime<<" ";
cout<<setw(10)<<RRarray[i].WholeTime<<" ";
cout<<setw(10)<<RRarray[i].WeightWholeTime<<" "<<endl;;
}
cout<<"<EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><EFBFBD>̵<EFBFBD>ƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>תʱ<EFBFBD><EFBFBD> = "<<AverageWT<<endl;
cout<<"<EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><EFBFBD>̵<EFBFBD>ƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȩ<EFBFBD><EFBFBD>תʱ<EFBFBD><EFBFBD> = "<<AverageWWT<<endl;
cout<<"________________________________________________________"<<endl;
}
int main()
{
Input();
RRAlgorithm();
display();
system("pause");
return 0;
}