Untitled
unknown
c_cpp
2 years ago
4.7 kB
9
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...