帮我写一个高响应比作业调度C++代码
时间: 2024-02-23 10:58:05 浏览: 23
好的,以下是一个简单的高响应比作业调度的C++代码:
```c++
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
struct Process{
int pid; //进程ID
int arrival_time; //到达时间
int burst_time; //执行时间
int completion_time; //完成时间
int waiting_time; //等待时间
int turnaround_time; //周转时间
int response_ratio; //响应比
bool executed; //是否执行完毕
};
bool compare(Process a, Process b){
if(a.response_ratio != b.response_ratio)
return a.response_ratio > b.response_ratio;
else
return a.arrival_time < b.arrival_time;
}
int main(){
int n;
cout << "请输入进程个数:" << endl;
cin >> n;
vector<Process> process(n);
for(int i=0;i<n;i++){
cout << "请输入第" << i+1 << "个进程的到达时间和执行时间:" << endl;
cin >> process[i].arrival_time >> process[i].burst_time;
process[i].pid = i+1;
process[i].executed = false;
}
sort(process.begin(),process.end(),compare);
int current_time = 0; //当前时间
int completed_process = 0; //已完成进程数
int total_waiting_time = 0; //总等待时间
int total_turnaround_time = 0; //总周转时间
cout << "进程执行顺序:" << endl;
while(completed_process < n){
int max_ratio_process = -1;
float max_ratio = -1;
for(int i=0;i<n;i++){
if(process[i].arrival_time <= current_time && !process[i].executed){
process[i].response_ratio = (process[i].burst_time + current_time - process[i].arrival_time) / (float)process[i].burst_time;
if(process[i].response_ratio > max_ratio){
max_ratio = process[i].response_ratio;
max_ratio_process = i;
}
}
}
if(max_ratio_process == -1){
current_time++;
continue;
}
process[max_ratio_process].completion_time = current_time + process[max_ratio_process].burst_time;
process[max_ratio_process].turnaround_time = process[max_ratio_process].completion_time - process[max_ratio_process].arrival_time;
process[max_ratio_process].waiting_time = process[max_ratio_process].turnaround_time - process[max_ratio_process].burst_time;
total_waiting_time += process[max_ratio_process].waiting_time;
total_turnaround_time += process[max_ratio_process].turnaround_time;
process[max_ratio_process].executed = true;
completed_process++;
current_time = process[max_ratio_process].completion_time;
cout << process[max_ratio_process].pid << " ";
}
cout << endl << "平均等待时间:" << total_waiting_time / (float)n << endl;
cout << "平均周转时间:" << total_turnaround_time / (float)n << endl;
return 0;
}
```
希望能够帮到你!