Untitled
unknown
c_cpp
2 years ago
4.7 kB
12
Indexable
#include <iostream>
#include <iomanip>
#include <string>
#include <algorithm> // 包含排序函數
using namespace std;
/*
測資
P1
10
0
4
P2
2
1
1
P3
4
3
3
P4
1
4
2
P5
5
2
5
*/
int p_number=5;
class P {
private:
string name;
int arriveTime, CPUTime, priority,finishTime, waitTime, returnTime;
bool check;
public:
P() {
arriveTime = 0;
CPUTime = 0;
name = "";
priority = 0;
finishTime = 0;
waitTime = 0;
returnTime = 0;
check=0;
}
void setP(string a3, int a1, int a2, int a4) {
arriveTime = a1;
CPUTime = a2;
name = a3;
priority = a4;
finishTime = 0;
waitTime = 0;
returnTime = 0;
}
void show(){
cout<<"名稱:"<<name<<endl;
cout<<"CPU時間:"<<CPUTime<<endl;
cout<<"到達時間:"<<arriveTime<<endl;
cout<<"優先權:"<<priority<<endl;
cout<<"已完成時間:"<<finishTime<<endl;
cout<<"等待時間:"<<waitTime<<endl;
cout<<"回覆時間:"<<returnTime<<endl;
cout<<endl;
}
string getname(){//回傳名稱
return name;
}
int getCPUTime(){//回傳CPU時間
return CPUTime;
}
void setCPUTime(int a){//設定CPU時間
CPUTime=a;
}
int getarriveTime(){//回傳到達時間
return arriveTime;
}
int getpriority(){//回傳優先權
return priority;
}
int getfinishTime(){//回傳已完成時間
return finishTime;
}
void setfinishTime(int a){//設定已完成時間
finishTime=a;
}
int getWaitTime() {//回傳等待時間
return waitTime;
}
void setWaitTime(int a) {//回傳等待時間
waitTime = a;
}
int getreturnTime() {//回傳回覆時間
return returnTime;
}
void setreturnTime(int a) { //設定回覆時間
returnTime = a;
}
bool getcheck() {//回傳是否完成
return check;
}
void setcheck(bool a) {//設定是否完成
check = a;
}
};
int priority(P p1,P p2,P p3,P p4,P p5){
P p[p_number]={p1,p2,p3,p4,p5};
int order[p_number]={};
int ordernum=0,x=0,time=0;//time用到
for(int i=0;i<p_number;i++){//將所有P的優先權值塞進order陣列裡
order[i]=p[i].getpriority();
time=time+p[i].getCPUTime();//將所有的CPU時間累加後放入時間
}
string thread[time]={};//將所有時間上的名稱記錄下來
for(int i=0;i<time;i++){
thread[time]="";
}
//time=22
for(int i=0;i<time;i++){
for(int j=0;j<p_number;j++){
for(int k=0;k<p_number;k++){
order[k]=0;
}
for(int k=0;k<p_number;k++){//求時間已經到的地方,且還沒做完的P的優先級
if(p[k].getcheck()==0&&i>=p[k].getarriveTime()){
order[k]=p[k].getpriority();
// cout<<p[k].getname()<<" 優先級 "<<p[k].getpriority()<<endl;
}
}
if(*max_element(order,order+p_number)==p[j].getpriority()&&p[j].getcheck()==0){//取得最大優先權,且確認還沒做完的執行
p[j].setfinishTime(p[j].getfinishTime()+1);
thread[time]=p[j].getname();//*******************************************************
// cout<<thread[time]<<endl;
// cout<<p[j].getname()<<" finshtime:"<<p[j].getfinishTime()<<" CPUTtime:"<<p[j].getCPUTime()<<endl;
}
if(p[j].getfinishTime()==p[j].getCPUTime()&&p[j].getcheck()==0){//cpu時間等於已執行時間,且尚未確認的(為了效能)更改確認為已完成
p[j].setcheck(1);
// cout<<p[j].getname()<<"完成--------------------------------------"<<endl;
}
}
}
// cout<<x<<endl;
//計算回復時間、等待時間
for(int i=0;i<time;i++){
cout<<i<<" "<<thread[i]<<" -"<<endl;//******************************************************
}
for(int i=0;i<p_number;i++){
// p[i].show();
}
}
int main() {
P pp[p_number];
//arriveTime到達時間
//CPUTime需要執行時間
//name名稱
//waitTime等待時間
//returnTime回覆時間
//priority優先權
for (int i = 0; i < p_number; i++) {
int a1, a2, a4;
string a3;
cout << "請輸入第" << i + 1 << "個的名稱name:"; // 修正索引
cin >> a3;
cout << "請輸入第" << i + 1 << "個的CPU時間CPUTime:"; // 修正索引
cin >> a2;
cout << "請輸入第" << i + 1 << "個的到達時間arriveTime:"; // 修正索引
cin >> a1;
cout << "請輸入第" << i + 1 << "個的優先權priority:"; // 修正索引
cin >> a4;
pp[i].setP(a3, a1, a2, a4);
}
// for (int i = 0; i < p_number; i++) {
// pp[i].show();
// }
// fcfs(pp[0],pp[1],pp[2],pp[3],pp[4]);
// sjf(pp[0],pp[1],pp[2],pp[3],pp[4]);
priority(pp[0],pp[1],pp[2],pp[3],pp[4]);
// rr(pp[0],pp[1],pp[2],pp[3],pp[4]);
return 0;
}
Editor is loading...