用c++语言设计一个作业调度模拟器,使用先来先服务(FCFS)算法,模拟几个作业的执行过程,并计算它们的平均等待时间和周转时间。
时间: 2024-02-24 18:59:31 浏览: 57
模拟先来先服务的作业调度
好的,我理解了你的问题。下面是一个简单的 C++ 代码实现:
```cpp
#include <iostream>
using namespace std;
struct Job {
int id; // 作业ID
int arrival_time; // 到达时间
int burst_time; // 执行时间
int wait_time; // 等待时间
int turnaround_time; // 周转时间
};
int main() {
int n; // 作业数
cout << "请输入作业数: ";
cin >> n;
Job jobs[n];
for (int i = 0; i < n; i++) {
jobs[i].id = i + 1;
cout << "请输入第 " << jobs[i].id << " 个作业的到达时间和执行时间: ";
cin >> jobs[i].arrival_time >> jobs[i].burst_time;
}
// 按到达时间排序
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (jobs[i].arrival_time > jobs[j].arrival_time) {
Job temp = jobs[i];
jobs[i] = jobs[j];
jobs[j] = temp;
}
}
}
// 计算等待时间和周转时间
int time = 0;
for (int i = 0; i < n; i++) {
if (time < jobs[i].arrival_time) {
time = jobs[i].arrival_time;
}
jobs[i].wait_time = time - jobs[i].arrival_time;
jobs[i].turnaround_time = jobs[i].wait_time + jobs[i].burst_time;
time += jobs[i].burst_time;
}
// 输出结果
float avg_wait_time = 0, avg_turnaround_time = 0;
cout << "作业ID\t到达时间\t执行时间\t等待时间\t周转时间" << endl;
for (int i = 0; i < n; i++) {
cout << jobs[i].id << "\t" << jobs[i].arrival_time << "\t\t" << jobs[i].burst_time << "\t\t" << jobs[i].wait_time << "\t\t" << jobs[i].turnaround_time << endl;
avg_wait_time += jobs[i].wait_time;
avg_turnaround_time += jobs[i].turnaround_time;
}
avg_wait_time /= n;
avg_turnaround_time /= n;
cout << "平均等待时间: " << avg_wait_time << endl;
cout << "平均周转时间: " << avg_turnaround_time << endl;
return 0;
}
```
代码中使用了一个结构体 `Job` 来表示作业,包含作业ID、到达时间、执行时间、等待时间和周转时间。首先输入作业数和每个作业的到达时间和执行时间,然后按照到达时间排序,计算等待时间和周转时间,并输出结果。
这里使用了先来先服务(FCFS)算法,即按照作业到达时间的先后顺序来执行作业。在计算等待时间和周转时间时,需要记录当前时间 `time`,如果当前时间小于作业的到达时间,就将当前时间更新为作业的到达时间。然后计算作业的等待时间和周转时间,将当前时间更新为作业结束的时间。
最后输出每个作业的信息以及平均等待时间和平均周转时间。
阅读全文