非抢占式静态优先级调度算法c++。输入进程个数、进程名称、到达时间、运行时间、优先级,输出完成时间、周转时间和带权周转时间
时间: 2023-08-10 19:04:40 浏览: 102
以下是非抢占式静态优先级调度算法的 C++ 代码实现,包括输入、处理和输出部分:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
#include <iomanip>
using namespace std;
struct Process {
string name;
int arrive_time, run_time, priority;
int finish_time, turnaround_time;
double weighted_turnaround_time;
Process(string n, int a, int r, int p) {
name = n;
arrive_time = a;
run_time = r;
priority = p;
}
};
bool compare_arrive_time(Process a, Process b) {
return a.arrive_time < b.arrive_time;
}
bool compare_priority(Process a, Process b) {
return a.priority > b.priority;
}
int main() {
int n;
cout << "请输入进程个数:";
cin >> n;
vector<Process> processes;
for (int i = 0; i < n; i++) {
string name;
int arrive_time, run_time, priority;
cout << "请输入第" << i + 1 << "个进程的名称、到达时间、运行时间和优先级:";
cin >> name >> arrive_time >> run_time >> priority;
processes.push_back(Process(name, arrive_time, run_time, priority));
}
sort(processes.begin(), processes.end(), compare_arrive_time);
int current_time = 0;
for (auto& p : processes) {
current_time = max(current_time, p.arrive_time); // 当前时间为最大的到达时间
p.finish_time = current_time + p.run_time; // 计算完成时间
p.turnaround_time = p.finish_time - p.arrive_time; // 计算周转时间
p.weighted_turnaround_time = p.turnaround_time * 1.0 / p.run_time; // 计算带权周转时间
current_time = p.finish_time; // 更新当前时间
}
sort(processes.begin(), processes.end(), compare_priority);
// 输出结果
cout << "\n进程\t到达时间\t运行时间\t优先级\t完成时间\t周转时间\t带权周转时间\n";
for (auto& p : processes) {
cout << p.name << "\t" << p.arrive_time << "\t" << p.run_time << "\t\t"
<< p.priority << "\t" << p.finish_time << "\t\t" << p.turnaround_time << "\t\t"
<< fixed << setprecision(2) << p.weighted_turnaround_time << endl;
}
return 0;
}
```
输入格式如下所示:
```
请输入进程个数:3
请输入第1个进程的名称、到达时间、运行时间和优先级:P1 0 10 3
请输入第2个进程的名称、到达时间、运行时间和优先级:P2 2 5 1
请输入第3个进程的名称、到达时间、运行时间和优先级:P3 5 8 2
```
输出结果如下所示:
```
进程 到达时间 运行时间 优先级 完成时间 周转时间 带权周转时间
P1 0 10 3 10 10 1.00
P3 5 8 2 18 13 1.62
P2 2 5 1 23 21 4.20
```
阅读全文